Как добавить реакцию в дискорд discord py

Обновлено: 08.07.2024

Во-первых, бот по какой-то причине все еще запускается собственными реакциями, даже я исключил это в функции проверки. (По крайней мере, я так думал).

В общем, мне бы хотелось иметь для этого очень хорошо структурированный подход. Я знаком со всеми вызовами / событиями API, такими как on_message() и on_reaction_add() , но у меня проблемы с их правильным соединением.

Это то, что у меня до сих пор:

Как я могу получить это право?

2 ответа

В вашем коде есть несколько ошибок и неточностей; Сначала я перечислю их, а затем покажу вам, что, по моему мнению, является лучшим способом настройки этого типа команд. Обратите внимание, что некоторые из перечисленных ниже исправлений не являются фактическими исправлениями, а представляют собой более эффективные способы организации вашего кода.

-Вы должны использовать декораторы для определения команд бота вместо таких функций, как on_command :

То же самое касается ctx.message.author .

-Функция check_answer тоже избыточна, и тоже логически неверна.

Это избыточно, потому что нет необходимости проверять, является ли смайлик реакции одним из 4 доступных, поскольку он в любом случае будет определен позже в блоке try.

Это логически неверно, потому что он должен возвращать True , если пользователь, добавивший реакцию, совпадает с автором команды, а не наоборот (вы заметите, что это также предотвратит запуск бота его собственными реакциями) .

Тогда нет необходимости в том, чтобы функция была асинхронной.

-Наконец, весь блок try-except-else здесь не работает. Чтобы бот оставался отзывчивым до первой реакции конкретного пользователя или до истечения 30-секундного тайм-аута, вам следует интегрировать блок try-except в бесконечный цикл while :

Помните, что где-то в блоке try вам нужно будет остановить цикл с помощью оператора break, когда операция будет завершена, иначе она будет продолжаться бесконечно.

Я тоже разрабатываю бота Discord и все еще новичок, поэтому надеюсь, что смог хорошо объяснить. В любом случае, чтобы подвести итог, вот пример того, как я лично реализовал бы эту команду:

Затем, конечно, вы должны определить, как распознать правильный ответ и как уведомить пользователя. Если вам нужны пояснения по поводу того, что я написал, не стесняйтесь комментировать этот ответ, и я буду рад ответить вам.

Вы действительно не игнорировали реакцию ботов, по крайней мере, из того, что я вижу в коде. Вы можете попробовать следующий метод:

Функция check может быть:

Здесь мы проверяем, исходит ли реакция от автора команды, а также проверяем, находится ли смайлик в "списке" reactions .

В общем, решил я сегодня привести в порядок сервер (пусть будет мой и Сани). И вот с этого момента как нашёл всю нужную инфу, буду во время написания делать бота (на самом деле уже нет).

Думал насчёт удобного способа разделения общества, то есть правильного разделения пользователей на категории (интересы, регионы и т.п). В итоге самой лучшей вариацией после мониторинга всех возможных вариантов реализацией, оказалась, та самая механика приглянувшаяся мне на некоторых серверах в дискорде.

Как сделать выдачу роли при нажатии на реакцию Emoji в Дискорд Discord, Bots, Github, Javascript, Длиннопост, Командная строка, Discovery, Гифка

Как сделать выдачу роли при нажатии на реакцию Emoji в Дискорд Discord, Bots, Github, Javascript, Длиннопост, Командная строка, Discovery, Гифка

Получилось так что просто так взять и поставить такую механику на свой сервер вы не сможете, даже ботом из списка ботов для дискорда. Причина в оригинальности каждой роли на сервере и его тяжёлой для оформления настройки под каждый сервер.

Если вы сейчас читая текст, уже думаете о том что ни разу не создавали бота в дискорде, и уже прошли через мысль о том, что данное решение вам уже не нужно - то мы с вами в одной тарелке. Разве что возможно отличие в том что у меня хоть какие-то базовые навыки в программировании. Но времени у вас много не займёт, проверяя этот текст на ошибки я со всем справился, и через все ошибки я уже прошёл

И так, у нас тут готовый бот на Python - что уже хорошо, т.к я с ним знаком в общем пока искал инфу, заметил что все подобные боты написаны на javascript (к слову существует разные библиотеки для работы с ботом на разных языках, такие как discord.py , discord.js, как раз для работы с ботами). Но это зависит от того какой язык вы предпочитаете. Нам лишь только нужно переписать пару строчек под себя.

Назовём это шаг 1:

Как сделать выдачу роли при нажатии на реакцию Emoji в Дискорд Discord, Bots, Github, Javascript, Длиннопост, Командная строка, Discovery, Гифка

Как сделать выдачу роли при нажатии на реакцию Emoji в Дискорд Discord, Bots, Github, Javascript, Длиннопост, Командная строка, Discovery, Гифка

В Bot мы берём все нужные нам пункты что ниже.

Как сделать выдачу роли при нажатии на реакцию Emoji в Дискорд Discord, Bots, Github, Javascript, Длиннопост, Командная строка, Discovery, Гифка

С помощью этой ссылки приглашаем нашего бота на сервер, так он получит все нужные ему для работы права и сможет работать.

Нам нужен Node.js, для работы с JavaScript, и удобный для вас редактор,например VisualStudio.

Загружаем эту самую библиотеку из github. Открываем файл roleReact.js и меняем под себя эти параметры

const yourID - ваш id т.е ваш номер в тут расказывается от том где его достать.

В const botToken = " сюда копируем ваш TOKEN "

И переделываем переменные let initialMessage, const roles, const reactions под себя.

Теперь нам нужно авторизовать нашего бота той ссылкой на ваш сервер, если не сделали раньше. Потом открываем папку вашего бота в cmd (поищите о том как это сделать в интернете, я добавил PowerShell в меню на правую кнопку мыши), и прописываем node roleReact.js, это включает нашего бота.

Как сделать выдачу роли при нажатии на реакцию Emoji в Дискорд Discord, Bots, Github, Javascript, Длиннопост, Командная строка, Discovery, Гифка

Переходим на наш сервер и пишем !createrolemessage, если бот не ответил - значит что-то не таки и лучше проверить все пункты и банальные ошибки, прежде чем писать мне или ставить минус.

У меня всё это выглядит примерно так.

Как сделать выдачу роли при нажатии на реакцию Emoji в Дискорд Discord, Bots, Github, Javascript, Длиннопост, Командная строка, Discovery, Гифка

В общем, надеюсь хоть кому-то я помог, прошу не поливать минусами, всё таки первый за 2.5 года пост здесь. Хочу ещё раз поблагодарить автора за код, я просто здесь просто для новичков обьяснил как тут всё работает и актуально показал как всё запустить, некоторые вещи я изменил т.к например yourID у автора означает другое. В коментах я скину свой дискорд чтобы вы могли сами посмотреть как всё должно работать и спросить если что помочь.

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

После установки самого python'а (проверить правильность установки можно написав в консоли: "python -V", возможно потребуется перезагрузка) установим модуль discord.py ( https://discordpy.readthedocs.io/en/latest/ -это ссыль на официальную документацию), сделать это можно прописав в консоли: " pip install discord.py ". С установкой чего-либо окончено.

Теперь перейдем к Discord'у:

1. Создадим сам сервер:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

2. Создадим текстовый канал "получение ролей" (название значения не имеет):

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

3. Добавим сами роли для выбора:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Я в данном случае создал две роли исключительно для примера:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

4. Копируем и сохраняем в расширении .py файлы:

Q: как сохранить код в расширении .py?

A: используйте блокнот:

создаете новый файл, вставляете код, в левом верхнем углу: файл >> сохранить как

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

5. Не закрывая файлы переходим на сайт ( https://discordapp.com/developers ), регаемся, переходим во вкладку "Applications" и создаем новое приложение:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Далее называем его по любому, со всем соглашаемся.

Переходим во вкладку "Bot",

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

далее его можно как-либо назвать и поменять аватарку. После макияжа переходим во вкладку "OAuth2":

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Пролистываем немного ниже:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

В окне "SCOPES" выбираем "bot", во втором выбираем "Administrator", далее копируем и впоследствии переходим по ссылке, там все подтверждаем.

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

После авторизации переходим во вкладку "Bot" и копируем токен.

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Далее открываем файл " config.py " созданный ранее и вместо надписи "тут токен" вставляем реальный токен. Хочется отметить то что токен меняется при смене имени бота и аватарки, если у вас появятся проблемы, стоит обратить внимание на токен.

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Добавить реакции можно нажав пкм:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Далее копируем ID поста, кликнув пкм:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Перейдем к самим ролям, для этого копируем эмодзи из реакций (если вы из брали с ссайта который я оставлял выше то копируйте от туда, если вы их выбирали в ds то скопируйте их в ds и вставте на сайт и скопируйте оттуда) и вставляем в config в ординарных апострофах с двух сторон и через двоеточие указываем id роли, в конце строк (кроме последней) ставим запятые

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Взять id можно кликнув пкм по названию роли.

В итоге должно получиться так:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

в значении переменной "MAX_ROLES_PER_USER" указываем кол-во ролей которые может получить 1 юзер, значение "EXCROLES" оставляем пустым.

сохраняем config и code в одну папку в которой нет ничего кроме этих файлов и она названа по английски:

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

Далее в консоли прописываем: "cd <путь к файлу>"

"<метка тома диска на котором находится папка>"

Создание Discord бота на Python Туториал, Python, Discord, Длиннопост

вот так вот. Осталось поставить роль бота выше ролей которые вы будите выдавать. Иначе появится ошибка (Forbidden('403 Forbidden (error code: 50013): Missing Permissions')). Проверка прошла успешно!

Спасибо за внимание!


Программирование на python

218 постов 7.5K подписчик

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!

Приветствуется:

• уважение к читателям и авторам

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт

Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

Я редко конечно ставлю минусы но ставить питон из ms store. это дико, даже для меня

Зачем выдавать чужой код, за свой?
автора кода - Хауди

еще один конкурент "9 вите иташки"?

Правильно пишется "наподобие".

Хочу для себя изучить питон, что посоветуете? Смотрела курсы, не подошли. Как лучше изучать? Может, книга толковая есть?

на первом этапе(python - V) выдало ошибку

Traceback (most recent call last):

NameError: name 'python' is not defined

у меня выдаёт ошибку

File "C:\Users\HP-PC\AppData\Local\Programs\Python\Python39\lib\site-packages\aiohttp\ connector.py ", line 938, in _wrap_create_connection


Хочешь нарисовать свою карту для D&D? Тебе к нам!

Хочешь нарисовать свою карту для D&D? Тебе к нам! Рисование, Dungeons & Dragons, Туториал, Набор, Discord, Длиннопост

Добрый вечер постояльцам таверны и активны пользователям Пикабу!

В недавнем опросе в вконтакте, постояльцы отметили что у них есть желание научиться рисовать карты для их приключений! Очень рад этому :)

Поэтому я решил не останавливаться и завлечь как можно людей в данную атмосферу рисования.

Что это такое?

Данный пост - небольшая информация для дальнейшего рисования карт для D&D5e, ты же (Пикабушник) можешь присоединиться к нам и следить за будущими постами, а также принять участие в выборе первого туториала.

Может быть это масштабный континент? Забытая пещера? Решай сам!

Самый популярный запрос будет нарисован и разобран для обучения.

Что нужно для этого?

В группе Вконтакте не написано какие "инструменты" должны быть у художника (это будет в отдельном посте), но так как мы на Пикабу, то стоит все же рассказать.

Инструменты:
Листы Бумаги А4 или СкетчБук
Простой карандаш
Карандаш H
Карандаш HB
Карандаш 3B
Ластик
Стружилка
Программы:
Krita - покраска, добавление и создание своих токенов, эффекты и т.д.

Ответы на вопросы

- Да, это бесплатно

- Как и где можно будет посмотреть туториал?

- Сам туториал будет проходить по Discord. Дата и время проведения будет в группе Вконтакте.

Также в группе будет выложена статья с этим же туториалом и на пикабу тоже :)

- Зачем показывать туториал и там и там? Почему не сразу создать статью?

- Первое. Появился вопрос или проблема? Спроси у картографа и получи решение!

Второе. Атмосфера. Вместе с вами такие энтузиасты как вы!

Читайте также: