Почему не обновляется цена после вызова /alert и не работает команда /alert?

у меня есть файл bot.py:

import logging
from typing import Text
from aiogram import Bot, Dispatcher, executor, types
import config
import requests
import json
from aiogram.dispatcher.filters import Text

# Делаем запрос на получение цены биткоина
response = requests.get('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd').text
bitcoinjson = json.loads(response)
pricebitcoin = bitcoinjson["bitcoin"]["usd"]


# Объект бота
bot = Bot(config.token)

# Диспетчер для бота
dp = Dispatcher(bot)

# Включаем логирование, чтобы не пропустить важные сообщения
logging.basicConfig(level=logging.INFO)

# Хэндлер на команду /price
@dp.message_handler(commands="price")
async def priceb(message: types.Message):
    await message.answer(f"Цена биткоина = {pricebitcoin}")

@dp.message_handler(commands="alert")   
async def alarm(message: types.Message):
    mean = message.text[6:]
    if int(mean) == int(pricebitcoin):
       await message.answer('Биткоин пересёк эту отметку')
    
        
    


if __name__ == "__main__":
    # Запуск бота
    executor.start_polling(dp, skip_updates=True)

в нем есть хэндлер на команду /price который выводит цену. Также команда /alert, суть который является, что после неё берется значение и если это значение будет равно цене, то будет писать Биткоин пересёк эту отметку. Например я пишу /alert 55000 и если цена будет равна этой цифре то мне должно вывестись сообщение, но так не работает. Всё как будто застывает и ничего не происходит. Даже команда /price не выводит правильную цену. Как исправить это чтобы команда /alert работала привильно


Ответы (1 шт):

Автор решения: MyZik

Перенесите Ваш код для получения цены Bitcoin в отдельную функцию и вызывайте её там, где нужно:

# Объект бота
bot = Bot(config.token)

# Диспетчер для бота
dp = Dispatcher(bot)

# Включаем логирование, чтобы не пропустить важные сообщения
logging.basicConfig(level=logging.INFO)

def get_bitcoin_price() -> int:
    # Делаем запрос на получение цены биткоина
    response = requests.get('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd').text
    bitcoinjson = json.loads(response)
    return int(bitcoinjson["bitcoin"]["usd"])


# Хэндлер на команду /price
@dp.message_handler(commands="price")
async def priceb(message: types.Message):
    await message.answer(f"Цена биткоина = get_bitcoin_price()}")

@dp.message_handler(commands="alert")   
async def alarm(message: types.Message):
    mean = message.text[6:]
    if int(mean) == get_bitcoin_price():
       await message.answer('Биткоин пересёк эту отметку')
    

if __name__ == "__main__":
    # Запуск бота
    executor.start_polling(dp, skip_updates=True)
→ Ссылка