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

Python开发Discord bot不报错不崩溃但停止发消息问题求助

问题根因排查

你碰到的运行一段时间后无响应的问题由以下几个核心原因导致:

  • 无意义的高频webhook创建触发Discord资源上限:你将create_webhook逻辑放在了on_message事件的最开头,任何消息(包括bot自己发送的消息)触发事件时都会先创建新的webhook,之后才判断是否是bot自身发送的消息再return,这部分bot自身消息触发创建的webhook完全没有走删除逻辑。Discord单个频道最多允许创建10个webhook,累计超过上限后新的webhook创建请求会被拒绝,加上你没有做异常捕获,所以不会抛出报错,只会表现为后续操作无响应。
  • 重复调用API触发速率限制:你在on_message事件中反复调用await client.fetch_user()获取用户对象,该接口属于Discord高频限制接口,调用次数超限后会被Discord服务端限流,后续请求会被挂起,也会导致操作无响应。
  • 全量删除webhook的冗余操作:每次执行功能时都会拉取频道所有webhook遍历删除,不必要的API请求进一步提升了限流概率。
修复方案

你可以按照以下逻辑调整代码即可解决问题:

  1. 调整执行顺序,先判断消息发送者是否为bot自身,是则直接终止事件处理,避免无意义的资源消耗
  2. 提前将需要匹配的用户ID存为常量,直接比对message.author.id即可,不需要每次调用API拉取用户对象
  3. 将webhook创建逻辑移到实际需要使用的分支内,用完仅删除本次创建的webhook即可,不需要全量遍历删除
  4. 给API操作增加异常捕获,方便后续排查问题
修改后参考代码
import discord

TOKEN = '你的Bot Token'
# 提前定义需要匹配的用户ID,注意是整数类型
ALLOWED_USER_IDS = {123456789, 987654321} # 替换成你自己的用户ID

client = discord.Client()

@client.event
async def on_ready():
    print('{0.user} is locked and loaded'.format(client))

@client.event
async def on_message(message):
    # 第一步先判断是不是自己发的消息,是就直接返回
    if message.author == client.user:
        return
    
    username = str(message.author).split('#')[0]
    user_message = str(message.content)
    channel = str(message.channel.name)
    print(f'{username}: {user_message} ({channel})')

    hook = None
    try:
        if user_message.lower() == '!hooktest' or message.author.id in ALLOWED_USER_IDS:
            # 只有需要用的时候才创建webhook
            hook = await message.channel.create_webhook(name="HookTest7033")
            if user_message.lower() == '!hooktest':
                await hook.send("Hello")
                await hook.send("Bye")
            else:
                await hook.send("Test response")
    except Exception as e:
        # 捕获异常打印日志
        print(f"操作出错: {str(e)}")
    finally:
        # 不管执行成功还是出错,只要创建了webhook就删除本次创建的
        if hook is not None:
            await hook.delete()

client.run(TOKEN)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:05