首页 > 解决方案 > 虽然声明是 heroku discord bot 在一段时间后停止工作

问题描述

我制作了我的第一个不和谐机器人,它的作用是侦听一个名为的命令+purge并清除执行它的通道中的所有消息。

然而,就像我其他朋友的机器人一样,机器人变得功能失调。这可能是 Heroku,但我对此表示怀疑?我可能需要一个 break 语句,但不确定。我也试图在多台服务器上运行它,所以我希望布尔变量的每个名称都有服务器 ID。

通过不工作,我的意思是它不会再删除消息,并且在运行我认为的命令后发送垃圾邮件时会出现一些故障。它可能与isActive变量有关。

isActive = False

@bot.command(pass_context=True)
@has_role("Guild Master")
async def purge(ctx):
    global isActive
    isActive = not isActive
    if isActive:
        while isActive:
            await ctx.channel.purge(limit=999)

标签: pythonherokuwhile-loopdiscord.py

解决方案


  • await ctx.channel.purge(limit=999)不需要放入 while 循环,因为该函数已经使用自己的循环来删除
  • 由于您将布尔值声明isActive为全局,因此布尔值的状态保存在范围之外,导致函数每隔一次调用它就运行一次
  • 您可以将isActive布尔值的概念装箱,因为函数下方的代码在调用后会自动变为活动状态
  • 在您的情况下,该功能应该只有几行(并且在任何公会中仍然可以正常工作):
@bot.command(pass_context=True)
@has_role("Guild Master")
async def purge(ctx):
    await ctx.channel.purge(limit=999)

编辑:如果我们想删除通道中发送的每条消息,我们可以使用on_message监听器,如下所示:

@commands.Cog.listener()
async def on_message(message):
    if message.channel == noMessageChannel:
         await message.delete()

推荐阅读