- Переменные, возвращаемые в функции "слушателя" (listener) уходят, по большей части, в никуда
- Вы сравниваете ID канала с его объектом
Так же, вы сравниваете эмодзи в реакции с пустой строкой, но я, так полагаю, это хабр порезал эмодзи. Впрочем, если там используется не стандартное эмодзи, и вы вырезали его сами для "приватности", то пользовательские эмодзи так работать не будут. В случае пользовательских эмодзи, необходимо сравнивать эмодзи в реакции с объектом эмодзи.
import logging
...
log = logging.get_logger("mybot")
@client.event
async def on_reaction_add(reaction, user):
if reaction.message.channel.id != 815951876708892672:
log.debug("Игнорируем реакцию в канале %s", reaction.message.channel.name)
return
if reaction.emoji == "\N{PISTOL}": # Указываем символ юникода по его имени, в данном случае - https://www.fileformat.info/info/unicode/char/1f52b/index.htm
role = discord.utils.get(user.server.roles, name="PUBG") # CamelCase/CapWords названия переменных, по хорошему, должны использоваться только для названий классов: https://www.python.org/dev/peps/pep-0008/#class-names
await user.add_roles(role)
log.info("Выдал роль %s пользователю %s", role.name, user.name)
Также, помните, что сообщение, на которое добавляется реакция, должно быть в кэше бота (кратко говоря - создано когда бот был запущен и готов, и не было вымещенно другими сообщениями). В противном случае, вам действительно нужен
on_raw_reaction_add