85 lines
3.5 KiB
Python
85 lines
3.5 KiB
Python
# bot/handlers.py
|
||
from telegram import Update
|
||
from telegram.ext import ContextTypes
|
||
from django.utils import translation
|
||
from django.utils.translation import gettext as _
|
||
from .utils import render_keyboard, render_message
|
||
from .router import router
|
||
|
||
# 1. Сценарий: Меню
|
||
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
# Установка языка по умолчанию
|
||
context.user_data['lang'] = 'ru'
|
||
|
||
keyboard = render_keyboard('bot/menu.html')
|
||
text = _("Добро пожаловать! Выберите действие:")
|
||
|
||
await update.message.reply_text(text, reply_markup=keyboard)
|
||
|
||
# Обработчики callback-ов через наш роутер
|
||
|
||
@router.route('set_lang')
|
||
async def set_language_menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
# Показываем меню выбора языка
|
||
keyboard = render_keyboard('bot/lang_menu.html')
|
||
await update.callback_query.edit_message_text(
|
||
_("Выберите язык интерфейса:"),
|
||
reply_markup=keyboard
|
||
)
|
||
|
||
@router.route('lang_ru')
|
||
async def lang_ru(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
context.user_data['lang'] = 'ru'
|
||
translation.activate('ru')
|
||
await show_main_menu(update, _("Язык сменен на Русский"))
|
||
|
||
@router.route('lang_en')
|
||
async def lang_en(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
context.user_data['lang'] = 'en'
|
||
translation.activate('en')
|
||
await show_main_menu(update, _("Language changed to English"))
|
||
|
||
@router.route('lang_fr')
|
||
async def lang_fr(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
context.user_data['lang'] = 'fr'
|
||
translation.activate('fr')
|
||
await show_main_menu(update, _("Язык сменен на Французский"))
|
||
|
||
@router.route('lang_de')
|
||
async def lang_de(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
context.user_data['lang'] = 'de'
|
||
translation.activate('de')
|
||
await show_main_menu(update, _("Язык сменен на Немецкий"))
|
||
|
||
@router.route('profile')
|
||
async def profile(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
user = update.effective_user
|
||
text = _("Ваш профиль:\nID: {id}\nИмя: {name}").format(id=user.id, name=user.first_name)
|
||
|
||
keyboard = render_keyboard('bot/back.html')
|
||
await update.callback_query.edit_message_text(text, reply_markup=keyboard)
|
||
|
||
@router.route('help')
|
||
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
# Текст помощи (можно тоже вынести в HTML, но для простоты тут текст)
|
||
text = _("ℹ️ *Справка*\n\n"
|
||
"Это демонстрационный бот на Django.\n"
|
||
"Вы можете менять язык интерфейса и смотреть профиль.\n\n"
|
||
"Версия: 1.0")
|
||
|
||
# Используем кнопку "Назад", которая у нас уже есть
|
||
keyboard = render_keyboard('bot/back.html')
|
||
|
||
await update.callback_query.edit_message_text(
|
||
text,
|
||
reply_markup=keyboard,
|
||
parse_mode='Markdown'
|
||
)
|
||
|
||
@router.route('main_menu')
|
||
async def back_to_main(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
await show_main_menu(update, _("Главное меню"))
|
||
|
||
async def show_main_menu(update, text):
|
||
keyboard = render_keyboard('bot/menu.html')
|
||
await update.callback_query.edit_message_text(text, reply_markup=keyboard) |