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