Кто знает можете подсказать, писал тг бота, вроде все верно , но все же при запуске ничего не происходит
буду рад , если поможете с решением!
import logging
import requests
from telegram import Update, ReplyKeyboardMarkup, ReplyKeyboardRemove
from telegram.ext import Updater, CommandHandler, MessageHandler, filters, ConversationHandler, CallbackContext
from flask import Flask, request
TOKEN = ''
COINGECKO_API_URL = 'https://api.coingecko.com/api/v3'
START, LEARN, CHECK_PRICE = range(3)
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
def start(update: Update, context: CallbackContext) -> int:
update.message.reply_text(
"Привет! Я бот для обучения криптовалютам. Что бы вы хотели узнать?",
reply_markup=ReplyKeyboardMarkup([['Узнать о криптовалютах', 'Проверить цену']], one_time_keyboard=True)
)
return START
def learn(update: Update, context: CallbackContext) -> int:
update.message.reply_text(
"Криптовалюта – это цифровая или виртуальная форма валюты, которая использует криптографию для обеспечения безопасности. "
"Она работает на децентрализованной сети, известной как блокчейн, который представляет собой распределенный реестр, "
"записывающий все транзакции. Криптовалюты используют криптографию для обеспечения безопасности транзакций, контроля "
"создания новых единиц и верификации передачи активов."
)
update.message.reply_text("Что бы еще вы хотели узнать?", reply_markup=ReplyKeyboardRemove())
return START
def check_price(update: Update, context: CallbackContext) -> int:
update.message.reply_text("Введите символ криптовалюты (например, BTC):")
return CHECK_PRICE
def get_crypto_price(symbol: str) -> str:
try:
response = requests.get(f'{COINGECKO_API_URL}/simple/price?ids={symbol.lower()}&vs_currencies=usd')
response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)
data = response.json()
if symbol.lower() in data and 'usd' in data[symbol.lower()]:
price = data[symbol.lower()]['usd']
return f"Текущая цена {symbol.upper()}: {price} USD"
else:
return f"Не удалось получить данные о цене {symbol.upper()}. Пожалуйста, проверьте символ криптовалюты."
except requests.exceptions.RequestException as e:
return f"Ошибка при запросе к API: {e}"
except Exception as e:
return f"Произошла неизвестная ошибка: {e}"
def handle_crypto_symbol(update: Update, context: CallbackContext) -> int:
crypto_symbol = update.message.text.upper()
price_message = get_crypto_price(crypto_symbol)
update.message.reply_text(price_message)
update.message.reply_text("Что бы еще вы хотели узнать?", reply_markup=ReplyKeyboardRemove())
return START
def cancel(update: Update, context: CallbackContext) -> int:
update.message.reply_text("Действие отменено.", reply_markup=ReplyKeyboardRemove())
return START
def main() -> None:
updater = Updater(TOKEN)
dispatcher = updater.dispatcher
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
START: [
MessageHandler(filters.Regex('Узнать о криптовалютах'), learn),
MessageHandler(filters.Regex('Проверить цену'), check_price),
],
LEARN: [MessageHandler(filters.Text & ~filters.Command, cancel)],
CHECK_PRICE: [MessageHandler(filters.Text & ~filters.Command, handle_crypto_symbol)],
},
fallbacks=[CommandHandler('cancel', cancel)],
)
dispatcher.add_handler(conv_handler)
updater.start_polling()
updater.idle()
if __name__ == 'main':
app.run(threaded=True)
Updater.start_polling
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Ошибка в строке if __name__ == 'main':, должно быть if __name__ == '__main__':.
В текущей версии она не запустит main(), отсюда ничего и не происходит.
if __name__ == '__main__':
main()
И если других ошибок нет, то запустится.