在直接留言中添加不和角色给某人

问题描述 投票:0回答:1

我有一个Discord机器人,你可以在那里用 !activate.在事件中,我希望机器人能给 message.authorPREMIUM MEMBER 角色在我的discord.我如何才能让它工作。

我用的是@client.event而不是ctx。

谢谢你的回答!我有一个Discord机器人,你可以用!激活来激活你的钥匙。

python bots message discord.py roles
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。


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)

引用。

© www.soinside.com 2019 - 2024. All rights reserved.