在 discord.py 中添加角色失败且没有错误

时间:2021-02-04 18:12:21

标签: discord.py

所以我没有出错,但它总是给我发回 else 消息。有人能告诉我我做错了什么吗?

import discord

intents = discord.Intents.default()
intents.members = True
ar=discord.Client(intents=intents)

async def on_message(message):
    member = message.author
    if message.content == "/verify":
        role = message.guild.get_role(ROLE_ID)
        await member.add_roles(role)
        await message.author.send("Du bist jetzt auf FlexGames Deescord verifiziert! Viel Spaß und lies dir #infos-regeln durch!")
    else:
        await message.author.send("Die Verifizierung ist fehlgeschlagen! Bitte probiere es erneut!")

(如果您尝试此代码,请不要忘记 bot.run('token') 和 bot=discord.Client() 例如)。我还给了机器人它需要的所有权限

编辑:我将代码更新为新代码并激活了机器人的意图,但仍然无法正常工作,要么将 else 消息发回给我,要么只是没有给出任何错误。

最终编辑:我太愚蠢了,不知道在那个错误之前我有什么问题(ar.wait_for)所以他的解决方案是正确的

1 个答案:

答案 0 :(得分:1)

  1. 您只能向 discord.Member 实例添加角色,在定义成员变量时您将获得 ID 本身,而不是 discord.Member 实例
member = message.author # Without the id attribute
  1. Member.add_roles 中,您需要传递 discord.Role 个实例,而不是 ID 本身,您可以使用 Guild.get_role 获取实例
role = message.guild.get_role(role_id)
await member.add_roles(role)

您的代码已修复:

async def on_message(message):
    member = message.author
    if message.content.startswith("/verify"):
        role = message.guild.get_role(ROLE_ID_HERE)
        await member.add_roles(role)

还有一个问题,您需要启用 intents.members 和更多的意图,否则某些属性可能是 NoneType

intents = discord.Intents.default()
intents.members = True # Explicitly enabling members as it's a privileged intent

client = discord.Client(intents=intents)

还要记住在 developer portalguide

中启用特权成员意图

参考: