feat(Tools): add discord incoming webhook for sending messages (#7852)

This commit is contained in:
ice yao
2024-10-02 13:18:35 +08:00
committed by GitHub
parent 5366820a2f
commit 415d27c8bf
5 changed files with 121 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg width="80px" height="80px" viewBox="0 -28.5 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" fill="#000000">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,9 @@
from typing import Any
from core.tools.provider.builtin.discord.tools.discord_webhook import DiscordWebhookTool
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
class DiscordProvider(BuiltinToolProviderController):
def _validate_credentials(self, credentials: dict[str, Any]) -> None:
DiscordWebhookTool()

View File

@@ -0,0 +1,16 @@
identity:
author: Ice Yao
name: discord
label:
en_US: Discord
zh_Hans: Discord
pt_BR: Discord
description:
en_US: Discord Webhook
zh_Hans: Discord Webhook
pt_BR: Discord Webhook
icon: icon.svg
tags:
- social
- productivity
credentials_for_provider:

View File

@@ -0,0 +1,49 @@
from typing import Any, Union
import httpx
from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.tool.builtin_tool import BuiltinTool
class DiscordWebhookTool(BuiltinTool):
def _invoke(self, user_id: str, tool_parameters: dict[str, Any]
) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
"""
Incoming Webhooks
API Document:
https://discord.com/developers/docs/resources/webhook#execute-webhook
"""
content = tool_parameters.get('content', '')
if not content:
return self.create_text_message('Invalid parameter content')
webhook_url = tool_parameters.get('webhook_url', '')
if not webhook_url.startswith('https://discord.com/api/webhooks/'):
return self.create_text_message(
f'Invalid parameter webhook_url ${webhook_url}, \
not a valid Discord webhook URL')
headers = {
'Content-Type': 'application/json',
}
params = {}
payload = {
"content": content,
}
try:
res = httpx.post(webhook_url, headers=headers,
params=params, json=payload)
if res.is_success:
return self.create_text_message(
"Text message was sent successfully")
else:
return self.create_text_message(
f"Failed to send the text message, \
status code: {res.status_code}, response: {res.text}")
except Exception as e:
return self.create_text_message(
"Failed to send message through webhook. {}".format(e))

View File

@@ -0,0 +1,40 @@
identity:
name: discord_webhook
author: Ice Yao
label:
en_US: Incoming Webhook to send message
zh_Hans: 通过入站Webhook发送消息
pt_BR: Incoming Webhook to send message
icon: icon.svg
description:
human:
en_US: Sending a message on Discord via the Incoming Webhook
zh_Hans: 通过入站Webhook在Discord上发送消息
pt_BR: Sending a message on Discord via the Incoming Webhook
llm: A tool for sending messages to a chat on Discord.
parameters:
- name: webhook_url
type: string
required: true
label:
en_US: Discord Incoming Webhook url
zh_Hans: Discord入站Webhook的url
pt_BR: Discord Incoming Webhook url
human_description:
en_US: Discord Incoming Webhook url
zh_Hans: Discord入站Webhook的url
pt_BR: Discord Incoming Webhook url
form: form
- name: content
type: string
required: true
label:
en_US: content
zh_Hans: 消息内容
pt_BR: content
human_description:
en_US: Content to sent to the channel or person.
zh_Hans: 消息内容文本
pt_BR: Content to sent to the channel or person.
llm_description: Content of the message
form: llm