Как вызвать какую-то функцию при остановке телеграм бота? aiogram
Я храню данные в JSON. При включении бота я подгружаю данные с файла в словарь, но при выключении мне нужно их выгружать обратно в файл, только не знаю как вызвать функцию при остановке бота.
Пробовал
executor.start_polling(dp, on_startup=load_data(), on_shutdown=upload_data())
но выполняет функцию почему-то при запуске после стартапа. Помогите плз
Ответы (2 шт):
Автор решения: cool rage
→ Ссылка
Нужно создать функции 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)
Автор решения: Kamronbek Osimjonov
→ Ссылка
Попробуйте в каждой из этих функций добавить аргументы 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)