Merge branch 'main' into text-edition
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-05-04 16:56:46 +07:00
8 changed files with 51 additions and 56 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
*__pycache__* *__pycache__*
tmp tmp
.env
docker-compose-dev.yml

View File

@ -2,3 +2,4 @@ from .menu import menu_router
from .test import test_router from .test import test_router
from .teacher import teacher_router from .teacher import teacher_router
from .student import student_router from .student import student_router
from .man import man_router

19
blueprints/man.py Normal file
View File

@ -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(),
)

View File

@ -1,43 +1,21 @@
import json import json
import logging import logging
import random
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadFilter, PayloadContainsFilter, \ from vkwave.bots import DefaultRouter, SimpleBotEvent, PayloadContainsFilter
PhotoUploader, Storage from vkwave.bots import Keyboard
from vkwave.bots import Keyboard, ButtonColor
from vkwave.bots import EventTypeFilter, BotEvent from vkwave.bots import EventTypeFilter, BotEvent
from vkwave.types.bot_events import BotEventType from vkwave.types.bot_events import BotEventType
from vkwave.bots.fsm import FiniteStateMachine, StateFilter, ForWhat, State, ANY_STATE
import locales import locales
import util
from config import Config from config import Config
from db import DB 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.redis_db import RedisDB
from util.nft_util import get_image from util.nft_util import get_image
test_router = DefaultRouter() 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( @test_router.registrar.with_decorator(
EventTypeFilter(BotEventType.MESSAGE_NEW.value), EventTypeFilter(BotEventType.MESSAGE_NEW.value),
@ -51,7 +29,6 @@ async def main_part_handle(event: BotEvent):
state_idx = int(payload["test"]) state_idx = int(payload["test"])
logging.debug(f"State index: {state_idx}") logging.debug(f"State index: {state_idx}")
q_res = payload['q'] if 'q' in payload else event.object.object.message.text q_res = payload['q'] if 'q' in payload else event.object.object.message.text
logging.debug(f"Qres: {q_res}") logging.debug(f"Qres: {q_res}")
@ -73,7 +50,7 @@ async def main_part_handle(event: BotEvent):
return await botevent.answer( return await botevent.answer(
message=locales.questions[state_idx + 1][0], message=locales.questions[state_idx + 1][0],
payload=json.dumps({"test": state_idx + 1}), payload=json.dumps({"test": state_idx + 1}),
keyboard=EMPTY_KB, # try to remove keyboard
) )
else: else:
# todo add task to send user an image here # todo add task to send user an image here
@ -92,21 +69,3 @@ async def main_part_handle(event: BotEvent):
message=locales.LAST_MESSAGE, message=locales.LAST_MESSAGE,
keyboard=locales.LAST_MESSAGE_KB.get_keyboard(), 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}"

View File

@ -14,8 +14,9 @@ MENU_KB.add_link_button(text="Чат абитуриентов", link="https://vk
MENU_KB.add_row() MENU_KB.add_row()
MENU_KB.add_text_button(text="Пообщаться со студентом", payload={"student": "1"}, color=ButtonColor.PRIMARY) MENU_KB.add_text_button(text="Пообщаться со студентом", payload={"student": "1"}, color=ButtonColor.PRIMARY)
MENU_KB.add_row() MENU_KB.add_row()
MENU_KB.add_text_button(text="Задать вопрос преподавателю", payload={"teacher": "1"}, color=ButtonColor.PRIMARY) 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 # Student menu
ST_MENU = """Если вы ходите узнать про жизнь студента Инженерной школы, то можете написать этим ребятам: ST_MENU = """Если вы ходите узнать про жизнь студента Инженерной школы, то можете написать этим ребятам:
@ -58,6 +59,16 @@ TC_KB.add_link_button(text="Юрий Даниилович", link="https://vk.com
TC_KB.add_row() TC_KB.add_row()
TC_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.NEGATIVE) 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 # TEST Questions
INPUT_NAME_TEXT = "Пожалуйста, введите имя:" INPUT_NAME_TEXT = "Пожалуйста, введите имя:"
@ -125,7 +136,6 @@ LAST_MESSAGE = "Спасибо, что прошли тест!"
LAST_MESSAGE_KB = Keyboard() LAST_MESSAGE_KB = Keyboard()
LAST_MESSAGE_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.POSITIVE) LAST_MESSAGE_KB.add_text_button(text="Вернуться на главную", payload={}, color=ButtonColor.POSITIVE)
questions = [ questions = [
(WHAT_ENGINEER_ARE_YOU, WHAT_ENGINEER_ARE_YOU_KB), (WHAT_ENGINEER_ARE_YOU, WHAT_ENGINEER_ARE_YOU_KB),
(PROG_LANG, PROG_LANG_KB), (PROG_LANG, PROG_LANG_KB),

View File

@ -3,7 +3,7 @@ import logging
from vkwave.bots import SimpleLongPollBot, PhotoUploader from vkwave.bots import SimpleLongPollBot, PhotoUploader
from blueprints import ( 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 config import Config
from middlewares import UserMiddleware from middlewares import UserMiddleware
@ -21,10 +21,10 @@ Config().uploader = uploader
bot.middleware_manager.add_middleware(UserMiddleware()) bot.middleware_manager.add_middleware(UserMiddleware())
bot.middleware_manager.add_middleware(TestStateMiddleware()) bot.middleware_manager.add_middleware(TestStateMiddleware())
bot.dispatcher.add_router(test_router) bot.dispatcher.add_router(test_router)
bot.dispatcher.add_router(student_router) bot.dispatcher.add_router(student_router)
bot.dispatcher.add_router(teacher_router) bot.dispatcher.add_router(teacher_router)
bot.dispatcher.add_router(man_router)
# регаем последним чтобы сначала проверялись все остальные команды # регаем последним чтобы сначала проверялись все остальные команды
bot.dispatcher.add_router(menu_router) bot.dispatcher.add_router(menu_router)

View File

@ -1,11 +1,13 @@
import base64
import io import io
import random
from PIL import Image from PIL import Image
from flask import Flask, request, jsonify from flask import Flask, request, jsonify
import matplotlib.image as mpimg import matplotlib.image as mpimg
import numpy as np import numpy as np
import numba import numba
import pickle
import base64
app = Flask(__name__) app = Flask(__name__)
@ -43,12 +45,14 @@ def get_encoded_img(arr):
@app.route('/getImage', methods=['GET']) @app.route('/getImage', methods=['GET'])
def get_image(): def get_image():
name = request.args.get('name') with open('data_100.pickle', 'rb') as f:
fractal = optimized_mandelbrot(1000, 1000, np.random.randint(2, 251), np.random.uniform(-1, 1), np.random.uniform(-1, 1)) images = pickle.load(f)
img = get_encoded_img(fractal) buffered = io.BytesIO()
random.choice(images).save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue())
return jsonify({ return jsonify({
"code": 0, "code": 0,
"image": img, "image": str(img_str.decode('ascii')),
"first_time": 1 "first_time": 1
}) })

BIN
nft_svc/data_100.pickle Normal file

Binary file not shown.