python - 虽然声明是 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)
解决方案
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()
推荐阅读
- c# - 实体框架案例陈述
- elasticsearch - 如何在kibana中实时在地图上绘制地理坐标
- python - 为什么我的蛮力代数求解器不起作用?
- java - 如何使用 Java DecimalFormat 强制小数点?
- azure - 使用 HCL/Terraform 的 azurerm_virtual_machine 块中的“admin_ssh_key”问题
- r - R Markdown - PDF 中的参考章节编号
- r - 如何在实时数据框中保存 sql 数据库?闪亮的
- python - 在 DataFrame Pandas 中将字符串转换为数字
- elasticsearch - 配置 ElasticSearch Magento 2.4 - 在您的集群中找不到活动节点
- ios - 将设备升级到 iOS 14 后,我们无法下载 iOS 企业应用程序