【问题标题】:Discord.py bot doesn't send keycap emojisDiscord.py 机器人不发送键帽表情符号
【发布时间】:2019-08-01 18:52:26
【问题描述】:

我尝试创建一个简单的菜单系统,并将反应用作机器人中的按钮。问题是,每次我尝试发送表情符号(数字表情符号,菜单中的每个命令一个)时,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

我该怎么办?

【问题讨论】:

  • 你可以尝试使用unicodes
  • 我做了,例如:“\u0031”为一个,等等。但同样的错误仍然发生。我的问题的症结是:哪种数字 unicode 可以在 Discord 上使用?
  • zip(): 对表情符号做了什么?
  • 它将两个元素的元素组合成一个元组,因此您可以同时“循环”两个元素。
  • 如果您不介意可以将该功能添加到问题中。没有它很难回答您的问题..

标签: python emoji discord.py


【解决方案1】:

在处理这样的 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)]

【讨论】:

  • 兄弟,你真是个天才!
猜你喜欢
  • 2021-04-28
  • 2021-03-21
  • 1970-01-01
  • 2020-09-22
  • 2020-12-21
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多