Feat: add OneBot protocol tool (#7583)
parent
70d6ab0bf5
commit
8807d880dc
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
@ -0,0 +1,12 @@
|
||||
from typing import Any
|
||||
|
||||
from core.tools.errors import ToolProviderCredentialValidationError
|
||||
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
|
||||
|
||||
|
||||
class OneBotProvider(BuiltinToolProviderController):
|
||||
|
||||
def _validate_credentials(self, credentials: dict[str, Any]) -> None:
|
||||
|
||||
if not credentials.get("ob11_http_url"):
|
||||
raise ToolProviderCredentialValidationError('OneBot HTTP URL is required.')
|
||||
@ -0,0 +1,62 @@
|
||||
from typing import Any, Union
|
||||
|
||||
import requests
|
||||
|
||||
from core.tools.entities.tool_entities import ToolInvokeMessage
|
||||
from core.tools.tool.builtin_tool import BuiltinTool
|
||||
|
||||
|
||||
class SendGroupMsg(BuiltinTool):
|
||||
"""OneBot v11 Tool: Send Group Message"""
|
||||
|
||||
def _invoke(
|
||||
self,
|
||||
user_id: str,
|
||||
tool_parameters: dict[str, Any]
|
||||
) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
|
||||
|
||||
# Get parameters
|
||||
send_group_id = tool_parameters.get('group_id', '')
|
||||
|
||||
message = tool_parameters.get('message', '')
|
||||
if not message:
|
||||
return self.create_json_message(
|
||||
{
|
||||
'error': 'Message is empty.'
|
||||
}
|
||||
)
|
||||
|
||||
auto_escape = tool_parameters.get('auto_escape', False)
|
||||
|
||||
try:
|
||||
|
||||
resp = requests.post(
|
||||
f'{self.runtime.credentials['ob11_http_url']}/send_group_msg',
|
||||
json={
|
||||
'group_id': send_group_id,
|
||||
'message': message,
|
||||
'auto_escape': auto_escape
|
||||
},
|
||||
headers={
|
||||
'Authorization': 'Bearer ' + self.runtime.credentials['access_token']
|
||||
}
|
||||
)
|
||||
|
||||
if resp.status_code != 200:
|
||||
return self.create_json_message(
|
||||
{
|
||||
'error': f'Failed to send group message: {resp.text}'
|
||||
}
|
||||
)
|
||||
|
||||
return self.create_json_message(
|
||||
{
|
||||
'response': resp.json()
|
||||
}
|
||||
)
|
||||
except Exception as e:
|
||||
return self.create_json_message(
|
||||
{
|
||||
'error': f'Failed to send group message: {e}'
|
||||
}
|
||||
)
|
||||
@ -0,0 +1,61 @@
|
||||
from typing import Any, Union
|
||||
|
||||
import requests
|
||||
|
||||
from core.tools.entities.tool_entities import ToolInvokeMessage
|
||||
from core.tools.tool.builtin_tool import BuiltinTool
|
||||
|
||||
|
||||
class SendPrivateMsg(BuiltinTool):
|
||||
"""OneBot v11 Tool: Send Private Message"""
|
||||
|
||||
def _invoke(
|
||||
self,
|
||||
user_id: str,
|
||||
tool_parameters: dict[str, Any]
|
||||
) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
|
||||
|
||||
# Get parameters
|
||||
send_user_id = tool_parameters.get('user_id', '')
|
||||
|
||||
message = tool_parameters.get('message', '')
|
||||
if not message:
|
||||
return self.create_json_message(
|
||||
{
|
||||
'error': 'Message is empty.'
|
||||
}
|
||||
)
|
||||
|
||||
auto_escape = tool_parameters.get('auto_escape', False)
|
||||
|
||||
try:
|
||||
resp = requests.post(
|
||||
f'{self.runtime.credentials['ob11_http_url']}/send_private_msg',
|
||||
json={
|
||||
'user_id': send_user_id,
|
||||
'message': message,
|
||||
'auto_escape': auto_escape
|
||||
},
|
||||
headers={
|
||||
'Authorization': 'Bearer ' + self.runtime.credentials['access_token']
|
||||
}
|
||||
)
|
||||
|
||||
if resp.status_code != 200:
|
||||
return self.create_json_message(
|
||||
{
|
||||
'error': f'Failed to send private message: {resp.text}'
|
||||
}
|
||||
)
|
||||
|
||||
return self.create_json_message(
|
||||
{
|
||||
'response': resp.json()
|
||||
}
|
||||
)
|
||||
except Exception as e:
|
||||
return self.create_json_message(
|
||||
{
|
||||
'error': f'Failed to send private message: {e}'
|
||||
}
|
||||
)
|
||||
Loading…
Reference in New Issue