在直接消息中向某人添加不和谐角色

时间:2020-06-02 18:35:25

标签: python discord.py

我有一个不和谐的机器人,您可以在其中使用!activate激活密钥。 在活动中,我希望机器人根据自己的意愿向message.author授予PREMIUM MEMBER的角色。 我该怎么做

我正在使用@ client.event而不是ctx。

感谢您的回答!

2 个答案:

答案 0 :(得分:0)

您将需要机器人所在的公会对象,因此它知道从何处获取角色。另外,message.author对象将返回一个User,而不是Member,但是我们需要Member对象才能添加角色。

@client.event
async def on_message(message):
    if message.content.lower().startswith("!activate") and not message.guild:
        guild = client.get_guild(112233445566778899) # the guild's ID
        role = discord.utils.get(guild.roles, name="PREMIUM MEMBER") # or you can use id=
        member = await guild.fetch_member(message.author.id)
        await member.add_roles(role)

参考:

答案 1 :(得分:0)

尝试一下

def check_activation_key(activation_key):
    # do your check here, return True or False

@client.event
async def on_message(message):

    if message.content.startswith('!activate ') and message.channel == message.author.dm_channel: # !activate, dms only
        activation_key = message.content[10:]
        if check_activation_key(activation_key):
            guild = client.get_guild(ID_OF_SERVER_TO_ASSIGN_ROLE_IN) # right click and "copy id"
            role = guild.get_role(ID_OF_ROLE_TO_ASSIGN) # right click and "copy id"
            await guild.get_member(message.author.id).add_roles(role)
    if message.content.startswith('!unactivate') and message.channel == message.author.dm_channel:
        guild = client.get_guild(ID_OF_SERVER_TO_TAKE_ROLE_IN)
        if ('PREMIUM MEMBER' in [role.name for role in guild.get_member(message.author.id).roles]):
            await guild.get_member(message.author.id).remove_roles(guild.get_role(ID_OF_ROLE_GOES_HERE))
        else:
            await message.channel.send('You did not verify yet')

缺点是它不支持多个服务器,仅支持1个,但是您可以使用不同的服务器ID来创建不同的激活器命令。

通过右键单击图标/横幅并选择“复制ID”来获取行会ID。右键单击某个角色(在服务器设置或某人的个人资料中),然后选择“复制ID”,以获取角色的ID。