@Bot.event
async def on_raw_reaction_add(self, payload):
channel = Bot.get_channel(payload.channel_id) # получаем объект канала
message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
for emoji in message:
emoji = payload.emoji
if emoji == '✅':
global Y
Y += 1
elif emoji == '❌':
global N
N += 1
async def on_raw_reaction_remove(self, payload):
channel = Bot.get_channel(payload.channel_id) # получаем объект канала
message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
for emoji in message:
emoji = payload.emoji # реакция пользователя
if emoji == '✅':
global Y
Y -= 1
elif emoji == '❌':
global N
N -= 1
if Y > N:
Result = 'Принято'
elif Y == N:
Result = 'Отказано(Да = Нет)'
else:
Result = 'Отказано'
@Bot.command(pass_context= True)
@commands.has_permissions(administrator=True)
async def endvote(ctx):
emb = discord.Embed(title=f'Окончено голосование.', description = 'Результат: ' + str(Result), colour=discord.Color.purple())
message = await ctx.send(embed=emb) # Возвращаем сообщение после отправки
Y = 0
N = 0
self
у событий есть только в модулях (cogs). И представляет собой сам модуль if Y > N: ...
выполняется только один раз - при запуске файла. Необходимо сделать чтобы оно либо менялось при обновлении (получении/удалении реакции), либо непосредственно перед выводом результата pass_context
не существует в текущей версии discord.py. Контекст передаётся в функцию команды первым аргументом всегда (за исключением момента с нахождением команды в вышеупомянутом "модуле") voting_message = None
@Bot.command()
@commands.has_permissions(administrator=True)
async def startvote(ctx):
embed = discord.Embed(...) # embed goes here
voting_message = await ctx.send(embed=embed)
@Bot.command()
@commands.has_permissions(administrator=True)
async def endvote(ctx):
msg = await bot.get_channel(voting_message.channel.id).fetch_message(voting_message.id)
y = discord.utils.get(msg.reactions, emoji="\N{WHITE HEAVY CHECK MARK}").count
n = discord.utils.get(msg.reactions, emoji="\N{CROSS MARK}").count
if y>n:
result = "Принято"
elif y==n:
result = "Отказано (да = нет)"
else:
result = "Отказано"
emb = discord.Embed(title=f'Окончено голосование.', description = 'Результат: ' + result, colour=discord.Color.purple())
return await ctx.send(embed=emb) # **Возвращаем** сообщение после отправки.
y, n = 0, 0