Python backend for a Slack's kudos plugin.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Added Events Handler

+41 -11
+2 -2
kefi/dependencies.py
··· 10 10 self.payload = payload 11 11 12 12 13 - class EventType(BaseModel): 13 + class Event(BaseModel): 14 14 type: str 15 15 user: str 16 16 ··· 19 19 token: str 20 20 challenge: str | None 21 21 type: str 22 - event: EventType | None 22 + event: Event | None 23 23 24 24 25 25 class SlashCommandParams:
+3 -7
kefi/routers/events.py
··· 2 2 from sqlmodel import Session 3 3 4 4 from kefi.dependencies import EventBody, InteractionParams, get_session 5 - from kefi.routers.helpers import InteractionHandler 5 + from kefi.routers.helpers import EventHandler, InteractionHandler 6 6 from kefi.routers.views import HomeView 7 7 from kefi.slack import Slack 8 8 ··· 14 14 body: EventBody, 15 15 ): 16 16 """Calls the events handler and gets the response.""" 17 - slack = Slack() 18 - if body.challenge: 19 - return {"challenge": body.challenge} 20 - elif body.event: 21 - slack.publish_view(user_id=body.event.user, view=HomeView()) 22 - return {} 17 + event_handler = EventHandler(body) 18 + return event_handler.response()
+36 -2
kefi/routers/helpers.py
··· 5 5 from sqlmodel import Session 6 6 7 7 from kefi.constants import Command, InteractionType 8 - from kefi.dependencies import InteractionParams, SlashCommandParams 8 + from kefi.dependencies import ( 9 + EventBody, 10 + EventType, 11 + InteractionParams, 12 + SlashCommandParams, 13 + ) 9 14 from kefi.models.core.exceptions import NotEnoughKefi 10 15 from kefi.models.core.helpers import ( 11 16 available_balance, ··· 16 21 received_balance, 17 22 send_admin_amount, 18 23 ) 24 + from kefi.models.database import User 19 25 from kefi.models.kudos.helpers import ( 20 26 get_action, 21 27 notify_receiver_user_chat_action, ··· 36 42 SlackResponse, 37 43 WalletResponse, 38 44 ) 39 - from kefi.routers.views import JoinMeetView, LeaveMeetView 45 + from kefi.routers.views import HomeView, JoinMeetView, LeaveMeetView 40 46 from kefi.slack import Slack 41 47 42 48 ··· 238 244 239 245 def not_found(self) -> list: 240 246 return [] 247 + 248 + 249 + class EventHandler: 250 + def __init__(self, event_body: EventBody, session: Session): 251 + self.event_body = event_body 252 + 253 + self.slack = Slack() 254 + self.user, _ = get_or_create_from_interactivity( 255 + interactivity_payload=self.payload, session=session 256 + ) 257 + 258 + def response(self) -> SlackResponse: 259 + handlers: dict[str, Callable] = { 260 + "url_verification": self.handle_url_verification, 261 + "event_callback": self.handle_event_callback, 262 + } 263 + response = handlers.get(self.event_body.type, self.not_found)() 264 + return response 265 + 266 + def not_found(self): 267 + ... 268 + 269 + def handle_url_verification(self): 270 + return {"challenge": self.event_body.challenge} 271 + 272 + def handle_event_callback(self): 273 + self.slack.publish_view(user_id=self.user.slack_user_id, view=HomeView()) 274 + return []