discord.py !give命令报错(ERROR discord.ext.commands.bot Ignoring exception in command give)的排查与解决咨询
discord.py !give命令报错(ERROR discord.ext.commands.bot Ignoring exception in command give)的排查与解决咨询
嘿,别慌!这个报错提示只是告诉你命令执行出问题了,但没说具体原因,咱们一步步来排查和修复:
第一步:先让Bot输出具体错误信息
默认情况下,discord.py只会提示有异常但不显示详情,咱们先加个错误处理,把具体错误打出来,这样才能精准定位问题:
@bot.event async def on_command_error(ctx, error): # 把错误信息打印到控制台,同时发送到频道里 print(f"命令执行出错详情: {str(error)}") await ctx.send(f"哎呀,出错啦!具体原因:{str(error)}")
添加这段代码后,再执行!give命令,就能看到到底是语法错误、权限问题还是其他原因了。
第二步:修复代码里的缩进问题
Python对缩进要求特别严格,你的代码里有好几处缩进错误,这是最常见的语法问题:
on_ready函数里的print语句没有缩进,必须和async def on_ready()保持同一层级缩进give函数里的循环、判断语句缩进也有问题,修正后的完整代码示例:
import discord from discord.ext import commands intents = discord.Intents.default() intents.members = True intents.message_content = True # v2版本需要开启这个意图 bot = commands.Bot(command_prefix='!', intents=intents) @bot.event async def on_ready(): print(f'Logged in as {bot.user.name}') # 这里必须缩进! @bot.command() @commands.has_permissions(administrator=True) async def give(ctx: commands.Context, user_id: int): user = ctx.guild.get_member(user_id) if user: role_ids = [1162989885439885323, 1162991880687063172, 1160602324633387178, 1161231761083211856, 1161231909544800286] # 替换成你服务器的角色ID for role_id in role_ids: role = ctx.guild.get_role(role_id) if role: await user.add_roles(role) # 把发送消息移到循环外面,避免添加一个角色发一次消息 await ctx.send(f'{user.display_name}님에게 역할을 지급했습니다.') print('정상작동완료') else: await ctx.send('유저를 찾을 수 없습니다.') # 这里必须替换成你从Discord开发者平台获取的真实Bot Token! bot.run('你的真实Bot Token')
第三步:检查几个关键配置
- Bot Token是否正确:你代码里
bot.run('no')肯定不行,必须替换成Discord开发者平台给你的Bot专属Token,否则Bot连登录都做不到。 - Intents是否在开发者平台开启:虽然你代码里开了
members和message_content意图,但还要去Discord开发者平台的Bot页面,找到Privileged Gateway Intents,把Server Members Intent和Message Content Intent都打开,否则意图设置不生效,会导致获取不到用户或消息。 - Bot的权限与角色层级:
- 确保Bot在服务器里有管理角色的权限
- Bot的角色位置要比你要添加的那些角色高,否则Discord不允许Bot给用户添加层级比自己高的角色
- 用户ID输入是否正确:执行
!give命令时,必须输入目标用户的纯数字ID,不能是用户名或昵称,而且这个用户必须在当前服务器里,否则会触发“유저를 찾을 수 없습니다.”的提示。 - 角色ID是否有效:检查你列表里的角色ID是否都是当前服务器里存在的有效ID,无效ID会导致角色获取失败。
按照上面的步骤一步步排查,应该就能解决你的问题啦!
备注:内容来源于stack exchange,提问作者wari
相关产品推荐
相关产品推荐

