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

Discord.py中Bot权限不足时无法发送错误消息的问题求助

解决Discord.py机器人权限不足提示无效的问题

你当前代码仅处理了机器人缺少具体权限(如发送消息、管理频道)的场景,若要针对「机器人缺少角色」的情况触发提示,需使用对应的错误类,同时注意错误解包的细节,以下是修正后的完整逻辑:

import discord
from discord.ext import commands

@Bot.event
async def on_command_error(ctx, error):
    # 解包Discord.py可能包装的原始错误
    error = getattr(error, 'original', error)
    
    # 处理机器人缺少单个必要角色的情况
    if isinstance(error, commands.BotMissingRole):
        embed = discord.Embed(
            title="权限不足",
            description=f"我缺少必要角色:{error.missing_role}",
            color=discord.Color.red()
        )
        await ctx.send(embed=embed)
    # 处理机器人缺少任意一个所需角色的情况
    elif isinstance(error, commands.BotMissingAnyRole):
        missing_roles = ", ".join(str(role) for role in error.missing_roles)
        embed = discord.Embed(
            title="权限不足",
            description=f"我缺少以下任一必要角色:{missing_roles}",
            color=discord.Color.red()
        )
        await ctx.send(embed=embed)
    # 保留原有的「缺少具体权限」处理逻辑
    elif isinstance(error, commands.BotMissingPermissions):
        missing_perms = ", ".join(error.missing_permissions)
        embed = discord.Embed(
            title="权限不足",
            description=f"我缺少必要权限:{missing_perms}",
            color=discord.Color.red()
        )
        await ctx.send(embed=embed)

关键说明:

  • commands.BotMissingRole:机器人缺少指定单个角色时触发
  • commands.BotMissingAnyRole:机器人缺少多个所需角色中的任意一个时触发
  • 错误解包:部分错误会被CommandInvokeError包装,需通过getattr(error, 'original', error)获取真实错误类型
  • 确保机器人自身拥有发送消息的权限,否则错误提示无法正常发送

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:55:17