summaryrefslogtreecommitdiff
path: root/bot.py
diff options
context:
space:
mode:
Diffstat (limited to 'bot.py')
-rw-r--r--bot.py115
1 files changed, 33 insertions, 82 deletions
diff --git a/bot.py b/bot.py
index 7fdcffb..e683152 100644
--- a/bot.py
+++ b/bot.py
@@ -9,6 +9,12 @@ from os import environ
from config import TG_TOKEN, REQUEST_KWARGS
import backend_api
+from keyboards import (
+ MenuKeyboard, TasksKeyboard, TaskChosenKeyboard, ContinueKeyboard,
+ AnsweringKeyboard,
+)
+from utils import *
+from states import States
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
@@ -17,91 +23,29 @@ logger.setLevel(logging.DEBUG)
def start(bot: Bot, update: Update, user_data):
update.message.reply_text(
- "Привет! Ты вошел в телеграм-квиз с мемами про наш любимый КНиИТ.",
+ "Привет! Ты вошел в телеграм-квиз с мемами про наш любимый КНиИТ!",
reply_markup=ReplyKeyboardRemove()
)
user: User = update.message.from_user
if user.username is None:
- update.message.reply_text(
- "По правилам квиза ты не можешь участвовать, если у тебя не указано "
- "имя пользователя, поэтому укажи его и возвращайся как только это сделаешь!",
- reply_markup=ReplyKeyboardMarkup([['Я указал имя пользователя']])
- )
- return USERNAME_CHECK
+ return States.wait_for_username(bot, update, user_data)
else:
logger.debug(backend_api.register_user(user.id, user.username, user.full_name))
update.message.reply_text("Ты успешно зарегистрирован в системе!")
-
- update.message.reply_text("Твой счет: 0")
- update.message.reply_text(
- "Выбери следующее действие...",
- reply_markup=ReplyKeyboardMarkup([
- ["Сдать задачу"],
- ["Топ-10", "Правила"]
- ])
- )
-
- return MAIN_MENU
+ return States.main_menu(bot, update, user_data)
def username_check(bot: Bot, update: Update, user_data):
user: User = update.message.from_user
if user.username is None:
- update.message.reply_text(
- "Ты все еще не указал имя пользователя!",
- reply_markup=ReplyKeyboardMarkup([['Я указал имя пользователя']])
- )
- return USERNAME_CHECK
+ return States.wait_for_username(bot, update, user_data)
else:
logger.debug(backend_api.register_user(user.id, user.username, user.full_name))
update.message.reply_text("Ты успешно зарегистрирован в системе!")
-
- update.message.reply_text("Твой счет: 0")
- update.message.reply_text(
- "Выбери следующее действие...",
- reply_markup=ReplyKeyboardMarkup([
- ["Сдать задачу"],
- ["Топ-10", "Правила"]
- ])
- )
-
- return MAIN_MENU
-
-
-def main_menu(bot, update, user_data):
- text = update.message.text
-
- if text == "Сдать задачу":
- update.message.reply_text("А пока что нельзя!!")
- return MAIN_MENU
-
- elif text == "Топ-10":
- update.message.reply_text("Топ-1:\n1.Андрей Гущин")
- return MAIN_MENU
-
- elif text == "Правила":
- update.message.reply_text("Какие-то правила!!!!")
- return MAIN_MENU
-
- return MAIN_MENU
-
-
-def rules(bot: Bot, update: Update, user_data):
- update.message.reply_text("Какие-то правила!!!!")
- return MAIN_MENU
-
-
-def top_10(bot: Bot, update: Update, user_data):
- update.message.reply_text("Топ-1:\n1.Андрей Гущин")
- return MAIN_MENU
-
-
-def task_choose(bot: Bot, update: Update, user_data):
- update.message.reply_text("А пока что нельзя!!")
- return MAIN_MENU
+ return States.main_menu(bot, update, user_data)
def stop(bot, update):
@@ -125,26 +69,33 @@ def main():
updater.idle()
-(
- USERNAME_CHECK, USERNAME_HOLD,
- MAIN_MENU, TOP_10, RULES,
- TASK_CHOOSE, CANCEL_CHOOSE,
- TASK_SHOW, CANCEL_SHOW,
- ENTER_ANSWER, CANCEL_ANSWER,
- *_
-) = range(100)
-
conversation_handler = ConversationHandler(
entry_points=[
- CommandHandler('start', start, pass_user_data=True)
+ CommandHandler('start', start, pass_user_data=True),
],
states={
- USERNAME_CHECK: [MessageHandler(Filters.text, username_check, pass_user_data=True)],
- MAIN_MENU: [MessageHandler(Filters.text, main_menu, pass_user_data=True)],
- RULES: [MessageHandler(Filters.text, rules, pass_user_data=True)],
- TOP_10: [MessageHandler(Filters.text, top_10, pass_user_data=True)],
- TASK_CHOOSE: [MessageHandler(Filters.text, task_choose, pass_user_data=True)],
+ WAIT_FOR_USERNAME: [MessageHandler(Filters.text, username_check, pass_user_data=True)],
+
+ MAIN_MENU: [
+ MessageHandler(Filters.regex(MenuKeyboard.CHOOSE_TASK), States.choose_task, pass_user_data=True),
+ MessageHandler(Filters.regex(MenuKeyboard.TOP_10), States.top_10, pass_user_data=True),
+ MessageHandler(Filters.regex(MenuKeyboard.RULES), States.rules, pass_user_data=True),
+ ],
+ TASK_CHOOSING: [
+ MessageHandler(Filters.regex(TasksKeyboard.CANCEL), States.main_menu, pass_user_data=True),
+ MessageHandler(Filters.text, States.show_task, pass_user_data=True),
+ ],
+ TASK_SHOWN: [
+ MessageHandler(Filters.regex(TaskChosenKeyboard.CANCEL), States.choose_task, pass_user_data=True),
+ MessageHandler(Filters.regex(TaskChosenKeyboard.TYPE_ANSWER), States.type_answer, pass_user_data=True),
+ ],
+ ANSWERING: [
+ MessageHandler(Filters.regex(AnsweringKeyboard.CANCEL), States.show_task, pass_user_data=True),
+ MessageHandler(Filters.text, States.accept_answer, pass_user_data=True),
+ ],
+ ANSWER_RIGHT: [MessageHandler(Filters.text, States.main_menu, pass_user_data=True)],
+ ANSWER_WRONG: [MessageHandler(Filters.text, States.show_task, pass_user_data=True)]
},
fallbacks=[CommandHandler('stop', stop)]