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
相关产品推荐
相关产品推荐

