【问题标题】:Discord bot won't run startup sequenceDiscord bot 不会运行启动序列
【发布时间】: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)```

【问题讨论】:

    标签: python python-3.x discord discord.py bots


    【解决方案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
    

    参考资料:

    【讨论】:

      【解决方案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 及其属性。试试我的代码,看看它是否适合你。
      猜你喜欢
      • 2018-05-23
      • 2018-07-29
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2021-07-13
      • 2021-07-21
      • 2022-10-21
      • 2021-03-30
      相关资源
      最近更新 更多