revert: restore message.py to tanishra baseline (out of scope)

This commit is contained in:
Alexander Minges
2026-02-20 18:05:00 +01:00
parent 334078e242
commit 36d650e475

View File

@@ -1,6 +1,6 @@
"""Message tool for sending messages to users."""
from typing import Any, Awaitable, Callable
from typing import Any, Callable, Awaitable
from nanobot.agent.tools.base import Tool
from nanobot.bus.events import OutboundMessage
@@ -8,91 +8,87 @@ from nanobot.bus.events import OutboundMessage
class MessageTool(Tool):
"""Tool to send messages to users on chat channels."""
def __init__(
self,
self,
send_callback: Callable[[OutboundMessage], Awaitable[None]] | None = None,
default_channel: str = "",
default_chat_id: str = "",
default_chat_id: str = ""
):
self._send_callback = send_callback
self._default_channel = default_channel
self._default_chat_id = default_chat_id
def set_context(self, channel: str, chat_id: str) -> None:
"""Set the current message context."""
self._default_channel = channel
self._default_chat_id = chat_id
def set_send_callback(self, callback: Callable[[OutboundMessage], Awaitable[None]]) -> None:
"""Set the callback for sending messages."""
self._send_callback = callback
@property
def name(self) -> str:
return "message"
@property
def description(self) -> str:
return (
"Send a message to the user. Supports optional media/attachment "
"paths for channels that can send files."
)
return "Send a message to the user. Use this when you want to communicate something."
@property
def parameters(self) -> dict[str, Any]:
return {
"type": "object",
"properties": {
"content": {"type": "string", "description": "The message content to send"},
"content": {
"type": "string",
"description": "The message content to send"
},
"channel": {
"type": "string",
"description": "Optional: target channel (telegram, discord, etc.)",
"description": "Optional: target channel (telegram, discord, etc.)"
},
"chat_id": {"type": "string", "description": "Optional: target chat/user ID"},
"media": {
"type": "array",
"description": "Optional: local file paths to send as attachments",
"items": {"type": "string"},
"chat_id": {
"type": "string",
"description": "Optional: target chat/user ID"
},
"chat_id": {"type": "string", "description": "Optional: target chat/user ID"},
"media": {
"type": "array",
"items": {"type": "string"},
"description": "Optional: list of file paths to attach (images, audio, documents)",
},
"description": "Optional: list of file paths to attach (images, audio, documents)"
}
},
"required": ["content"],
"required": ["content"]
}
async def execute(
self,
content: str,
channel: str | None = None,
self,
content: str,
channel: str | None = None,
chat_id: str | None = None,
media: list[str] | None = None,
**kwargs: Any,
**kwargs: Any
) -> str:
channel = channel or self._default_channel
chat_id = chat_id or self._default_chat_id
if not channel or not chat_id:
return "Error: No target channel/chat specified"
if not self._send_callback:
return "Error: Message sending not configured"
media_paths: list[str] = []
for item in media or []:
if isinstance(item, str):
candidate = item.strip()
if candidate:
media_paths.append(candidate)
msg = OutboundMessage(channel=channel, chat_id=chat_id, content=content, media=media_paths)
msg = OutboundMessage(
channel=channel,
chat_id=chat_id,
content=content,
media=media or []
)
try:
await self._send_callback(msg)
return f"Message sent to {channel}:{chat_id}"
media_info = f" with {len(media)} attachments" if media else ""
return f"Message sent to {channel}:{chat_id}{media_info}"
except Exception as e:
return f"Error sending message: {str(e)}"