forked from gav/es-bot
72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
import json
|
|
import logging
|
|
|
|
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
|
|
import locales
|
|
from config import Config
|
|
from db import DB
|
|
|
|
from util.redis_db import RedisDB
|
|
from util.nft_util import get_image
|
|
|
|
test_router = DefaultRouter()
|
|
|
|
EMPTY_KB = '{"buttons": [], "inline": false, "one_time": false}'
|
|
|
|
|
|
@test_router.registrar.with_decorator(
|
|
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
|
PayloadContainsFilter("test"),
|
|
)
|
|
async def main_part_handle(event: BotEvent):
|
|
user_id = event.object.object.message.from_id
|
|
payload = json.loads(event.object.object.message.payload)
|
|
|
|
botevent = SimpleBotEvent(event)
|
|
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}")
|
|
|
|
# extra_state_data works as fsm.add_data(..., state_data={"name": event.object.object.message.text})
|
|
logging.debug(f"Got text: {event.object.object.message.text}")
|
|
|
|
if q_res:
|
|
DB().update_test_result(user_id, question=state_idx, answer=q_res)
|
|
|
|
if state_idx + 1 < len(locales.questions):
|
|
RedisDB().set_state(user_id, state_idx + 1)
|
|
kb = locales.questions[state_idx + 1][1]
|
|
if kb:
|
|
return await botevent.answer(
|
|
message=locales.questions[state_idx + 1][0],
|
|
keyboard=kb.get_keyboard(),
|
|
)
|
|
else:
|
|
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
|
|
# Config().nft_sender.add_task()
|
|
RedisDB().del_state(user_id)
|
|
logging.warn("Sending attach!")
|
|
|
|
big_attachment = await Config().uploader.get_attachments_from_paths(
|
|
peer_id=user_id,
|
|
file_paths=[get_image(user_id)],
|
|
)
|
|
await Config().api_ctx.messages.send(
|
|
user_id=user_id, attachment=big_attachment, random_id=0
|
|
)
|
|
return await botevent.answer(
|
|
message=locales.LAST_MESSAGE,
|
|
keyboard=locales.LAST_MESSAGE_KB.get_keyboard(),
|
|
)
|