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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:59:35