Роль по нажатию на реакцию discord

Я пишу бота викторины Discord, используя discordpy. Бот отправляет сообщение, содержащее вопросы и 4 возможных ответа. Бот также добавляет реакции на свое сообщение смайликами 1️⃣, 2️⃣, 3️⃣ и 4️⃣. Идея состоит в том, что бот ждет 30 секунд, пока люди нажмут на один из них для получения реакции.

Если реакция при нажатии является правильным / неправильным ответом, бот отвечает либо правильным, либо неправильным. Бот также должен перестать ждать новой реакции, как только ответит один человек. Также: как только человек нажимает на один из 4 смайликов реакции, бот должен ответить, а не обрабатывать какие-либо будущие реакции на это сообщение.

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

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

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

Как ЛЕГКО сделать выдачу ролей по нажатию на реакцию в Discord с Carl bot | Роль за реакцию

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

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

Kyu96 5 Мар 2021 в 22:14

2 ответа

Лучший ответ

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

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

-Класс ctx уже предоставляет атрибут channel , поэтому ctx.message.channel является отчасти избыточным, используйте вместо него ctx.channel .

Еще по теме:  Какой дискорд у компота

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

-Если количество ответов всегда одинаково, вы можете добавить числовые смайлы с помощью очень простого цикла for (также нет необходимости вызывать Utils , чтобы получить соответствующие смайлы):

for emoji in [«1️⃣»,»2️⃣»,»3️⃣»,»4️⃣»]: reply.add_reaction(emoji)

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

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

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

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

def check_answer(reaction, user): return user == ctx.author

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

КАК СОЗДАТЬ ДЕЙСТВИЯ С РОЛЯМИ ПО НАЖАТИЮ НА РЕАКЦИЮ?| КАК СДЕЛАТЬ ПРИСВОЕНИЕ РОЛИ ПО НАЖАТИЮ НА РЕАК


while True: try: reaction, user = await bot.wait_for(«reaction_add», timeout=30, check=check_answer) # The following line is optional: it removes the reaction added by the user # to let them react again with the same emoji; not really necessary in your case, # but very helpful if your bot would still be responsive after the first reaction. await reply.remove_reaction(reaction, user) # Here goes the if-else block of reactions. except asyncio.TimeoutError: print(«Timeout»)

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

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

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

Еще по теме:  Как создать игру дискорд

Max Shouman 5 Мар 2021 в 22:59

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

try: reaction, user = await self.bot.wait_for(‘reaction_add’, timeout=15) while user == self.bot.user: reaction, user = await self.bot.wait_for(‘reaction_add’, timeout=15) if str(reaction.emoji) == «YourEmoji»:

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

reactions = «YourReactions» def check1(reaction, user): return user == ctx.author and str(reaction.emoji) in [reactions]

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

Источник: question-it.com

Как ЛЕГКО сделать выдачу ролей по нажатию на реакцию в Discord с Carl bot | Роль за реакцию

Приветики, омлетики! В этом видео я вам расскажу и покажу как сделать в Дискорде выдачу ролей по нажатию эмодзи с помощью бота Carl. Как найти айди? youtu.be/ZTYSa799b7Q Для того, чтобы найти ID сообщения нужно нажать правой кнопкой на сообщение и «скопировать айди». С телефона нужно зажать палец на сообщении и «скопировать айди».

Если такой функции нет, то нужно перейти в настройки — внешний вид — включить режим разработчика. Наш сервер ➜ discord.gg/HN4XTp9 ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋ 0:00 — Мяу! 0:47 — добавление реакций через сайт 1:33 — типы реакций 3:11 — добавление анимированных эмодзи без нитро 3:34 — добавление реакций с помощью команд ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋ Сайт Carl bot ➜ carl.gg ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋ Команды ▹!rr make — создать роль ▹!rr add id смайл роль — прикрепить реакции к готовому сообщению Типы реакций ▹!rr normal id — стандартный режим, выбор неограниченного кол-ва ролей из списка ▹!rr unique id — ограничение на 1 роль из списка ▹!rr verify id — только выдача роли, после чего удаляет реакцию пользователя ▹!rr binding id — комбинация предыдущих двух. ограничивает одним выбором ▹!rr drop id — снимает роль при нажатии на реакцию ▹!rr reversed id — реакция снимает роль, нереакция — добавляет ▹!rr limit id кол-во — ограничивает выбором Х кол-вом ролей ▹!rr lock id — блокировка выдачи ролей ▹!rr link id1 id2 id3. — объединение реакций ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋ Как писать от имени бота ➜ bit.ly/2EFokFB Новости в дискорде ➜ bit.ly/3dyA88o Как добавить смайлы в описание канала Discord ➜ bit.ly/2JmsaCn 6 лучших ботов для розыгрышей в Discord ➜ bit.ly/2Urordl Серверные шаблоны, Server Template ➜ bit.ly/2XqrTa1 ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋ Песня из интро ➜ Pixie Paris — Ich lieb´dich nicht immer ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋ #DISCORD #discordapp #Дискорд

Еще по теме:  Как раскрутить дискорд с нуля

Источник: www.euglobe.ru

Как ЛЕГКО сделать выдачу ролей по нажатию на реакцию в discord с carl bot Роль за реакцию

Приветики, омлетики! В этом видео я вам расскажу и покажу как сделать в Дискорде выдачу ролей по нажатию эмодзи с .

[DISCORD] Carl-Bot | Как Добавить РОЛИ ЗА РЕАКЦИЮ На Ваш Дискорд Сервер

Всем хай с вами Даниель, и сегодня я покажу, расскажу вам как настроить дискорд бота Carl-bot , у которого основная .

Как получать роли за реакции в дискорде с помощью Carl-bot

MicRobot Всем привет дорогие друзья. И сегодня мы продолжаем играть. Желаю приятного .

КАК СДЕЛАТЬ ВЫДАЧУ РОЛЕЙ ПО ЭМОДЗИ | YAGPDB discord bot |

В этом видео я вам покажу как сделать выдачу ролей по эмодзи в дискорд с помощью discord бота YAGPDB!

[Discord] Как сделать выдачу ролей по нажатию на реакцию с помощью бота mee6.

[Discord] Как сделать роли за нажатие на реакцию с помощью бота mee6? Ссылка на мой твиттер: .

КАК БЫСТРО И ПРОСТО ДОБАВИТЬ РОЛИ ЗА РЕАКЦИИ В ДИСКОРДЕ!

делаем роли за реакции в дискорде за 5 минут,Zira Bot! Бот-Zira Bot (Ссылка на бота и на мой дс сервер в закреплённом .

||НАСТРОЙКА И ВЫДАЧА РОЛЕЙ ПО РЕАКЦИИ|| |Carl Bot|

Привет, я Luna, и это ролик по созданию уютного дискорд сервера. В этой ролике мы сделали выдачу ролей по нажатию .

Carl Bot

Все видео по настройке Carl бота.

Как сделать авто роли через вебхук, свое сообщение, бота в Дискорде! Discord

Как сделать авто роли через вебхук, свое сообщение, бота в Дискорде! Discord В этом видео я показываю как сделать роли .

Источник: fyotar.com

Рейтинг
( Пока оценок нет )
Загрузка ...