我实现了反应角色系统,出于某种奇怪的原因,机器人可以检索已解码的表情符号(使用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}}}
这里是response_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))