我有一个不和谐的机器人,您可以在其中使用!activate
激活密钥。
在活动中,我希望机器人根据自己的意愿向message.author
授予PREMIUM MEMBER
的角色。
我该怎么做
我正在使用@ client.event而不是ctx。
感谢您的回答!
答案 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。