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

discord.py运行报错'Member' has no attribute 'server'如何解决

报错原因

你遇到的'Member' has no attribute 'server'报错是因为discord.py v1.0版本之后,原有的server属性已经统一重命名为guild,旧属性已被移除。同时你的代码还有另外2处不符合当前discord.py版本规范的写法,也需要同步修改。

修复步骤
  • 第一步:替换属性名,将user.server.roles修改为user.guild.roles
  • 第二步:修正身份组添加方法,discord.py v1.0+ 给成员添加身份组的方法改为直接调用Member实例的add_roles方法,将await client.add_roles(user, role)修改为await user.add_roles(role)
  • 第三步:启用必要的Intents,当前Discord API要求必须显式声明启用机器人的相关权限意图,否则无法获取成员信息、监听反应事件,需要先在Discord开发者平台的机器人设置页开启Server Members Intent、Message Content Intent两个开关,再在代码中初始化时声明启用意图。
完整修复后代码
import discord
from discord.ext import commands

# 启用必要的意图
intents = discord.Intents.default()
intents.members = True
intents.message_content = True
intents.reactions = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print('ready')

@client.event
async def on_reaction_add(reaction, user):
    # 排除机器人自己的反应
    if user.bot:
        return
    channel = reaction.message.channel

    await channel.send(f'{user.name} 已使用 {reaction.emoji} 表情回应,原消息内容为:{reaction.message.content}')

    # 替换server为guild
    role = discord.utils.get(user.guild.roles, name='Bot')
    if role:
        # 调用成员的add_roles方法
        await user.add_roles(role)
    else:
        await channel.send("未找到名为Bot的身份组,请检查配置")

client.run('你的机器人TOKEN')
额外注意事项
  • 机器人自身的身份组排序必须高于你要授予的「Bot」身份组,否则会因权限不足无法授予身份组
  • 确保机器人拥有「管理身份组」的服务器权限
  • 不要泄露你的机器人TOKEN,避免被他人恶意使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:12:02