open-swe/agent/tools/slack_add_reaction.py

47 lines
1.6 KiB
Python
Raw Permalink Normal View History

from typing import Any
from langgraph.config import get_config
from ..utils.slack import add_slack_reaction
async def slack_add_reaction(
emoji: str = "eyes",
message_ts: str | None = None,
) -> dict[str, Any]:
"""Add a reaction to a Slack message in the current Slack thread.
Use this with the default `eyes` reaction to acknowledge Slack user follow-up
requests while you continue working, instead of posting a perfunctory
confirmation reply. If `message_ts` is omitted, this reacts to the latest
message that triggered the run. Pass emoji names without surrounding colons.
"""
config = get_config()
configurable = config.get("configurable", {})
slack_thread = configurable.get("slack_thread", {})
channel_id = slack_thread.get("channel_id")
if not channel_id:
return {"success": False, "error": "Missing slack_thread.channel_id in config"}
target_ts = (message_ts or slack_thread.get("triggering_event_ts") or "").strip()
if not target_ts:
return {
"success": False,
"error": "Missing message_ts and slack_thread.triggering_event_ts in config",
}
reaction = emoji.strip().strip(":")
if not reaction:
return {"success": False, "error": "emoji is required"}
if any(char.isspace() for char in reaction):
return {
"success": False,
"error": "emoji must be a Slack reaction name without whitespace",
}
success = await add_slack_reaction(channel_id, target_ts, reaction)
if not success:
return {"success": False, "error": "Could not add Slack reaction"}
return {"success": True}