Почему не обновляется цена после вызова /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)