Нужно сделать голосование по реакциям и вывод победителя (discord python)
Есть сообщение, которое отправляет бот. На сообщение добавляется 4 реакции. После 10 секунд голосования выводится сообщение с победителем.
embed = discord.Embed(title ="Выбор карты для игры", description = "Вот список карт, которые можно выбрать:\n1.?Sandstone\n2.⛲️Province\n3.?Rust\n4.☢️zone 9", colour = discord.Colour.from_rgb(0, 204, 102))
check = await ctx.send(embed=embed)
await check.add_reaction('\U0001F3DC')
await check.add_reaction('\U000026F2')
await check.add_reaction('\U0001F5FF')
await check.add_reaction('\U00002622')
time.sleep(10)
embed = discord.Embed(title =f"Голосование #{game} окончено!", description ='Играем карту, на которой больше реакций.', colour = discord.Colour.from_rgb(0, 204, 102))
await ctx.send(embed=embed)
Не знаю как сделать подсчёт реакций и сравнение их с выводом.
UPD: Дополнил код, в консоль ничего не выводится.
from discord.ext import commands
from discord.utils import get
from asyncio import sleep
bot = commands.Bot(command_prefix = '=')
TOKEN = #тут мой токен
@bot.command(pass_context =True)
async def test(ctx):
embed = discord.Embed(title ="Выбор карты для игры", description = "Вот список карт, которые можно выбрать:\n1.?Sandstone\n2.⛲️Province\n3.?Rust\n4.☢️zone 9", colour = discord.Colour.from_rgb(0, 204, 102))
msg = await ctx.send(embed=embed) #текст с голосованием
await msg.add_reaction('\U0001F3DC')
await msg.add_reaction('\U000026F2')
await msg.add_reaction('\U0001F5FF')
await msg.add_reaction('\U00002622')#добавляем реакции для голосования
await sleep(10)#даем время на голосование
for reaction in msg.reactions:
print(reaction, reaction.count)#Этот код мне дали в ответах и он ничего не выводит
embed = discord.Embed(title =f"Голосование окончено!", description ='Играем карту, на которой больше реакций.', colour = discord.Colour.from_rgb(0, 204, 102))
await ctx.send(embed=embed)#тут нужно сделать подсчёт количество нажатых реакций на каждой реакции. Далее сравниваем и выводим победителя
bot.run(TOKEN)
‘’’
Ответы (1 шт):
Получить список реакций сообщения можно из атрибута reactions.
Получить количество поставленных реакций, можно из полученной до этого реакции, из атрибута count.
Затем, по прошествии времени, мы можем в цикле для списка реакций, выводить саму реакцию, а также ее количество
Перезапишем сообщение:
msg = await msg.channel.fetch_message(msg.id)
Считаем реакции:
for reaction in check.reactions:
print(reaction, reaction.count)
Затем, имея доступ к количеству каждой реакции, думаю, вы разберетесь, как их сравнить и вывести наибольшую.
Пример:
Результат:
Полный код:
from discord.ext import commands
from discord.utils import get
from asyncio import sleep
import discord
bot = commands.Bot(command_prefix = '=')
@bot.command()
async def test(ctx):
embed = discord.Embed(title ="Выбор карты для игры", description = "Вот список карт, которые можно выбрать:\n1.?Sandstone\n2.⛲️Province\n3.?Rust\n4.☢️zone 9", colour = discord.Colour.from_rgb(0, 204, 102))
msg = await ctx.send(embed=embed) #текст с голосованием
await msg.add_reaction('\U0001F3DC')
await msg.add_reaction('\U000026F2')
await msg.add_reaction('\U0001F5FF')
await msg.add_reaction('\U00002622')#добавляем реакции для голосования
await sleep(10)#даем время на голосование
msg = await msg.channel.fetch_message(msg.id)
for reaction in msg.reactions:
print(reaction, reaction.count)#Этот код мне дали в ответах и он ничего не выводит
embed = discord.Embed(title =f"Голосование окончено!", description ='Играем карту, на которой больше реакций.', colour = discord.Colour.from_rgb(0, 204, 102))
await ctx.send(embed=embed)#тут нужно сделать подсчёт количество нажатых реакций на каждой реакции. Далее сравниваем и выводим победителя
bot.run(TOKEN)

