Отправка сообщения на основе реакции пользователя - PullRequest
0 голосов
/ 08 октября 2018

Я хочу, чтобы мой бот отправил сообщение, основываясь на реакции пользователя на добавление.

У меня есть код

@commands.command(pass_context=True)
async def testhelp(self, ctx):
    try:
        Help = discord.Embed(title="Commands and Usage", description="Choose a catagory by adding a reaction", color=0x0072ff)
        Help.add_field(name='General Commands', value='?')
        Help.add_field(name='Fun Commands', value='?')
        Help.add_field(name='Math Commands', value='✏')
        Help.add_field(name='Anime Commands', value='?')
        Help.add_field(name='NSFW Commands', value='?')
        Help.add_field(name='Music Commands', value='?')
        Help.add_field(name='Mod Commands', value='?')
        Help.add_field(name='Admin Commands', value='⚒')
        Help.add_field(name='Owner Commands', value='⚙')
        message = await self.client.say(embed=Help)
        await self.client.add_reaction(message, emoji='?')
        await self.client.add_reaction(message, emoji='?')
        await self.client.add_reaction(message, emoji='✏')
        await self.client.add_reaction(message, emoji='?')
        await self.client.add_reaction(message, emoji='?')
        await self.client.add_reaction(message, emoji='?')
        await self.client.add_reaction(message, emoji='?')
        await self.client.add_reaction(message, emoji='⚒')
        await self.client.add_reaction(message, emoji='⚙')
    except Exception as error:
        await self.client.say('{}'.format(error))

, который работает нормально, мне просто нужно выяснить, как отправить другое сообщение, когда они добавляют реакцию в списке.

1 Ответ

0 голосов
/ 08 октября 2018

Составьте словарь смайликов для ответов, затем сравните их реакцию с этим словарем.Ниже я использую Client.wait_for_reaction только для обработки реакций, о которых мы знаем от человека, который вызвал команду.

responses = {'?': 'General Commands',
             '?': 'Fun Commands'
             '✏': 'Math Commands',
             '?': 'Anime Commands'}

@commands.command(pass_context=True)
async def testhelp(self, ctx):
    Help = discord.Embed(title="Commands and Usage", description="Choose a catagory by adding a reaction", color=0x0072ff)
    for emoji, name in responses.items():
        Help.add_field(name=name, value=emoji)
    message = await self.client.say(embed=Help)
    for emoji in responses:
        await self.client.add_reaction(message, emoji=emoji)
    res = await self.client.wait_for_reaction(list(responses), user=ctx.message.author)
    await self.client.say("{} you chose {}".format(res.user.mention, responses[res.reaction.emoji]))

Если вы хотите, чтобы более значимое сообщение было отправлено в ответ,Вы можете написать сопрограммы, которые принимают контексты и отправлять сообщения.

responses = {'?': 'General Commands',
             '?': 'Fun Commands'
             '✏': 'Math Commands',
             '?': 'Anime Commands'}

async def general_commands(self, ctx):
    embed = ...
    await self.client.send_message(ctx.message.channel, embed=embed)

@commands.command(pass_context=True)
async def testhelp(self, ctx):
    Help = discord.Embed(title="Commands and Usage", description="Choose a catagory by adding a reaction", color=0x0072ff)
    for emoji, name in responses.items():
        Help.add_field(name=name, value=emoji)
    message = await self.client.say(embed=Help)
    for emoji in responses:
        await self.client.add_reaction(message, emoji=emoji)
    res = await self.client.wait_for_reaction(list(responses), user=ctx.message.author)
    coro = getattr(self, responses[res.reaction.emoji].lower().replace(' ', '_'))
    await coro(ctx)
...