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

Discord.py机器人触发🔄表情反应后原消息无法删除问题排查

问题原因

原消息无法删除的核心触发点如下:

  • 执行顺序问题:现有代码先调用rlgarage函数再执行删除操作,如果rlgarage执行过程中抛出异常,后续的删除逻辑会直接中断无法运行
  • 无异常捕获:如果触发回调时原消息已经被其他逻辑/人工删除,msg.delete()会抛出discord.NotFound异常,没有捕获的情况下会导致流程中断
  • 权限缺失:机器人没有对应频道的「管理消息」权限,无法删除已发送的消息
修复代码
msg = await ctx.send(embed=embed)
await msg.add_reaction("🔄")
try:
    await bot.wait_for(
        "reaction_add",
        timeout=1000.0, 
        check=lambda reaction, user: user == ctx.author and reaction.emoji == "🔄" and reaction.message == msg,
    )
except asyncio.TimeoutError:
    try:
        await msg.remove_reaction("🔄", bot.user)
    except discord.NotFound:
        pass
else:
    # 先执行删除操作,避免后续逻辑出错导致残留
    try:
        # 权限校验(可选,用于快速排查问题)
        if not ctx.channel.permissions_for(ctx.guild.me).manage_messages:
            raise PermissionError("缺少管理消息权限,无法删除原消息")
        await msg.delete()
    except (discord.NotFound, discord.Forbidden, PermissionError):
        # 消息已删除/无权限时直接跳过,不影响后续刷新逻辑
        pass
    # 再执行刷新后的命令逻辑
    await rlgarage(ctx, arg=arg)
关键修改说明
  • 调整了执行顺序,将删除原消息的逻辑放到命令执行前,避免命令执行出错导致原消息留存
  • 给删除逻辑增加了全场景异常捕获,兼容消息已提前删除、机器人无权限的场景,不会中断后续刷新逻辑
  • 增加了可选的权限校验逻辑,便于开发时快速定位权限类问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:15:05