python - JSON 文件 Discord 中的表情符号解码错误,py
问题描述
我实现了一个反应角色系统,出于某种奇怪的原因,机器人可以检索解码的表情符号(使用 emojis.decode(emoji) 进行解码),有时会出现 KeyError。
这是 JSON 文件:
{"663841143833886731": {"758244108757630996": {"\ud83c\uddf4": {"role": 758248481004978198}, "\ud83c\uddf2": {"role": 663836646613188619}, "\ud83c\uddf7": {"role": 758248684650758144}, "\ud83c\uddf0": {"role": 663836435878772737}}, "758245355028217866": {"emoji": "\ud83c\udde7", "role": 695609798137479249, "\ud83c\uddf9": {"role": 663836545484062722}, "\ud83c\udde9": {"role": 663836591483256842}}, "758246129187422248": {"emoji": "\ud83c\udde9", "role": 745956069720981504, "\ud83c\udde7": {"role": 745956316912287834}, "\ud83c\uddf5": {"role": 745956478254317578}, "\ud83c\uddf8": {"role": 745956546441379903}, "\ud83c\uddea": {"role": 745956631241687122}}, "758247160978079745": {"emoji": "\ud83c\udde9", "role": 758262018456289321}}}
这是reaction_add的监听器:
@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
if self.check_if_bot(payload.member):
with open(os.path.join(self.DATA_PATH, "reactionrole.json"), "r") as temp:
role_assigment = json.load(temp)
guild = self.bot.get_guild(payload.guild_id)
user = guild.get_member(payload.user_id)
msg_id = payload.message_id
emoji = str(emojis.decode(str(payload.emoji)))
print("Decoded: ", emoji)
if self.allowed_channel(role_assigment, payload.channel_id):
role_to_assign = guild.get_role(role_assigment[str(payload.channel_id)][str(msg_id)][emoji]["role"])
await user.add_roles(role_to_assign)
await user.send("Dir wurde die Role {} hinzugefügt!".format(role_to_assign.name))
解决方案
推荐阅读
- ruby-on-rails - Rails 6 mysubdomain.lvh.me 重定向你太多次
- docker - 使用 compose-file 部署 Docker 堆栈导致类型“bind”的挂载配置无效:绑定源路径不存在:
- excel - VBA代码不将数据范围复制到其他工作簿
- javascript - 如何生成具有一定间隔的随机数?
- php - 使用 phpMailer 和 PHP 从表单定义类型附件
- html - 如果文本不适合跨度,则将文本换行
- google-sheets - 预测酒店客房供应情况
- c# - 使用DataGridRowPostPaint事件到达datagridview中的最后一行时如何退出循环
- blockchain - 使用 Web3.js 连接到本地 Ganache 实例时出错
- sql - 列名或提供的值的数量与表定义不匹配。微软SQL