Я пишу бота викторины 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