@client.command(pass_context=True)
@commands.has_permissions(administrator=True)
async def mp(self, ctx, payload):
emb = discord.Embed(title=f'Праздник вазилина', description='Нажми на реакцию что бы получить роль', colour=discord.Color.purple())
message = await ctx.send(embed=emb) # Возвращаем сообщение после отправки
message.add_reaction('✅')
member = utils.get(message.guild.members, id=payload.user_id)
emoji = str(payload.emoji)
roles = utils.get(message.guild.roles, id=config.ROLE[emoji],)
await member.add_roles(roles)
print('[SUCCESS] Пользователь {0.display_name} получил новую роль {1.name}'.format(member, role))
await member.send('test')
@client.command() # Прекратите. Насиловать. Труп.
@commands.has_permsissions(administrator=True)
async def mp(ctx): # self если мы находимся в модуле или подклассе Bot'а
embed = discord.Embed(title="something here")
msg = await ctx.send(embed=embed)
client.react_role_msg = msg # Что лучше - "monkey patch"'ить объект бота или использовать global - решайте сами.
# В идеале - лучше создать модуль (cog/extension) или создать подкласс commands.Bot и использовать его, с объявленной переменной на уровне класса
@client.listen()
async def on_raw_reaction_add(payload):
if not getattr(client, "react_role_msg", None): # react_role_msg еще не объявлен у объекта бота
return
if payload.message_id != client.react_role_msg.id: # реакция проставлена на другом сообщении
return
if payload.emoji != "\N{WHITE HEAVY CHECK MARK}": # Реакция не "✅"
return
if not payload.member: # На тот случай если реакция пройдя все проверки выше окажется в личных сообщениях
return
await payload.member.add_roles(client.get_guild(398353602260405500).get_role(707803004268002512))