• Мой код не работает, но не выводит ошибку discord py. Как это исправить?

    1. Переменные, возвращаемые в функции "слушателя" (listener) уходят, по большей части, в никуда
    2. Вы сравниваете 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
    Ответ написан
    Комментировать