【问题标题】:Auto Delete Channel in discord.py在 discord.py 中自动删除频道
【发布时间】:2021-10-04 21:27:27
【问题描述】:

因此,我正在编写我的不和谐机器人以在成员加入时创建一个新的私人频道,并在特定时间后自动删除该频道,比如 1 小时。我已经创建了一个私人频道,但不知道如何让频道自行删除。

如果这是不可能的,那么当用户在为他制作的特定频道中键入特定消息(而不是命令)时删除频道可能会有所帮助。

附上代码供参考。是的,我正在与 Cogs 合作。

@commands.Cog.listener()
  async def on_member_join(self,member : discord.Member):
    ChannelName = member.name
    guild = member.guild
    
    channel = await guild.create_text_channel(name = '{}'.format(ChannelName))
    overwrites = channel.overwrites_for(member.guild.default_role)
    overwrites.read_messages, overwrites.send_messages = False, False
    await channel.set_permissions(member.guild.default_role, overwrite=overwrites)
    overwrites = channel.overwrites_for(member)
    overwrites.send_messages, overwrites.read_messages = True, True
    await channel.set_permissions(member, overwrite=overwrites)
    await channel.send ('Success!!')

【问题讨论】:

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


    【解决方案1】:

    Łukasz Kwieciński 的答案有效,虽然你可以写得更简洁:

    @commands.Cog.listener()
    async def on_member_join(self, member: discord.Member)
        overwrites = {
            ctx.guild.default_role: discord.PermissionOverwrite(read_messages=False),
            ctx.guild.me: discord.PermissionOverwrite(read_messages=True),
            ctx.author: discord.PermissionOverwrite(read_messages=True)
        }
        newChannel = await ctx.guild.create_text_channel(name=f"{ctx.author.display_name}", overwrites=overwrites)
        await asyncio.sleep(3600)
        await newChannel.delete()
    

    祝你有美好的一天:)

    【讨论】:

      【解决方案2】:

      你可以用asyncio.sleep睡一个小时,然后使用TextChannel.delete方法删除频道:

          @commands.Cog.listener()
          async def on_member_join(self,member : discord.Member):
              ChannelName = member.name
              guild = member.guild
          
              channel = await guild.create_text_channel(name = '{}'.format(ChannelName))
              overwrites = channel.overwrites_for(member.guild.default_role)
              overwrites.read_messages, overwrites.send_messages = False, False
              await channel.set_permissions(member.guild.default_role, overwrite=overwrites)
              overwrites = channel.overwrites_for(member)
              overwrites.send_messages, overwrites.read_messages = True, True
              await channel.set_permissions(member, overwrite=overwrites)
              await channel.send ('Success!!')
      
              await asyncio.sleep(3600)  # import asyncio
              await channel.delete()
      

      【讨论】:

      • 非常感谢它的工作原理。你能告诉我更多关于 asyncio 的信息吗,比如它是什么以及我还能在哪里使用它?
      • asyncio 是一个使用async/await 语法编写并发代码的库,你可以做很多事情,它主要用于IO 绑定任务。你应该学习它,因为你正在使用 discord.py
      猜你喜欢
      • 2021-01-25
      • 2021-11-08
      • 2021-12-21
      • 2018-09-10
      • 2020-10-11
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2021-08-07
      相关资源
      最近更新 更多