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

如何修复Discord API报错:'member_descriptor' object is not subscriptable

问题分析与修复

你遇到的'member_descriptor' object is not subscriptable错误,核心原因是直接操作Discord.py的类属性而非实例对象,同时代码里还有多处语法和逻辑错误:

关键错误点拆解

  • discord.Invite.code[int]:discord.Invite是类,code是类的属性描述符,不是实例的具体值,不能用[int]这种下标方式转换类型,而且你根本没获取到具体的Invite实例,直接操作类必然报错。
  • guild.Guild.shard_id、discord.guild.Guild.id[int]:同理,Guild是类,shard_id、id是类属性,必须通过具体的服务器实例(比如message.guild)才能访问这些值。
  • 函数内部定义__getitem__:这个特殊方法是给类用的,在普通函数里定义完全无效;另外print[id]是语法错误,print是函数,正确用法是print(id)。
  • 缺少random模块导入:random.randint会报未定义错误。
  • s = discord.client.Client只是引用了Client类,没有实例化客户端,无法正常运行机器人。

修复后的代码示例

假设你想实现的是基础聊天交互,以及获取邀请链接code、服务器ID的功能,以下是修正后的代码:

import discord
import random  # 补上缺失的导入
from discord.ext import commands  # 用commands框架更便捷

# 实例化机器人,开启所需权限
intents = discord.Intents.default()
intents.message_content = True  # 必须开启消息内容权限
bot = commands.Bot(command_prefix='!', intents=intents)

def handle_response(message_content) -> str:
    p_message = message_content.lower()

    if p_message == 'hello':
        return 'Hey'

    if p_message == 'roll':
        return str(random.randint(1,6))

    if p_message == '!help':
        return "`This is a help message.`"

    if p_message.startswith('url'):
        # 示例:用户发送"url 邀请链接"时提取code
        parts = p_message.split()
        if len(parts) < 2:
            return "请附上邀请链接,比如:url https://discord.gg/abc123"
        return parts[1].split('/')[-1]  # 从链接中提取code

@bot.event
async def on_message(message):
    if message.author.bot:  # 忽略机器人自身消息
        return
    
    response = handle_response(message.content)
    if response:
        await message.channel.send(response)

# 替换为你的机器人Token
bot.run('YOUR_BOT_TOKEN')

针对邀请code获取的进阶补充

如果需要通过API验证邀请链接并获取更多信息,可以修改url分支为:

if p_message.startswith('url'):
    parts = p_message.split()
    if len(parts) < 2:
        return "请附上邀请链接,比如:url https://discord.gg/abc123"
    
    invite_url = parts[1]
    try:
        invite = await bot.fetch_invite(invite_url)
        return f"邀请code:{invite.code}\n所属服务器ID:{invite.guild.id}"
    except discord.errors.NotFound:
        return "无效的邀请链接"
    except discord.errors.Forbidden:
        return "无权限获取该邀请信息"

额外注意事项

  • 必须在Discord开发者后台开启机器人的消息内容Intent,否则无法读取用户消息。
  • 所有属性访问都要通过实例对象(比如message.guild是Guild实例,invite是Invite实例),禁止直接操作Discord.py的类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:28