Merge branch 'main' into text-edition
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,4 @@
|
|||||||
*__pycache__*
|
*__pycache__*
|
||||||
tmp
|
tmp
|
||||||
|
.env
|
||||||
|
docker-compose-dev.yml
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from .menu import menu_router
|
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
19
blueprints/man.py
Normal 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(),
|
||||||
|
)
|
@ -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}"
|
|
||||||
|
16
locales.py
16
locales.py
@ -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),
|
||||||
|
4
main.py
4
main.py
@ -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)
|
||||||
|
@ -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
BIN
nft_svc/data_100.pickle
Normal file
Binary file not shown.
Reference in New Issue
Block a user