Почему то не находит эмоции и выдает ошибку KeyError
Здраствуйте!
Код который выдает роли по нажатии реакции.
Выдача работает нормально, но вот забирание роли почему-то работает каряво, некоторые роли забирает, а некоторым выдает ошибку KeyError, хотя в конфиге все правильно.
Код:
@commands.Cog.listener()
async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent):
channel: discord.TextChannel = self.bot.get_channel(int(config.channel))
message = await channel.fetch_message(int(config.message))
member: discord.Member = utils.get(message.guild.members, id = payload.user_id)
try:
emoji = str(payload.emoji)
role_remove: discord.Role = utils.get(message.guild.roles, id = config.ROLES[emoji])
await member.remove_roles(role_remove)
except Exception as e:
logging.exception(repr(e))
Ошибка:
2021-07-20T06:15:27.370651+00:00 app[worker.1]: Ignoring exception in on_raw_reaction_remove
2021-07-20T06:15:27.371905+00:00 app[worker.1]: Traceback (most recent call last):
2021-07-20T06:15:27.371988+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/client.py", line 343, in _run_event
2021-07-20T06:15:27.371989+00:00 app[worker.1]: await coro(*args, **kwargs)
2021-07-20T06:15:27.372024+00:00 app[worker.1]: File "/app/cogs/addrole.py", line 48, in on_raw_reaction_remove
2021-07-20T06:15:27.372025+00:00 app[worker.1]: role_remove: discord.Role = utils.get(message.guild.roles, id = str(config.ROLES[emoji]))
2021-07-20T06:15:27.372094+00:00 app[worker.1]: KeyError: '<:cpp:866776827762442240>'
Config.py:
import os
ROLES = {
'<a:python:866776924147286027>': 865971770422460417 ,# python
'<:gamedev:866780079370665994>': 865972670780801084, #gamedev
'<a:rubby:866776968023244800>': 866780399517302805, # rubby
'<a:cpp:866776827762442240>': 865971579573633047, #c++
'?': 865971308826198057, #3d designer
'?️': 865973110264037416, #soft dev
'<a:csharp:866777010294226964>': 865973760530841630, #csharp
'<a:javascript:866777189889343540>': 865971804777742346, #javascript
'<:java:866781829495652403>': 865971859249037352, #java
'<a:sql:866777146273038387>': 865972812714868746, #sql
'<a:blender:866784801838989392>': 865972970644439050, #blender
'?': 865973455442673674, #3dmax
'?️': 865972226539651114, #unity
'⚙️': 865971897044697098, #unrealungine
'<a:php:866777065688924170>': 866773847498555422, #php
'?️': 866637025977171989, #html\css
'?️': 865971128799330324, #Верстальщик
'?️': 865971415353393162, #бекенд
'?': 865972048832233473 #arduino
}
r = [
'?️',
'?️',
'<:gamedev:866780079370665994>',
'?',
'?️',
'?',
'<a:cpp:866776827762442240>',
'<a:csharp:866777010294226964>',
'<a:python:866776924147286027>',
'<a:javascript:866777189889343540>',
'<:java:866781829495652403>',
'<a:sql:866777146273038387>',
'<a:blender:866784801838989392>',
'?',
'?️',
'⚙️',
'?️',
'<a:php:866777065688924170>',
'<a:rubby:866776968023244800>'
]
message = os.environ.get('MESSAGE')
channel = os.environ.get('CHANNEL')
Ответы (1 шт):
Автор решения: MyZik
→ Ссылка
Скрипт ищет элемент словаря с ключом <:cpp:866776827762442240>, его там нет. Строку с эмоджи C++:
ROLES = {
...
'<a:cpp:866776827762442240>': 865971579573633047, #c++
...
}
Замените на эту:
ROLES = {
...
'<:cpp:866776827762442240>': 865971579573633047, #c++
...
}
