Всё что в данном коде неверно:
- @Bot.event только у события добавления реакции. Декоратор события должен быть у всех событий.
- Аргумент
self
у событий есть только в модулях (cogs). И представляет собой сам модуль
-
if Y > N: ...
выполняется только один раз - при запуске файла. Необходимо сделать чтобы оно либо менялось при обновлении (получении/удалении реакции), либо непосредственно перед выводом результата
- Ключевой (kwarg) аргумент
pass_context
не существует в текущей версии discord.py. Контекст передаётся в функцию команды первым аргументом всегда (за исключением момента с нахождением команды в вышеупомянутом "модуле")
- Объект "сообщение" не итерируемый
- PEP8 Naming Conventions: "CamelCase" названия переменных обозначают classы.
Один из вариантов решения:
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