This commit is contained in:
@ -1,12 +1,29 @@
|
|||||||
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler
|
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, EventTypeFilter
|
||||||
|
from vkwave.types.bot_events import BotEventType
|
||||||
|
|
||||||
import locales
|
import locales
|
||||||
|
|
||||||
menu_router = DefaultRouter()
|
menu_router = DefaultRouter()
|
||||||
|
|
||||||
|
|
||||||
@simple_bot_message_handler(menu_router,)
|
@menu_router.registrar.with_decorator(
|
||||||
|
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
||||||
|
)
|
||||||
async def menu(event: SimpleBotEvent):
|
async def menu(event: SimpleBotEvent):
|
||||||
return await event.answer(
|
sevent = SimpleBotEvent(event)
|
||||||
|
return await sevent.answer(
|
||||||
message=locales.MENU,
|
message=locales.MENU,
|
||||||
keyboard=locales.MENU_KB.get_keyboard(),
|
keyboard=locales.MENU_KB.get_keyboard(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@menu_router.registrar.with_decorator(
|
||||||
|
EventTypeFilter(BotEventType.GROUP_JOIN.value),
|
||||||
|
)
|
||||||
|
async def menu(event: SimpleBotEvent):
|
||||||
|
return await event.api_ctx.messages.send(
|
||||||
|
keyboard=locales.MENU_KB.get_keyboard(),
|
||||||
|
peer_id=event.object.object.user_id,
|
||||||
|
message=locales.MENU,
|
||||||
|
random_id=0
|
||||||
|
)
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadContainsFilter, BotEvent
|
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadContainsFilter, BotEvent, \
|
||||||
|
EventTypeFilter
|
||||||
|
from vkwave.types.bot_events import BotEventType
|
||||||
|
|
||||||
import locales
|
import locales
|
||||||
|
|
||||||
student_router = DefaultRouter()
|
student_router = DefaultRouter()
|
||||||
|
|
||||||
|
|
||||||
@student_router.registrar.with_decorator(PayloadContainsFilter("student"),)
|
@student_router.registrar.with_decorator(
|
||||||
|
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
||||||
|
PayloadContainsFilter("student"),
|
||||||
|
)
|
||||||
async def student_menu(event: BotEvent):
|
async def student_menu(event: BotEvent):
|
||||||
sevent = SimpleBotEvent(event)
|
sevent = SimpleBotEvent(event)
|
||||||
return await sevent.answer(
|
return await sevent.answer(
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadContainsFilter, BotEvent
|
from vkwave.bots import DefaultRouter, SimpleBotEvent, simple_bot_message_handler, PayloadContainsFilter, BotEvent, \
|
||||||
|
EventTypeFilter
|
||||||
|
from vkwave.types.bot_events import BotEventType
|
||||||
|
|
||||||
import locales
|
import locales
|
||||||
|
|
||||||
teacher_router = DefaultRouter()
|
teacher_router = DefaultRouter()
|
||||||
|
|
||||||
|
|
||||||
@teacher_router.registrar.with_decorator(PayloadContainsFilter("teacher"),)
|
@teacher_router.registrar.with_decorator(
|
||||||
|
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
||||||
|
PayloadContainsFilter("teacher"),
|
||||||
|
)
|
||||||
async def teacher_menu(event: BotEvent):
|
async def teacher_menu(event: BotEvent):
|
||||||
sevent = SimpleBotEvent(event)
|
sevent = SimpleBotEvent(event)
|
||||||
return await sevent.answer(
|
return await sevent.answer(
|
||||||
|
@ -26,11 +26,6 @@ from util.redis_db import RedisDB
|
|||||||
|
|
||||||
test_router = DefaultRouter()
|
test_router = DefaultRouter()
|
||||||
|
|
||||||
fsm = FiniteStateMachine()
|
|
||||||
test_router.registrar.add_default_filter(StateFilter(fsm, ..., ..., always_false=True))
|
|
||||||
test_router.registrar.add_default_filter(
|
|
||||||
EventTypeFilter(BotEventType.MESSAGE_NEW.value)) # we don't want to write it in all handlers.
|
|
||||||
|
|
||||||
|
|
||||||
# # exiting from poll (works on any state)
|
# # exiting from poll (works on any state)
|
||||||
# @test_router.registrar.with_decorator(
|
# @test_router.registrar.with_decorator(
|
||||||
@ -44,6 +39,7 @@ test_router.registrar.add_default_filter(
|
|||||||
# return "You are quited!"
|
# return "You are quited!"
|
||||||
|
|
||||||
@test_router.registrar.with_decorator(
|
@test_router.registrar.with_decorator(
|
||||||
|
EventTypeFilter(BotEventType.MESSAGE_NEW.value),
|
||||||
PayloadContainsFilter("test"),
|
PayloadContainsFilter("test"),
|
||||||
)
|
)
|
||||||
async def main_part_handle(event: BotEvent):
|
async def main_part_handle(event: BotEvent):
|
||||||
|
2
main.py
2
main.py
@ -14,8 +14,6 @@ logging.basicConfig(level="DEBUG")
|
|||||||
|
|
||||||
bot = SimpleLongPollBot(Config.TOKEN, group_id=Config.GROUP_ID)
|
bot = SimpleLongPollBot(Config.TOKEN, group_id=Config.GROUP_ID)
|
||||||
|
|
||||||
# nft_sender = NFTSender(bot.api_context)
|
|
||||||
# nft_sender.start()
|
|
||||||
uploader = PhotoUploader(bot.api_context)
|
uploader = PhotoUploader(bot.api_context)
|
||||||
Config().api_ctx = bot.api_context
|
Config().api_ctx = bot.api_context
|
||||||
Config().uploader = uploader
|
Config().uploader = uploader
|
||||||
|
@ -3,6 +3,7 @@ import logging
|
|||||||
|
|
||||||
from vkwave.bots import BaseMiddleware, BotEvent, MiddlewareResult, SimpleBotEvent, Storage
|
from vkwave.bots import BaseMiddleware, BotEvent, MiddlewareResult, SimpleBotEvent, Storage
|
||||||
from vkwave.bots.storage.types import Key
|
from vkwave.bots.storage.types import Key
|
||||||
|
from vkwave.types.bot_events import MessageNewObject
|
||||||
|
|
||||||
from db import DB, Candidate
|
from db import DB, Candidate
|
||||||
from util.redis_db import RedisDB
|
from util.redis_db import RedisDB
|
||||||
@ -12,7 +13,11 @@ storage = Storage()
|
|||||||
|
|
||||||
class TestStateMiddleware(BaseMiddleware):
|
class TestStateMiddleware(BaseMiddleware):
|
||||||
async def pre_process_event(self, event: BotEvent) -> MiddlewareResult:
|
async def pre_process_event(self, event: BotEvent) -> MiddlewareResult:
|
||||||
user_id = event.object.object.message.from_id
|
if isinstance(event.object.object, MessageNewObject):
|
||||||
|
user_id = event.object.object.message.from_id
|
||||||
|
else:
|
||||||
|
return MiddlewareResult(True)
|
||||||
|
|
||||||
redis_test_state = RedisDB().get_state(user_id)
|
redis_test_state = RedisDB().get_state(user_id)
|
||||||
logging.debug(event.object.object.message.payload)
|
logging.debug(event.object.object.message.payload)
|
||||||
payload_json = json.loads(event.object.object.message.payload) if event.object.object.message.payload else {}
|
payload_json = json.loads(event.object.object.message.payload) if event.object.object.message.payload else {}
|
||||||
|
@ -1,19 +1,33 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from vkwave.bots import BaseMiddleware, BotEvent, MiddlewareResult, SimpleBotEvent
|
from vkwave.bots import BaseMiddleware, BotEvent, MiddlewareResult, SimpleBotEvent
|
||||||
|
from vkwave.types.bot_events import GroupJoinObject, MessageNewObject
|
||||||
|
from vkwave.types.objects import UsersUser
|
||||||
|
|
||||||
from db import DB, Candidate
|
from db import DB, Candidate
|
||||||
|
|
||||||
|
|
||||||
|
async def get_user(api_ctx, user_id):
|
||||||
|
raw_user = (
|
||||||
|
await api_ctx.api_request("users.get", {"user_ids": user_id})
|
||||||
|
)["response"][0]
|
||||||
|
return UsersUser(**raw_user)
|
||||||
|
|
||||||
|
|
||||||
class UserMiddleware(BaseMiddleware):
|
class UserMiddleware(BaseMiddleware):
|
||||||
async def pre_process_event(self, event: BotEvent) -> MiddlewareResult:
|
async def pre_process_event(self, event: BotEvent) -> MiddlewareResult:
|
||||||
db = DB()
|
db = DB()
|
||||||
botevent = SimpleBotEvent(event)
|
|
||||||
user_id = event.object.object.message.from_id
|
if isinstance(event.object.object, GroupJoinObject):
|
||||||
|
user_id = event.object.object.user_id
|
||||||
|
elif isinstance(event.object.object, MessageNewObject):
|
||||||
|
user_id = event.object.object.message.from_id
|
||||||
|
else:
|
||||||
|
return MiddlewareResult(True)
|
||||||
|
|
||||||
user = db.get_user(user_id)
|
user = db.get_user(user_id)
|
||||||
if not user:
|
if not user:
|
||||||
user_info = await botevent.get_user()
|
user_info = await get_user(event.api_ctx, user_id)
|
||||||
logging.debug(f"Got user info: {user_info}")
|
logging.debug(f"Got user info: {user_info}")
|
||||||
user = Candidate(id=user_id, sex=user_info.sex, name=user_info.first_name, last_name=user_info.last_name)
|
user = Candidate(id=user_id, sex=user_info.sex, name=user_info.first_name, last_name=user_info.last_name)
|
||||||
db.add_candidate(user)
|
db.add_candidate(user)
|
||||||
|
Reference in New Issue
Block a user