是否有任何方法可以停止并启动discord.py bot,而不必重新启动整个py文件?

2024-09-30 22:13:47 发布

您现在位置:Python中文网/ 问答频道 /正文

根据discord.py的discord服务器及其文档,您需要在使用“bot.close()”后重新启动整个py文件,因为它与它们的api断开连接。不幸的是,我正在尝试创建一个启动器,而重启整个启动器来重启bot并不理想,有人知道在使用“bot.close()”之后启动discord.py bot的“黑客”方法吗?它不需要漂亮,只需要远程工作。如有任何建议/提示,将不胜感激

    @asyncSlot()
    async def on_btnStartBot_clicked(self):
        self.pushButton_startBot.setEnabled(False)
        if self.isBotRunning == False:
            self.statusbar.showMessage("Starting Bot...")
            try:
                if isinstance(cfg["bot"]["token"], str) and cfg["bot"]["token"] != "":
                    await bot.start(cfg["bot"]["token"])
                elif isinstance(cfg["bot"]["token"], list) and not all(token == "" for token in cfg["bot"]["token"]):
                    def first_token():
                        for t in cfg["bot"]["token"]:
                            if t != "":
                                return t
                    await bot.start(first_token())
                else:
                    terminal.log("CRITICAL", f"No token was provided in '{utils.config.CONFIG_PATH}'")
            except Exception as e:
                self.statusbar.showMessage(str(e))
        else:
            self.statusbar.showMessage("Stopping Bot...")
            await bot.close()
            self.plainTextEdit_botTerminal.clear()
            while not bot.is_closed():
                print('Not Yet Closed')
            if bot.is_closed():
                print("Closed")
                self.statusbar.showMessage("Bot Has Been Stopped...")
                self.pushButton_startBot.setText("Start Bot")
                self.isBotRunning = False
                await asyncio.sleep(1)
                self.pushButton_startBot.setEnabled(True)

Tags: pyselftokenfalsecloseifbotawait
2条回答

我认为您可以在自己的类或函数中编写BOT。 我不太确定这是否可行,但你可以试试

最好创建第二个永远循环的脚本,然后您可以调用该脚本来启动bot,这个bot脚本可以在调用bot.close()时结束。然后,当需要再次启动bot时,可以再次调用bot脚本。这将允许您轻松地重新启动bot,而无需重新启动启动器

相关问题 更多 >