如何获得要添加到用户的角色



我一直在尝试编写一个不和谐机器人,我正在努力为某人添加一个角色。我已经通读了几个主题,但似乎没有一个解决方案对我有帮助。

当前,当添加反应时,我将获得角色,稍后我将向用户添加角色。我有一个名为member的角色,我得到了一个错误。这是我的代码

@bot.event
async def on_raw_reaction_add(payload):
channel_id = 888832144607166505
post_cid = payload.channel_id
reactor = await bot.fetch_user(payload.member)
if channel_id == post_cid:
print('Reaction added.', reactor)
role = await discord.utils.get(reactor.server.roles, name="Member")
print(role)

这是我的错误

Traceback (most recent call last):
File "C:UsersHomeAppDataLocalProgramsPythonPython39libsite-packagesdiscordclient.py", line 343, in _run_event
await coro(*args, **kwargs)
File "c:UsersHomeDocumentsMandAStudiosbot.py", line 44, in on_raw_reaction_add
reactor = await bot.fetch_user(payload.member)
File "C:UsersHomeAppDataLocalProgramsPythonPython39libsite-packagesdiscordclient.py", line 1384, in fetch_user
data = await self.http.get_user(user_id)
File "C:UsersHomeAppDataLocalProgramsPythonPython39libsite-packagesdiscordhttp.py", line 254, in request
raise HTTPException(r, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In user_id: Value "TestAccount" is not snowflake.

您的代码中有reactor = await bot.fetch_user(payload.member),这是错误的。您提供了一个成员对象,而不是成员id,这是实参所需要的。

所以你需要把它改成reactor = await bot.fetch_user(payload.member.id)

除此之外,你没有给任何人分配一个角色,你的await在角色定义上是错误的。

@bot.event
async def on_raw_reaction_add(payload):
channel_id = 888832144607166505
post_cid = payload.channel_id
# Get reactor with id, without an API request
reactor = payload.guild.get_member(payload.member.id)
if channel_id == post_cid:
print('Reaction added.', reactor)
# get guild by id
guild = bot.get_guild(int(payload.guild_id))

# get role

role = discord.utils.get(guild.roles, name="Member")
print(role)
# add role to reactor

await reactor.add_roles(role, reason="self-role reaction")


来源
  • fetch_user
  • member.add_roles
  • discord.utils.get

正确的方法是使用guild.get_member(payload.member.id)并确保您的bot具有相关权限Src

@bot.event
async def on_raw_reaction_add(payload):
channel_id = 888832144607166505
post_cid = payload.channel_id
if channel_id == post_cid:
guild = bot.get_guild(int(payload.guild_id))
role = discord.utils.get(guild.roles, name="Member")
print(role)
member = guild.get_member(payload.member.id)
await member.add_roles(role, reason="self-role reaction")

最新更新