Бот Discord.py не отправляет смайлик - PullRequest
4 голосов
/ 11 марта 2019

Я пытался создать простую систему меню и использовал реакции в качестве кнопок в боте.Проблема в том, что каждый раз, когда я пытался отправить смайлики (числовые цифры смайликов, по одному для каждой команды в меню), Discord выдает ошибку: неизвестный смайлик.Вот метод, который я использую:

async def show_buttons(embed_object, menu, message):
    emojis = ['1️⃣','2️⃣','3️⃣','4️⃣','5️⃣','6️⃣','7️⃣','8️⃣','9️⃣']
    human_user = message.author
    msg = await client.send_message(message.channel, embed=embed_object)
    for command, emoji in zip(game_engine.buttons[menu], emojis): 
        await client.add_reaction(msg, emoji)
    res = await client.wait_for_reaction(emojis, user=human_user, message=msg)
    await client.send_message(message.channel, '{0.user} reacted with {0.reaction.emoji}!'.format(res))
    ...REST OF CODE GOES HERE...

game_engine.buttons[menu] - это список команд с метками 1-9, а embed_object - это меню, отформатированное определенным образом.

Всегда возвращает ошибку: discord.errors.HTTPException: BAD REQUEST (status code: 400): Unknown Emoji

Что мне делать?

1 Ответ

4 голосов
/ 12 марта 2019

Я предпочитаю использовать экранирование имен при работе с Unicode, как это, потому что многие символы Unicode могут выглядеть очень похоже. Когда я беру первый смайлик из этого списка и использую его в

def get_name(s):
    return s.encode('ascii', 'namereplace')

Я получаю b'1\\N{VARIATION SELECTOR-16}\\N{COMBINING ENCLOSING KEYCAP}'. Но когда я делаю команду

@bot.command()
async def emojiname(emoji):
    await bot.say(get_name(emoji))

и беги !emojiname :one:, я получаю b'1\N{COMBINING ENCLOSING KEYCAP}'.

Так что вам просто нужно изменить способ определения литералов эмодзи. Я бы предложил сделать это так:

emojis = ["{}\N{COMBINING ENCLOSING KEYCAP}".format(num) for num in range(1, 10)]
...