Задать вопрос
  • Бот для уведомлений с ютуба не работает больше 3х дней, где я мог ошибиться?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, научись регистрировать проблемы. Почитай про logging, как его настраивать. Расставь в боте и в парсере try-except и записывай в лог возникающие ошибки. Тогда у тебя будет текст ошибки, с которым уже можно как-то работать.

    Но я подозреваю, что дело в доступе к базе Sqlite из двух процессов. Sqlite, в отличие от "взрослых" БД, не является ни процессо-, ни даже потоко-безопасной. К ней можно безопасно обращаться только строго по очереди.
    Как только звёзды сойдутся так, что оба твоих процесса обращаются к базе одновременно - кому-то из них не повезёт. Если не повезёт парсеру, ты просто не увидишь инфу о новом видео при этом запуске. Если не повезёт боту - бот упадёт.

    Тут вопрос такой: а нужна ли вообще тут БД? Если да, то для чего она нужна?
    yt-dlp, к сожалению, синхронный - но ты ведь можешь выполнять этот код через run_in_executor(). Тогда получится интегрировать парсер прямо в бот, и отправлять сообщения немедленно.

    Альтернативно, можно схитрить так: сделать боту учётку на ютубе, подписать его на нужные каналы и настроить уведомления о новых видео по почте, а в боте мониторить почтовый ящик через email-monitor или подобное.
    Ответ написан
    Комментировать
  • Как в discord.py сделать повторение действия каждые 5 минут, что бы это не отключало другие команды?

    @ZERRITO
    Пустой ноль
    Можно сделать так, как написал Константин, а можно использовать встроенный декоратор.
    Пример:
    from discord.ext import tasks
    ...
    
    @tasks.loop(seconds=1) # Сколько секунд цикл будет "спать" перед повторным выполнением
    async def newloop():
        # Код внутри цикла
    
    @newloop.before_loop # Действие перед началом задачи
    async def before_newloop():
      await Bot.wait_until_ready() # Подождать, пока бот не будет полностью запущен (У меня Bot - переменная бота. У вас может быть client, bot и тд...)
    Ответ написан
    Комментировать