【问题标题】:trigger channel purge in tasks/message contains specific keyword在任务/消息中触发通道清除包含特定关键字
【发布时间】:2021-03-30 12:00:03
【问题描述】:

仍在开发我的第一个 python 项目(discord bot)

终于让我的第一个任务运行起来了,它的工作完美无缺。

现在我想创建第二个任务,每 x 小时删除一次频道历史记录。

我当前的“清除”事件只是这样的命令:

@bot.command(name='deleteme', help='testing command for dev use')
    async def purge(ctx, limit=1, member: discord.Member=None):
        await ctx.message.delete()
        msg = []
        try:
            limit = int(limit)
        except:
            return await ctx.send("Please pass in an integer as limit")
        if not member:
            await ctx.channel.purge(limit=limit)
            return await ctx.send(f"Purged {limit} messages", delete_after=3)

当我使用“!deleteme”命令时它运行良好,但到目前为止我试图将它放入任务中的一切都失败了。

也许你们有一些想法,我怎样才能让它发挥作用。

编辑。

对于遇到相同问题的每个人来说,这是我完美的解决方案。

@tasks.loop(seconds=898)
async def __purge():
    message_channel = bot.get_channel(target_channel_id)
    if str(message_channel) == "YOURCHANNELNAME":
            await message_channel.purge(limit=200)

【问题讨论】:

    标签: python-3.x discord.py


    【解决方案1】:

    你应该看看discord tasks

    只需在清除函数上方添加@tasks.loop(hours=2) 即可每 2 小时执行一次。要开始循环,您必须在 Python 脚本中调用 purge.start()。这将执行该函数并等待 2 小时,然后再次执行它

    【讨论】:

    • 嘿,首先感谢您的回答。那么总会得到一个命令错误。 " purge.start() AttributeError: 'Command' 对象没有属性 'start'"
    • 很抱歉,从我链接的网站上可以看出,您只能在函数上使用@tasks.loop() 而不能在命令上使用。所以你应该创建一个命令purge 来调用另一个函数,例如_purge(它的常用命名方式)来删除消息。然后另一个带有装饰器的函数也调用_purge
    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 2018-06-01
    • 2020-11-22
    • 2016-10-30
    • 2020-10-12
    • 2011-09-06
    • 1970-01-01
    • 2021-04-06
    相关资源
    最近更新 更多