mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-04 20:05:16 +02:00
feat(gateway): handle Slack thread replies
This commit is contained in:
parent
78315eb55b
commit
61a3586caf
2 changed files with 150 additions and 0 deletions
64
surfsense_backend/app/gateway/slack/commands.py
Normal file
64
surfsense_backend/app/gateway/slack/commands.py
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
"""Slack command/onboarding handlers."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.gateway.base.adapter import ParsedInboundEvent
|
||||
from app.gateway.base.commands import BaseGatewayCommands
|
||||
from app.gateway.ratelimit import acquire_token
|
||||
from app.gateway.slack.adapter import SlackAdapter
|
||||
|
||||
HELP_TEXT = (
|
||||
"SurfSense Slack commands:\n"
|
||||
"`/new` - start a fresh SurfSense conversation in this thread\n"
|
||||
"`/help` - show this help\n\n"
|
||||
"Mention the SurfSense bot in a channel thread to ask your agent a question."
|
||||
)
|
||||
|
||||
|
||||
class SlackGatewayCommands(BaseGatewayCommands):
|
||||
async def handle_help_command(
|
||||
self,
|
||||
*,
|
||||
adapter: SlackAdapter,
|
||||
event: ParsedInboundEvent,
|
||||
) -> bool:
|
||||
channel_id = event.metadata.get("channel_id")
|
||||
thread_ts = event.metadata.get("thread_ts")
|
||||
if not channel_id or not thread_ts:
|
||||
return True
|
||||
await adapter.send_message(
|
||||
external_peer_id=channel_id,
|
||||
text=HELP_TEXT,
|
||||
reply_to_message_id=thread_ts,
|
||||
)
|
||||
return True
|
||||
|
||||
async def send_unbound_onboarding(
|
||||
self,
|
||||
*,
|
||||
adapter: SlackAdapter,
|
||||
event: ParsedInboundEvent,
|
||||
dashboard_url: str,
|
||||
) -> None:
|
||||
channel_id = event.metadata.get("channel_id")
|
||||
thread_ts = event.metadata.get("thread_ts")
|
||||
slack_user_id = event.metadata.get("slack_user_id")
|
||||
if not channel_id or not thread_ts:
|
||||
return
|
||||
|
||||
wait_ms = await acquire_token(
|
||||
f"slack:onboarded:{event.metadata.get('team_id')}:{slack_user_id}",
|
||||
capacity=1,
|
||||
refill_per_sec=1 / 3600,
|
||||
)
|
||||
if wait_ms > 0:
|
||||
return
|
||||
|
||||
await adapter.send_message(
|
||||
external_peer_id=channel_id,
|
||||
reply_to_message_id=thread_ts,
|
||||
text=(
|
||||
"Hi! Connect your Slack user to SurfSense before using the bot here: "
|
||||
f"{dashboard_url}"
|
||||
),
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue