【问题标题】:How can I combine event function and command function include ctx?如何结合事件功能和命令功能包括ctx?
【发布时间】:2021-12-22 07:36:09
【问题描述】:
@bot.command()
async def PrivateChannel(ctx):
    guild = ctx.guild
    overwrites = {
        guild.default_role: discord.PermissionOverwrite(read_messages=False),
    }
    channel = await guild.create_text_channel('secret', overwrites=overwrites)

这是创建私人频道的代码

当用户进入语音频道时,我想创建一个私人频道

所以我不得不把这个函数放在@bot.event 中

但它不起作用。

@bot.event
async def on_voice_state_update(member, before, after):
    if before.channel is None and after.channel is not None:
        async def PrivateChannel(ctx):
            guild = ctx.guild
            overwrites = {
                guild.default_role: discord.PermissionOverwrite(read_messages=False),
            }
            channel = await guild.create_text_channel('secret', overwrites=overwrites)

【问题讨论】:

    标签: python discord discord.py bots


    【解决方案1】:

    它不起作用,因为您需要将调用上下文(在本例中为 ctx)传递给命令协程,而您无法从 on_voice_state_update 事件中获取。

    由于您只需要ctx 即可获得guild,因此您可以使用member.guild 而不是ctx.guild

    @bot.event
    async def on_voice_state_update(member, before, after):
        if before.channel is None and after.channel is not None:
            guild = member.guild
            overwrites = {
                guild.default_role: discord.PermissionOverwrite(read_messages=False),
                }
            channel = await guild.create_text_channel('secret', overwrites=overwrites)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-27
      • 2019-06-11
      • 1970-01-01
      • 2015-10-22
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多