@Vadim_000

Как использовать on_startup в боте телеграмм?

Посмотрел часть кода main в одной статье, но она была не до конца закончена. На данный момент не знаю где вписать функцию on_startup, чтоб бд запускалась и записывала. Попробовал вставить в старт поллинг, не реагирует. aiogram 3.07b
main
import logging
import asyncio

from aiogram import Bot, Dispatcher
from aiogram.enums.parse_mode import ParseMode
from aiogram.fsm.storage.memory import MemoryStorage

import config
from handlers import router
from bd import bd_start


async def on_startup(_):
    await bd_start()
    print('База данных активна!')


async def main():
    bot = Bot(token=config.BOT_TOKEN, parse_mode=ParseMode.HTML)
    dp = Dispatcher(storage=MemoryStorage())
    dp.include_router(router)
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), on_startup=on_startup)


if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    asyncio.run(main())


bd
import sqlite3 as sq

bd = sq.connect('tg.bd')
cur = bd.cursor()


async def bd_start():
    cur.execute('CREATE TABLE IF NOTE EXISTS users('
                'id INTEGER PRIMARY KEY AUTOINCREMENT,'
                ' name TEXT)')

    bd.commit()
  • Вопрос задан
  • 1368 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
1. У тебя ошибка в SQL-синтаксисе: CREATE TABLE IF NOTE EXISTS
2. Что мешает тебе вызывать bd_start непосредственно перед запуском бота? Что-то типа:
async def main():
    await bd_start() # так
    bot = Bot(token=config.BOT_TOKEN, parse_mode=ParseMode.HTML)
    dp = Dispatcher(storage=MemoryStorage())
    dp.include_router(router)
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), on_startup=on_startup)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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