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

Configure Feed

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

kudos messages

+139 -65
+47 -37
kefi/routers/helpers.py
··· 4 4 5 5 from sqlmodel import Session 6 6 7 + from kefi.config import settings 7 8 from kefi.constants import Actions, Block, Command, EventBodyType, InteractionType 8 9 from kefi.dependencies import EventBody, InteractionParams, SlashCommandParams 9 10 from kefi.models.core.exceptions import NotEnoughKefi ··· 33 34 from kefi.routers.messages import ( 34 35 AlreadyAttendingMessage, 35 36 BaseMessage, 36 - CongratsReceivedMessage, 37 37 CongratsSentMessage, 38 - HighFiveReceivedMessage, 39 38 HighFiveSentMessage, 40 - KudosReceivedMessage, 41 39 KudosSentMessage, 42 40 NotAttendingMessage, 43 41 NotEnoughKefiToGiveMessage, ··· 322 320 session=self.session, 323 321 ) 324 322 325 - sended_message = KudosSentMessage() 323 + sent_message = KudosSentMessage( 324 + sender=self.user, 325 + receiver=receiver, 326 + message=message, 327 + amount=settings.KUDOS_PRICE, 328 + ) 326 329 self.slack.post_message_user( 327 330 user_id=self.user.slack_user_id, 328 - blocks=sended_message.blocks(), 329 - text=sended_message.text(), 331 + blocks=sent_message.blocks(), 332 + text=sent_message.text(), 330 333 ) 331 334 332 - received_message = KudosReceivedMessage() 333 335 self.slack.post_message_user( 334 336 user_id=receiver.slack_user_id, 335 - blocks=received_message.blocks(), 336 - text=received_message.text(), 337 + blocks=sent_message.blocks(), 338 + text=sent_message.text(), 337 339 ) 338 340 except NotEnoughKefi: 339 341 not_enough_message = NotEnoughKefiToGiveMessage() ··· 388 390 session=self.session, 389 391 ) 390 392 391 - sended_message = CongratsSentMessage() 393 + sent_message = CongratsSentMessage( 394 + sender=self.user, 395 + receiver=receiver, 396 + message=message, 397 + amount=settings.CONGRATS_PRICE, 398 + ) 392 399 self.slack.post_message_user( 393 400 user_id=self.user.slack_user_id, 394 - blocks=sended_message.blocks(), 395 - text=sended_message.text(), 401 + blocks=sent_message.blocks(), 402 + text=sent_message.text(), 396 403 ) 397 404 398 - received_message = CongratsReceivedMessage() 399 405 self.slack.post_message_user( 400 406 user_id=receiver.slack_user_id, 401 - blocks=received_message.blocks(), 402 - text=received_message.text(), 407 + blocks=sent_message.blocks(), 408 + text=sent_message.text(), 403 409 ) 404 410 except NotEnoughKefi: 405 411 not_enough_message = NotEnoughKefiToGiveMessage() ··· 410 416 ) 411 417 return {"response_action": "clear"} 412 418 413 - def interaction_view_submission(self) -> list | dict: 414 - """Handles the submissions from a view.""" 415 - view_id = self.payload["view"]["id"] 416 - view_callback_id = self.payload["view"]["callback_id"] 417 - state = self.payload["view"]["state"] 418 - try: 419 - return getattr(self, f"_view_submission_{view_callback_id}")( 420 - view_id=view_id, state=state 421 - ) 422 - except AttributeError: 423 - ... 424 - return [] 425 - 426 - def not_found(self) -> list: 427 - return [] 428 - 429 419 def _view_submission_give_high_five( 430 420 self, view_id: str, state: dict | None = None 431 421 ) -> list | dict: ··· 470 460 session=self.session, 471 461 ) 472 462 473 - sended_message = HighFiveSentMessage() 463 + sent_message = HighFiveSentMessage( 464 + sender=self.user, 465 + receiver=receiver, 466 + message=message, 467 + amount=settings.HIGH_FIVE_PRICE, 468 + ) 474 469 self.slack.post_message_user( 475 470 user_id=self.user.slack_user_id, 476 - blocks=sended_message.blocks(), 477 - text=sended_message.text(), 471 + blocks=sent_message.blocks(), 472 + text=sent_message.text(), 478 473 ) 479 474 480 - received_message = HighFiveReceivedMessage() 481 475 self.slack.post_message_user( 482 476 user_id=receiver.slack_user_id, 483 - blocks=received_message.blocks(), 484 - text=received_message.text(), 477 + blocks=sent_message.blocks(), 478 + text=sent_message.text(), 485 479 ) 486 480 except NotEnoughKefi: 487 481 not_enough_message = NotEnoughKefiToGiveMessage() ··· 491 485 text=not_enough_message.text(), 492 486 ) 493 487 return {"response_action": "clear"} 488 + 489 + def interaction_view_submission(self) -> list | dict: 490 + """Handles the submissions from a view.""" 491 + view_id = self.payload["view"]["id"] 492 + view_callback_id = self.payload["view"]["callback_id"] 493 + state = self.payload["view"]["state"] 494 + try: 495 + return getattr(self, f"_view_submission_{view_callback_id}")( 496 + view_id=view_id, state=state 497 + ) 498 + except AttributeError: 499 + ... 500 + return [] 501 + 502 + def not_found(self) -> list: 503 + return [] 494 504 495 505 496 506 class ActionsHandler:
+92 -28
kefi/routers/messages.py
··· 1 1 from slack_sdk.models.blocks import ( 2 2 Block, 3 3 ButtonElement, 4 + ContextBlock, 4 5 DividerBlock, 6 + HeaderBlock, 5 7 ImageElement, 6 8 MarkdownTextObject, 7 9 PlainTextObject, ··· 9 11 ) 10 12 11 13 from kefi.constants import Actions 12 - from kefi.models.database import Plaza 14 + from kefi.models.database import Plaza, User 13 15 14 16 15 17 class BaseMessage: ··· 113 115 114 116 115 117 class KudosSentMessage(BaseMessage): 116 - def text(self) -> str: 117 - return "Test" 118 - 119 - def blocks(self) -> list[Block]: 120 - return [SectionBlock(text=MarkdownTextObject(text="Test"))] 121 - 118 + def __init__(self, sender: User, receiver: User, message: str, amount: int): 119 + self.sender_name = sender.get_short_name() 120 + self.receiver_name = receiver.get_short_name() 121 + self.message = message 122 + self.amount = amount 122 123 123 - class KudosReceivedMessage(BaseMessage): 124 124 def text(self) -> str: 125 - return "Test" 125 + return f"{self.sender_name} le da las gracias a {self.receiver_name}" 126 126 127 127 def blocks(self) -> list[Block]: 128 - return [SectionBlock(text=MarkdownTextObject(text="Test"))] 128 + return [ 129 + HeaderBlock(text=f"¡Gracias {self.receiver_name.get_short_name()}!"), 130 + SectionBlock( 131 + text=MarkdownTextObject( 132 + text=f"Mensaje de {self.sender_name.get_short_name()}:\n{self.message}" 133 + ), 134 + accessory=ImageElement( 135 + image_url="https://storage.staging.dekaside.com/kefi/static/images/kudos_400.png", 136 + alt_text="Kudos", 137 + ), 138 + ), 139 + ContextBlock( 140 + elements=[ 141 + ImageElement( 142 + image_url="https://storage.staging.dekaside.com/kefi/static/images/coin_70.png", 143 + alt_text="Kefis", 144 + ), 145 + MarkdownTextObject( 146 + text=f"*{self.sender_name}* le da a *{self.receiver_name}* {self.amount} kefis." 147 + ), 148 + ] 149 + ), 150 + ] 129 151 130 152 131 153 class CongratsSentMessage(BaseMessage): 132 - def text(self) -> str: 133 - return "Test" 134 - 135 - def blocks(self) -> list[Block]: 136 - return [SectionBlock(text=MarkdownTextObject(text="Test"))] 137 - 154 + def __init__(self, sender: User, receiver: User, message: str, amount: int): 155 + self.sender_name = sender.get_short_name() 156 + self.receiver_name = receiver.get_short_name() 157 + self.message = message 158 + self.amount = amount 138 159 139 - class CongratsReceivedMessage(BaseMessage): 140 160 def text(self) -> str: 141 - return "Test" 161 + return f"{self.sender_name} le da la enhorabuena a {self.receiver_name}" 142 162 143 163 def blocks(self) -> list[Block]: 144 - return [SectionBlock(text=MarkdownTextObject(text="Test"))] 164 + return [ 165 + HeaderBlock(text=f"¡Enhorabuena {self.receiver_name.get_short_name()}!"), 166 + SectionBlock( 167 + text=MarkdownTextObject( 168 + text=f"Mensaje de {self.sender_name.get_short_name()}:\n{self.message}" 169 + ), 170 + accessory=ImageElement( 171 + image_url="https://storage.staging.dekaside.com/kefi/static/images/congrats_400.png", 172 + alt_text="Kudos", 173 + ), 174 + ), 175 + ContextBlock( 176 + elements=[ 177 + ImageElement( 178 + image_url="https://storage.staging.dekaside.com/kefi/static/images/coin_70.png", 179 + alt_text="Kefis", 180 + ), 181 + MarkdownTextObject( 182 + text=f"*{self.sender_name}* le da a *{self.receiver_name}* {self.amount} kefis." 183 + ), 184 + ] 185 + ), 186 + ] 145 187 146 188 147 189 class HighFiveSentMessage(BaseMessage): 148 - def text(self) -> str: 149 - return "Test" 150 - 151 - def blocks(self) -> list[Block]: 152 - return [SectionBlock(text=MarkdownTextObject(text="Test"))] 153 - 190 + def __init__(self, sender: User, receiver: User, message: str, amount: int): 191 + self.sender_name = sender.get_short_name() 192 + self.receiver_name = receiver.get_short_name() 193 + self.message = message 194 + self.amount = amount 154 195 155 - class HighFiveReceivedMessage(BaseMessage): 156 196 def text(self) -> str: 157 - return "Test" 197 + return f"{self.sender_name} le envia un high five a {self.receiver_name}" 158 198 159 199 def blocks(self) -> list[Block]: 160 - return [SectionBlock(text=MarkdownTextObject(text="Test"))] 200 + return [ 201 + HeaderBlock( 202 + text=f"¡{self.sender_name} le envía un high five a {self.receiver_name}!" 203 + ), 204 + SectionBlock( 205 + text=MarkdownTextObject( 206 + text=f"Mensaje de {self.sender_name.get_short_name()}:\n{self.message}" 207 + ), 208 + accessory=ImageElement( 209 + image_url="https://storage.staging.dekaside.com/kefi/static/images/highfive_400.png", 210 + alt_text="Kudos", 211 + ), 212 + ), 213 + ContextBlock( 214 + elements=[ 215 + ImageElement( 216 + image_url="https://storage.staging.dekaside.com/kefi/static/images/coin_70.png", 217 + alt_text="Kefis", 218 + ), 219 + MarkdownTextObject( 220 + text=f"*{self.sender_name}* le da a *{self.receiver_name}* {self.amount} kefis." 221 + ), 222 + ] 223 + ), 224 + ] 161 225 162 226 163 227 class NotEnoughKefiToGiveMessage(BaseMessage):