From cc206ff358773c7786fef7101cf2303e0d821d55 Mon Sep 17 00:00:00 2001 From: Andrey Gumirov Date: Tue, 3 May 2022 21:06:32 +0700 Subject: [PATCH] Fixed keyboard and added man page --- .gitignore | 2 ++ blueprints/__init__.py | 3 ++- blueprints/man.py | 19 ++++++++++++++++ blueprints/test.py | 49 ++++-------------------------------------- locales.py | 14 ++++++++++-- main.py | 4 ++-- 6 files changed, 41 insertions(+), 50 deletions(-) create mode 100644 blueprints/man.py diff --git a/.gitignore b/.gitignore index 8123aee..0214a32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ *__pycache__* tmp +.env +docker-compose-dev.yml diff --git a/blueprints/__init__.py b/blueprints/__init__.py index 53bde0f..e8d5255 100644 --- a/blueprints/__init__.py +++ b/blueprints/__init__.py @@ -1,4 +1,5 @@ from .menu import menu_router from .test import test_router from .teacher import teacher_router -from .student import student_router \ No newline at end of file +from .student import student_router +from .man import man_router diff --git a/blueprints/man.py b/blueprints/man.py new file mode 100644 index 0000000..711a7f2 --- /dev/null +++ b/blueprints/man.py @@ -0,0 +1,19 @@ +from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadContainsFilter, BotEvent, \ + EventTypeFilter +from vkwave.types.bot_events import BotEventType + +import locales + +man_router = DefaultRouter() + + +@man_router.registrar.with_decorator( + EventTypeFilter(BotEventType.MESSAGE_NEW.value), + PayloadContainsFilter("man"), +) +async def man_menu(event: BotEvent): + sevent = SimpleBotEvent(event) + return await sevent.answer( + message=locales.MAN, + keyboard=locales.MAN_KB.get_keyboard(), + ) \ No newline at end of file diff --git a/blueprints/test.py b/blueprints/test.py index 03d14c3..2e5e9b8 100644 --- a/blueprints/test.py +++ b/blueprints/test.py @@ -1,43 +1,21 @@ import json import logging -import random -from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadFilter, PayloadContainsFilter, \ - PhotoUploader, Storage -from vkwave.bots import Keyboard, ButtonColor +from vkwave.bots import DefaultRouter, SimpleBotEvent, PayloadContainsFilter +from vkwave.bots import Keyboard from vkwave.bots import EventTypeFilter, BotEvent from vkwave.types.bot_events import BotEventType -from vkwave.bots.fsm import FiniteStateMachine, StateFilter, ForWhat, State, ANY_STATE - import locales -import util from config import Config from db import DB -from db.db import TestResult -from locales import INPUT_NAME_TEXT - -# MENU_KB.add_row() -# MENU_KB.add_text_button(text="Профиль", payload={"command": "profile"}, color=ButtonColor.SECONDARY) -# MENU_KB.add_row() -# MENU_KB.add_text_button(text="Бонус", payload={"command": "bonus"}, color=ButtonColor.POSITIVE) -# from nft_things.NftSender import NFTSender from util.redis_db import RedisDB from util.nft_util import get_image test_router = DefaultRouter() +EMPTY_KB = '{"buttons": [], "inline": false, "one_time": false}' -# # exiting from poll (works on any state) -# @test_router.registrar.with_decorator( -# lambda event: event.object.object.message.text == "exit", -# StateFilter(fsm=fsm, state=ANY_STATE, for_what=ForWhat.FOR_USER) -# ) -# async def simple_handler(event: BotEvent): -# # Check if we have the user in database -# if await fsm.get_data(event, for_what=ForWhat.FOR_USER) is not None: -# await fsm.finish(event=event, for_what=ForWhat.FOR_USER) -# return "You are quited!" @test_router.registrar.with_decorator( EventTypeFilter(BotEventType.MESSAGE_NEW.value), @@ -51,7 +29,6 @@ async def main_part_handle(event: BotEvent): state_idx = int(payload["test"]) logging.debug(f"State index: {state_idx}") - q_res = payload['q'] if 'q' in payload else event.object.object.message.text logging.debug(f"Qres: {q_res}") @@ -73,7 +50,7 @@ async def main_part_handle(event: BotEvent): return await botevent.answer( message=locales.questions[state_idx + 1][0], payload=json.dumps({"test": state_idx + 1}), - + keyboard=EMPTY_KB, # try to remove keyboard ) else: # todo add task to send user an image here @@ -92,21 +69,3 @@ async def main_part_handle(event: BotEvent): message=locales.LAST_MESSAGE, keyboard=locales.LAST_MESSAGE_KB.get_keyboard(), ) - -# @test_router.registrar.with_decorator( -# StateFilter(fsm=fsm, state=MyState.age, for_what=ForWhat.FOR_USER), -# ) -# async def simple_handler(event: BotEvent): -# if not event.object.object.message.text.isdigit(): -# return f"Please, send only positive numbers!" -# await fsm.add_data( -# event=event, -# for_what=ForWhat.FOR_USER, -# state_data={"age": event.object.object.message.text}, -# ) -# user_data = await fsm.get_data(event=event, for_what=ForWhat.FOR_USER) -# -# # finish poll and delete the user -# # `fsm.finish` will do it -# await fsm.finish(event=event, for_what=ForWhat.FOR_USER) -# return f"Your data - {user_data}" diff --git a/locales.py b/locales.py index 8064c9f..a5233f5 100644 --- a/locales.py +++ b/locales.py @@ -9,7 +9,8 @@ MENU_KB.add_row() MENU_KB.add_text_button(text="Пообщаться со студентом", payload={"student": "1"}, color=ButtonColor.PRIMARY) MENU_KB.add_row() MENU_KB.add_text_button(text="Пообщаться с преподавателем", payload={"teacher": "1"}, color=ButtonColor.PRIMARY) - +MENU_KB.add_row() +MENU_KB.add_text_button(text="АЧе делать?", payload={"man": "1"}, color=ButtonColor.PRIMARY) # Student menu ST_MENU = """Вот список студентов, которые могут рассказать тебе про Инженерную Школу @@ -52,6 +53,16 @@ TC_KB.add_link_button(text="Юрий Данилович", link="https://vk.com/y TC_KB.add_row() TC_KB.add_text_button(text="ХОЧУ ДОМОЙ!!!!!!!!!!!!!!!", payload={}, color=ButtonColor.NEGATIVE) +# Manual +MAN = """Если вы хотите пройти тест - нажми на соответствующую кнопку. +Если вы абитуриент, и хотите узнать больше про инженерную школу, то вы можете пообщаться со студентами или преподавателями! +Для этого нажмите на кнопку “Диалог со студентом” или “Диалог с преподавателем”. +Также вы можете узнать про нас из соцсетей - для этого нажмите на кнопку “Таплинк”. +Если вы хотите пообщаться с другими абитуриентами - нажми на кнопку “Неформальный чат”. +Приятного пользования!""" + +MAN_KB = Keyboard() +MAN_KB.add_text_button(text="ХОЧУ ДОМОЙ!!!!!!!!!!!!!!!", payload={}, color=ButtonColor.NEGATIVE) # TEST Questions INPUT_NAME_TEXT = "Пожалуйста, введите имя:" @@ -116,7 +127,6 @@ LAST_MESSAGE = "Спасибо, что прошел тест!" LAST_MESSAGE_KB = Keyboard() LAST_MESSAGE_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.POSITIVE) - questions = [ (WHAT_ENGINEER_ARE_YOU, WHAT_ENGINEER_ARE_YOU_KB), (PROG_LANG, PROG_LANG_KB), diff --git a/main.py b/main.py index deeb7ae..1ee08fa 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,7 @@ import logging from vkwave.bots import SimpleLongPollBot, PhotoUploader from blueprints import ( - menu_router, test_router, student_router, teacher_router, + menu_router, test_router, student_router, teacher_router, man_router, ) from config import Config from middlewares import UserMiddleware @@ -21,10 +21,10 @@ Config().uploader = uploader bot.middleware_manager.add_middleware(UserMiddleware()) bot.middleware_manager.add_middleware(TestStateMiddleware()) - bot.dispatcher.add_router(test_router) bot.dispatcher.add_router(student_router) bot.dispatcher.add_router(teacher_router) +bot.dispatcher.add_router(man_router) # регаем последним чтобы сначала проверялись все остальные команды bot.dispatcher.add_router(menu_router)