-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbot.py
More file actions
90 lines (62 loc) · 4.02 KB
/
Copy pathbot.py
File metadata and controls
90 lines (62 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, ContextTypes
from scene_display import SceneDispatcher
from quiz_module import start_quiz, handle_quiz_response
# токен
TOKEN = "8196991937:AAGbHFaC5WspH06hmYWWHlFdPO4dQ1INPkY"
dispatcher = SceneDispatcher()
# Команда /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
keyboard = [
[InlineKeyboardButton('Начать игру!', callback_data='intro_step_0')],
[InlineKeyboardButton('🧠 Пройти тест', callback_data='start_quiz')]
]
#приветственная кнопка
reply_markup = InlineKeyboardMarkup(keyboard) #переводим список кнопок в клаву снизу
await update.message.reply_text( "Добро пожаловать в интерактивную историю о"
" Гражданской войне!\nТы — Иван Петров. Готов начать?",
reply_markup = reply_markup) #отправка приветсвенного соо
async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
await query.answer()
scene_id = query.data
if "_step_" in scene_id or scene_id.startswith("scene_") or scene_id.startswith("opt"):
if "_step_" in scene_id:
base_id, step = scene_id.split("_step_")
step = int(step)
else:
base_id = scene_id
step = 0
text, markup = dispatcher.get_next_scene_step(base_id, step)
if text:
await query.edit_message_text(text, reply_markup=markup, parse_mode="Markdown")
else:
await query.edit_message_text("🎬 Конец сцены.")
elif scene_id == "goto_menu":
keyboard = [
[InlineKeyboardButton("🪖 Сцена 1 — Окопы Первой мировой", callback_data="scene_1_step_0")],
[InlineKeyboardButton("📅 Сцена 2 — Февральская революция", callback_data="scene_2_step_0")],
[InlineKeyboardButton("🏙 Сцена 3 — Возвращение в Петроград", callback_data="scene_3_step_0")],
[InlineKeyboardButton("🔥 Сцена 4 — Смольный и штурм", callback_data="scene_4_step_0")],
[InlineKeyboardButton("🏛 Сцена 5 — Зимний дворец", callback_data="scene_5_step_0")],
[InlineKeyboardButton("🌄 Сцена 6 — Новая власть", callback_data="scene_6_step_0")],
[InlineKeyboardButton("📅 Сцена 7 — Совет народных комиссаров", callback_data="scene_7_step_0")],
[InlineKeyboardButton("📆 Сцена 8 — Переосмысление", callback_data="scene_8_step_0")],
[InlineKeyboardButton("🕵️ Сцена 9 — Репрессии 1937 года", callback_data="scene_9_step_0")],
[InlineKeyboardButton("📜 Сцена 10 — Последняя запись", callback_data="scene_10_step_0")],
[InlineKeyboardButton("🏠 В начало", callback_data="intro_step_0")]
]
markup = InlineKeyboardMarkup(keyboard)
await query.edit_message_text("📚 *Выбери сцену для перехода:*", reply_markup=markup, parse_mode="Markdown")
elif scene_id == "start_quiz":
await start_quiz(update, context)
# Запуск бота
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CallbackQueryHandler(handle_quiz_response, pattern=r"^quiz_"))
app.add_handler(CallbackQueryHandler(start_quiz, pattern="^start_quiz$"))
app.add_handler(CallbackQueryHandler(button_handler, pattern=r"^(intro|scene_|opt|goto_menu).*"))
app.run_polling()#запуск бота
if __name__ == "__main__":
main()