Есть ли способ сравнить Emojis с Discordpy? - PullRequest
3 голосов
/ 09 июля 2019

Я пытаюсь создать экран выбора с двумя вариантами (двумя реакциями), на которые пользователь может отреагировать, и бот теперь будет реагировать на то, какую реакцию выбрал пользователь

Я пытался сравнить
реакция! = "?" или реакция! = "✋" Также попробовал: реакция! = u "\ U0001F44C" или реакция! = u "\ u270B" используя юникод. Также пробовал тот же код с response.emoji, str (Reaction / Reaction.emoji). Также пытался сравнить id эмодзи, но response.emoji.id выдает исключение, говоря, что response.emoji - это str, а у строк нет идентификатора. (потому что idk почему он возвращает str вместо объекта emoji) Я прочитал документы, и он говорит, что поддерживает! = Операции, но я не знаю, что сравнивать

@bot.event
async def on_reaction_add(reaction,user):
     print(reaction) #It prints the two emojis on my console (? and ✋)
     if user.bot:
        print('I am a bot')
        return
     if reaction != "?" or reaction != "✋":
        print('Did not found the emoji')
        return
     else:
        print('Found the emoji')
#And then some code wich will decide if the user that reacted is valid and what to do with it


#The embed the user have to react to if this helps
embed = discord.Embed(title = 'VS',color=0x00fff5)
        embed.set_author(name = message.author.name,icon_url=message.author.avatar_url)
        embed.set_footer(text = message.mentions[0].name , icon_url = mensaje.mentions[0].avatar_url)
        response = await message.channel.send(embed = embed)
        await response.add_reaction("?") #OK emoji
        await response.add_reaction("✋") #STOP emoji

Я ожидаю, что бот распознает эмодзи, но не знаю, как

1 Ответ

0 голосов
/ 09 июля 2019

TL; DR

  1. switch or для and
  2. use str(reaction.emoji) (см. Пример в discordpy docs )

Объяснение:

Законы Де Моргана говорят, что

if str(reaction.emoji) != "?" or str(reaction.emoji) != "✋":

- то же самоев виде

if not (str(reaction.emoji) ==  "?" and str(reaction.emoji) == "✋"):

и поскольку реакция не может одновременно быть OK и STOP, этот оператор if всегда возвращается True и "Не найдено"эмодзи" всегда печатается.

Что-то вроде

     if str(reaction.emoji) != "?" and str(reaction.emoji) != "✋":
        print('Did not found the emoji')
        return
     else:
        print('Found the emoji')

будет работать.

РЕДАКТИРОВАТЬ: чуть более удобочитаемое решение ИМХО будет проверять наличиесмайлики в наборе .

     if str(reaction.emoji) not in { "?", "✋"}:
        print('Did not find the emoji')
        return
     else:
        print('Found the emoji')
...