Discord Py-如何将on_message用户添加到角色?

时间:2020-07-01 03:15:08

标签: discord discord.py

我想使用正则表达式查看并接受用户的任何传入消息,并为他们分配一个角色。但是只有在该用户尚未分配角色的情况下才可以。运行代码时没有出现任何错误,但是它不起作用。

这就是我所拥有的:

@client.event
async def on_message(message):
    match = re.search(r'(.*?)', message.content)
    member = message.author
    role = discord.utils.get(member.guild.roles, name="Creators")
    if message.author == client.user:
        return

    if role not in member.roles:
        if match and message.channel.id == target_channel:
            # add member to role
            # send message to to users
            await message.channel.send(
                f'Hi {message.author}, welcome to the server! Don\'t forget to choose your #roles'
            )
            await discord.Member.add_roles(member, role)

3 个答案:

答案 0 :(得分:1)

您写道:

await discord.Member.add_roles(member, role)

https://discordpy.readthedocs.io/en/latest/api.html?highlight=add_role#discord.Member.add_roles

从文档中可以看到,传递的参数为*roles, reason=None, atomic=True。您必须指定rolesreasonatomic是可选的。

您尝试传递无效的参数member

discord.Member是一门课。您需要获得该课程的instancectx.authordiscord.Member的实例。

因此,最终通话应为:

await ctx.author.add_roles(role)

答案 1 :(得分:0)

要从Member获取on_message对象,可以使用member = message.author。 然后只需member.add_roles(role)

答案 2 :(得分:-1)

感谢帮助人员,事实证明这是非常微小的事情(对我而言是愚蠢的)阻止了它的工作。

在将message.channel.id。id与target_channel进行比较时,我忘记了通道ID对象不是作为字符串输入的,但是target_channel被设置为字符串,因此无法将它们视为等于。只需将message.channel.id转换为字符串即可。