Система выдачи ролей
имеется команда для запроса роли. Не понимаю, как задать для реакций некоторые функции.
@client.command()
async def role( ctx):
role = ctx.guild.get_role(
703596629860548643
)
zapros_chanell = client.get_channel( 729733881129074768 )
zapros2_chanell = client.get_channel( 703596629923725339 )
embed = discord.Embed(title="Запрос роли")
embed.add_field(name='Запросивший роль', value=ctx.message.author.mention)
embed.add_field(name='Роль для выдачи', value=f'{role.mention}' )
embed.set_thumbnail(url=ctx.guild.icon_url)
message = await zapros_chanell.send(embed=embed)
await zapros2_chanell.send(embed = discord.Embed(description = f'{ctx.message.author.mention}, `запрос на выдачу роли был успешно отправлен, ожидайте его рассмотрения модерацией Discord`', color=discord.Color.purple()))
await message.add_reaction('✅')
await message.add_reaction('❎')
Суть в том, что бы если при нажатии на ✅ роль выдавалась и в zapros2_chanell человеку писался текст.
При нажатии на ❎ человеку роль не выдавалась следовательно, но и в zapros2_chanell писался определенный текст.
Ответы (1 шт):
Автор решения: Fixator10
→ Ссылка
Ждать события "on_reaction_add": bot.wait_for("reaction_add")
https://discordpy.readthedocs.io/en/v1.4.0/api.html#discord.Client.wait_for
from asyncio import TimeoutError as AsyncTimeoutError
@client.command()
async def role(ctx):
control_emojis = ["✅", "❎"]
for e in control_emojis:
await ctx.message.add_reaction(e)
try:
r, u = await client.wait_for("reaction_add", timeout = 30, check = lambda r, u: (str(r) in control_emojis) and u == ctx.author)
except AsyncTimeoutError:
await ctx.send("Ты слишком долго плавал…")
return
if str(r) == "✅":
await ctx.send("Подтверждено")
else:
await ctx.send("Отклонено")