You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Discord机器人运行一段时间后冻结无响应的问题?

Discord机器人冻结问题排查与修复

核心问题分析

1. 事件函数被覆盖

你定义了三个同名的on_message事件函数,Python中后定义的函数会直接覆盖前两个,导致只有最后一个TikTok链接的处理逻辑生效,前两个Twitter/X的规则完全失效。

2. 错误的退出方式

ss命令里用exit()是同步终止操作,在asyncio事件循环中直接调用会破坏循环结构,引发未捕获的异常,严重时会导致机器人冻结。

3. 无异常处理机制

当消息发送/删除操作失败(比如权限不足、目标消息已被删除),未捕获的异常会阻塞事件循环,让机器人无法响应后续指令。

4. 运行环境与网络问题

Windows休眠会中断网络连接,若discord.py的重连机制未正常触发,机器人会维持“在线”状态但无法和Discord服务器通信;直接在VS Code运行时,若终端被后台挂起也可能导致循环阻塞。


修复后的完整代码

from discord.ext import commands
import discord

BOT_TOKEN = "你的机器人令牌"
CHANNEL_ID = "目标频道ID" 

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.event
async def on_message(message: discord.Message):
    # 跳过机器人自身发送的消息,避免循环触发
    if message.author.bot:
        await bot.process_commands(message)
        return
    
    try:
        # 合并所有链接处理逻辑
        if "https://twitter.com/" in message.content:
            new_message = message.content[:8] + "vx" + message.content[8:]
            await message.channel.send(new_message)
            await message.delete()
        elif "https://x.com/" in message.content:
            new_message = message.content[:8] + "fixv" + message.content[8:]
            await message.channel.send(new_message)
            await message.delete()
        elif "https://www.tiktok.com/t/ZT8QnN8hg/" in message.content:
            new_message = message.content[:8] + "vx" + message.content[8:]
            await message.channel.send(new_message)
            await message.delete()
    except Exception as e:
        # 打印错误信息,避免阻塞事件循环
        print(f"处理消息时出错: {str(e)}")
    finally:
        # 必须调用该方法,确保命令能被处理
        await bot.process_commands(message)
    
@bot.command()
@commands.is_owner()
async def ss(context):
    # 优雅关闭机器人
    await bot.close()

if __name__ == "__main__":
    # 添加main函数,支持CMD/PowerShell直接启动
    bot.run(BOT_TOKEN)

额外优化建议

  • 支持命令行启动:修复后的代码包含if __name__ == "__main__"块,现在可以直接在CMD/PowerShell中运行python 你的文件名.py启动机器人。
  • 禁用Windows休眠:运行机器人时,将Windows电源设置改为“从不休眠”,防止网络中断导致连接异常。
  • 启用日志排查:可以添加日志功能,方便定位冻结时的具体错误:
    import logging
    logging.basicConfig(level=logging.INFO)
    
  • 确认权限配置:确保机器人拥有消息发送、删除的频道权限,避免因权限不足引发异常。

内容的提问来源于stack exchange,提问作者Ohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:06:16