Как вызвать какую-то функцию при остановке телеграм бота? aiogram

Рейтинг: 0Ответов: 2Опубликовано: 26.04.2023

Я храню данные в JSON. При включении бота я подгружаю данные с файла в словарь, но при выключении мне нужно их выгружать обратно в файл, только не знаю как вызвать функцию при остановке бота.

Пробовал

executor.start_polling(dp, on_startup=load_data(), on_shutdown=upload_data())

но выполняет функцию почему-то при запуске после стартапа. Помогите плз

Ответы

▲ 0

Нужно создать функции load_data и upload_data, затем в on_startup и on_shutdown передавать ссылки на эти функции

executor.start_polling(dp, on_startup=load_data, on_shutdown=upload_data)

попробуй это:

# загрузка данных при старте бота
def load_data():
    with open("data.json", "r") as f:
        data = json.load(f)
    return data

# сохранение данных при остановке бота
def upload_data():
    with open("data.json", "w") as f:
        json.dump(data, f, indent=4)

if __name__ == '__main__':
    data = load_data()
    executor.start_polling(dp, on_startup=load_data, on_shutdown=upload_data)
▲ 0

Попробуйте в каждой из этих функций добавить аргументы args, хоть вы их и не будете использовать. Думаю, должно вам помочь:

# загрузка данных при старте бота
def load_data(args):
    with open("data.json", "r") as f:
        data = json.load(f)
    return data

# сохранение данных при остановке бота
def upload_data(args):
    with open("data.json", "w") as f:
        json.dump(data, f, indent=4)

if __name__ == '__main__':
    data = load_data()
    executor.start_polling(dp, on_startup=load_data, on_shutdown=upload_data)