我有一个Discord机器人,你可以在那里用 !activate
.在事件中,我希望机器人能给 message.author
的 PREMIUM MEMBER
角色在我的discord.我如何才能让它工作。
我用的是@client.event而不是ctx。
谢谢你的回答!我有一个Discord机器人,你可以用!激活来激活你的钥匙。
试试这个
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。
你需要机器人所在的公会对象,这样它就知道从哪里获取角色。此外, 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)
引用。