python - Discord.py 机器人不发送键帽表情符号
问题描述
我尝试创建一个简单的菜单系统,并将反应用作机器人中的按钮。问题是,每次我尝试发送表情符号(数字表情符号,菜单中的每个命令一个)时,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
我该怎么办?
解决方案
在使用这样的 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)]
推荐阅读
- flutter - 在 Flutter 中将 JSON 作为字符串处理
- apache-flink - Beam WordCount TaskManagerFailure NoClassDefFoundError for MetricUpdates$MetricUpdate
- javascript - Deviantart 的 Greasemonkey/Tempermonkey 脚本
- python - 如何对具有n个元素的数组进行排序,其中k个元素在O(n + k log k)中不合适?
- python - 当日期和时间是整数时,如何使用 Pandas 获取 DateTime 对象?
- data-visualization - 使用 Vegalite 的多直方图
- ios - SwiftUI ScrollView BlendMode 问题
- java - 匹配方法时忽略Accept-Encoding?
- r - 有没有办法在学习者教程中使用通用 css?
- terraform - 无法在 terraform 中为 ECS 容器配置 AWS CloudWatch 日志