diff options
| author | Andrew <saintruler@gmail.com> | 2020-02-11 14:17:19 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2020-02-11 14:17:19 +0400 |
| commit | 1ca68c0b1af0f7fb5812c831d61cd85d282f08e1 (patch) | |
| tree | e2d5be0c35718f27955c705252d09cdf938a3370 /bot.py | |
Basic functionality
Diffstat (limited to 'bot.py')
| -rw-r--r-- | bot.py | 154 |
1 files changed, 154 insertions, 0 deletions
@@ -0,0 +1,154 @@ +from telegram.ext import Updater, CommandHandler, ConversationHandler, MessageHandler, Filters, CallbackQueryHandler +from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove, InlineKeyboardMarkup, InlineKeyboardButton + +# Typing +from telegram import Update, User, Bot + +import logging +from os import environ +from config import TG_TOKEN, REQUEST_KWARGS + +import backend_api + +logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) +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 + + 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 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 + + 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 + + +def stop(bot, update): + update.message.reply_text('Пока!', reply_markup=ReplyKeyboardRemove()) + update.message.reply_text('Для того, чтобы начать работу с ботом заново напишите /start') + return ConversationHandler.END + + +def error(bot, update, error): + logger.warning('Update "%s" caused error "%s"', update, error) + + +def main(): + updater = Updater(TG_TOKEN, request_kwargs=REQUEST_KWARGS) + + dp = updater.dispatcher + dp.add_error_handler(error) + dp.add_handler(conversation_handler) + + updater.start_polling() + 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) + ], + + 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)], + }, + + fallbacks=[CommandHandler('stop', stop)] +) + +if __name__ == '__main__': + main() |