Почему бот не выполняет код до конца?

import disnake 
from disnake.ext import commands
import asyncio
import datetime
import bot
import random

class GiveAway(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
    
    users = {}

    @commands.Cog.listener()
    async def on_reaction_add(reaction, user):

    # проверяем, что пользователь не является ботом и что реакция была добавлена к нужному сообщению
       if user.bot or reaction.message.id != 1089229079133290526:
        global users

        return

       users[user.id] = user.name  


    @commands.command()
    @commands.has_permissions(administrator=True)
    async def give_create(self, ctx, mins: int, *, prize: str):

        await ctx.send("типо все люди")

        embed= disnake.Embed(title="Розыгрыш")
        embed.add_field(name="Приз", value=f"{prize}")
        end = datetime.datetime.utcnow() + datetime.timedelta(seconds= mins*60)
        embed.add_field(name= "Заканчивается:", value= f"{end}UTC")
        embed.set_footer(text= f"Закончитья через {mins} мин!")

        my_msg = await ctx.send(embed = embed)

        await my_msg.add_reaction("")

        await asyncio.sleep(mins*60)

        winner = random.choice(list(users.values()))

        winner_user = bot.get_user(winner)

        await ctx.send(f"{winner_user.mention}")

        embed2 = disnake.Embed(title="Победитель", description=f"{winner_user.mention}")
        embed2.set_thumbnail(url = winner_user.display_avatar.url)
        embed2.add_field(name= "Приз", value= f"{prize}")
        embed2.set_footer(text="Розыгрыш закончен!") 

        server = ctx.message_guild

        await ctx.send(embed = embed2)
        await winner.send(f"Ты победил в розыгрыше на сервере {server.name}")





def setup(bot):
    bot.add_cog(GiveAway(bot))

Он делает только розыгрыш, не отправляет сообщение о победителе(грубо говоря останавливается на await asyncio.sleep(mins*60))
  • Вопрос задан
  • 236 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Ну, ошибок не мало

1. Не хватает self в on_reaction_add
2. Использование глобалок, к тому же неправильное
3. Условие
if user.bot or reaction.message.id != 1089229079133290526:
написано полностью неправильно.
3а. user.bot вернет True, если юзер - бот (что из названия даже логично), а не наоборот
3b. Нужен and, но не or
3c. Хардкодед msgid непонятно для чего
4. Везде разные отступы, то 4, то 3, то 1
5. Конструкция
global users
return
не имеет смысла
6. users никогда не обнуляется

discordpy хорошо умеет ошибки проглатывать, только поэтому код не падает каждую строку
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы