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

使用discord.Guild.get_role()通过角色ID获取Role对象报错解决

问题:使用discord.Guild.get_role()获取角色时触发TypeError错误

我尝试用discord.Guild.get_role()方法通过角色ID获取Role对象,编写的代码为:

role = discord.Guild.get_role(role_id=config.ROLE_ID)

运行后触发TypeError错误,错误信息如下:

Traceback (most recent call last):
  File "C:\Users\Master\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\client.py", line 441, in _run_event
    await coro(*args, **kwargs)
  File "c:\Users\Master\Desktop\ДЗ\Python\DiscrodBot\bot.py", line 15, in on_member_join
    role = discord.Guild.get_role(role_id=config.ROLE_ID)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Guild.get_role() got some positional-only arguments passed as keyword arguments: 'role_id'

我的完整代码如下:

import discord
from discord.ext import commands

import config

intents = discord.Intents.all()
intents.message_content = True

bot = commands.Bot(command_prefix=config.BOT_CMD_PREFIX, intents=intents)

@bot.event
async def on_member_join(member):
    if config.IS_ADD_ROLE_CONNECTION_MEMBER:
        role = discord.Guild.get_role(role_id=config.ROLE_ID)
        await member.add_roles(role)

if __name__ == "__main__":
    bot.run(config.BOT_TOKEN)

错误原因

  • 参数传递错误:Guild.get_role()的角色ID参数是位置必填参数,不支持role_id=这种关键字参数传递,必须直接传入ID值。
  • 调用方式错误:discord.Guild.get_role()是实例方法,不能直接通过类调用,必须使用具体的服务器(Guild)实例来调用。

修复方案

修改on_member_join事件中的代码,通过member.guild获取用户加入的服务器实例,然后直接传递角色ID:

@bot.event
async def on_member_join(member):
    if config.IS_ADD_ROLE_CONNECTION_MEMBER:
        # 获取用户所在服务器实例,直接传入角色ID
        role = member.guild.get_role(config.ROLE_ID)
        await member.add_roles(role)

额外注意事项

  • 确认config.ROLE_ID是整数类型的角色ID,若为字符串需要先转换为整数。
  • 机器人需要拥有「管理角色」的权限,否则执行add_roles时会触发权限不足的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:55:59