WebHook telegram bot test
This commit is contained in:
62
app/webhooks/telegram.py
Normal file
62
app/webhooks/telegram.py
Normal file
@ -0,0 +1,62 @@
|
||||
import os
|
||||
from fastapi import APIRouter, Request, HTTPException
|
||||
from telebot import TeleBot, types
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
|
||||
WEBHOOK_SECRET = os.getenv("TELEGRAM_WEBHOOK_SECRET", "") # опционально
|
||||
bot = TeleBot(BOT_TOKEN, threaded=False) # threaded=False обычно проще в async-сервисах
|
||||
|
||||
# ====== ВАШИ ХЕНДЛЕРЫ (почти без изменений) ======
|
||||
import httpx
|
||||
|
||||
API_URL = os.getenv("API_URL")
|
||||
user_states = {} # ⚠️ см. примечание ниже про хранение
|
||||
|
||||
@bot.message_handler(commands=['start'])
|
||||
def start(message):
|
||||
if len(message.text.split()) > 1:
|
||||
username = message.text.split()[1]
|
||||
user_states[message.chat.id] = {"username": username}
|
||||
bot.reply_to(message, "📋 Введите код из лаунчера:")
|
||||
else:
|
||||
bot.reply_to(message, "🔑 Введите ваш игровой никнейм:")
|
||||
bot.register_next_step_handler(message, process_username)
|
||||
|
||||
def process_username(message):
|
||||
user_states[message.chat.id] = {"username": message.text.strip()}
|
||||
bot.reply_to(message, "📋 Теперь введите код из лаунчера:")
|
||||
|
||||
@bot.message_handler(func=lambda m: m.chat.id in user_states)
|
||||
def verify_code(message):
|
||||
username = user_states[message.chat.id]["username"]
|
||||
code = message.text.strip()
|
||||
|
||||
try:
|
||||
r = httpx.post(
|
||||
f"{API_URL}/auth/verify_code",
|
||||
json={"username": username, "code": code, "telegram_chat_id": message.chat.id},
|
||||
)
|
||||
if r.status_code == 200:
|
||||
bot.reply_to(message, "✅ Аккаунт подтвержден!")
|
||||
else:
|
||||
bot.reply_to(message, f"❌ Ошибка: {r.json().get('detail')}")
|
||||
except Exception as e:
|
||||
bot.reply_to(message, "⚠️ Сервер недоступен. Детальная информация: " + str(e))
|
||||
|
||||
user_states.pop(message.chat.id, None)
|
||||
|
||||
# ====== WEBHOOK ENDPOINT ======
|
||||
@router.post("/telegram/webhook")
|
||||
async def telegram_webhook(request: Request):
|
||||
# простой секрет, чтобы никто кроме Telegram не слал апдейты
|
||||
if WEBHOOK_SECRET:
|
||||
header = request.headers.get("X-Telegram-Bot-Api-Secret-Token")
|
||||
if header != WEBHOOK_SECRET:
|
||||
raise HTTPException(status_code=403, detail="forbidden")
|
||||
|
||||
update_json = await request.json()
|
||||
update = types.Update.de_json(update_json)
|
||||
bot.process_new_updates([update])
|
||||
return {"ok": True}
|
||||
Reference in New Issue
Block a user