Discord bot 不会运行启动序列
Posted
技术标签:
【中文标题】Discord bot 不会运行启动序列【英文标题】:Discord bot won't run startup sequence 【发布时间】:2021-05-29 07:24:03 【问题描述】:我正在制作一个不和谐的机器人,它不会运行我制作的序列,当它加入服务器时,它应该在该类别中创建一个角色、一个类别和两个频道。
async def on_server_join(ctx):
await ctx.guild.create_category('Friend')
await ctx.guild.create_role(name="friend.admin", mentionable=True)
category = ctx.guild.utils.get(ctx.guild.categories, name='Friend')
await ctx.guild.create_text_channel('Chat-with-@Friend', category=category)
guild = ctx.guild
admin_role = ctx.guild.roles, name="Admin"
overwrites =
guild.default_role: ctx.guild.PermissionOverwrite(read_messages=False),
guild.me: ctx.guild.PermissionOverwrite(read_messages=True),
admin_role: ctx.guild.PermissionOverwrite(read_messages=True)
await guild.create_text_channel('secret', overwrites=overwrites, category=category)```
【问题讨论】:
【参考方案1】:要控制机器人加入服务器时发生的情况,您需要使用on_guild_join
事件。您正在尝试将 on_server_join
与 ctx 参数一起使用,
ctx
通常用作命令的上下文。
@bot.command()
async def on_guild_join(guild): #guild is a discord.Guild
await guild.create_channel('Friend')
# make sure you have permissions
参考资料:
on_guild_join bot events guild【讨论】:
【参考方案2】:这是因为事件是on_guild_join(guild)
。试试这个:
@bot.event # or client.event based on your code
async def on_guild_join(guild):
await guild.create_category('Friend')
# rest of your code
因此,事件不是传入ctx
,而是传入guild
,您可以使用guild.create
而不是ctx.guild.create
创建频道、角色、类别等。
【讨论】:
但guild
不作为对象运行。它必须是ctx
的属性。否则会出错
@James 不是真的,你不需要ctx
来访问guild
及其属性。试试我的代码,看看它是否适合你。以上是关于Discord bot 不会运行启动序列的主要内容,如果未能解决你的问题,请参考以下文章