discord.py - 在机器人重启或崩溃 discord.py 的情况下如何触发事件
问题描述
我希望我的机器人在我重新启动或崩溃时激活一个删除瞬时数据的事件。我尝试on_disconnect
用作事件,但它不起作用。在下面的代码中,我用作on_disconnect
命令,但我希望有一个事件。这是可能的?
async def on_disconnect(ctx):
cursor = levelsystem_db.cursor()
for member in ctx.guild.members:
cursor.execute(f"SELECT * FROM anti_spam WHERE client_id = {str(member.id)}")
result = cursor.fetchall()
print(member, member.id, len(result))
if (len(result) != 0):
cursor.execute(f"DELETE FROM anti_spam WHERE client_id = {str(member.id)}")
levelsystem_db.commit()
print(f"ho rimosso i dati di {member}")
编辑:
import discord
class Bot(discord.Client):
def __init__(self) -> None:
discord.Client.__init__(self)
return
async def on_ready(self) -> None:
await self.close() # This can simulate a crash for now
return
if __name__ == '__main__':
client = Bot()
client.run(token)
# Code after crash here
print('Bot has crashed')
cursor = levelsystem_db.cursor()
guild = client.get_guild(637626960599842824)
print(guild)
for member in guild.members:
cursor.execute(f"SELECT * FROM anti_spam WHERE client_id = {str(member.id)}")
result = cursor.fetchall()
print(member, member.id, len(result))
if (len(result) != 0):
cursor.execute(f"DELETE FROM anti_spam WHERE client_id = {str(member.id)}")
levelsystem_db.commit()
print(f"ho rimosso i dati di {member}")
解决方案
如果机器人崩溃,你可以在你的代码之后client.run('TOKEN')
执行。例如:
import discord
class Bot(discord.Client):
def __init__(self) -> None:
discord.Client.__init__(self)
return
async def on_ready(self) -> None:
await self.close() # This can simulate a crash for now
return
if __name__ == '__main__':
client = Bot()
client.run('TOKEN')
# Code after crash here
print('Bot has crashed')
通过这种实现,您甚至可以调用一个子进程来使机器人重新联机。
编辑(事件循环错误修复):
您将要导入这些:
from asyncio import set_event_loop
from asyncio import SelectorEventLoop
from selectors import SelectSelector
然后在创建客户端之前有这一行:
set_event_loop(SelectorEventLoop(SelectSelector()))
推荐阅读
- python - 避免在 Python 中的函数内进行重复的大数组计算
- spring-boot - 如何在不停机的情况下重新部署springboot应用程序
- javascript - Chrome 不断将我的 mvc 视图自动滚动到顶部
- postgresql - ANY/ALL (array) 不支持设置参数
- sql - Spring数据@Query原生请求
- javascript - 对象数组的 Javascript 范围
- java - Gradle - 了解依赖的来源
- google-sheets - ArrayFormula 单元格部分替换数组
- laravel - 如何解决未知自定义元素问题?
- install4j - install4j 安装期间临时可执行文件的位置