mirror of
http://112.124.100.131/huang.ze/ebiz-dify-ai.git
synced 2025-12-10 03:16:51 +08:00
feat(Tools): add discord incoming webhook for sending messages (#7852)
This commit is contained in:
7
api/core/tools/provider/builtin/discord/_assets/icon.svg
Normal file
7
api/core/tools/provider/builtin/discord/_assets/icon.svg
Normal 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 |
9
api/core/tools/provider/builtin/discord/discord.py
Normal file
9
api/core/tools/provider/builtin/discord/discord.py
Normal 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()
|
||||||
16
api/core/tools/provider/builtin/discord/discord.yaml
Normal file
16
api/core/tools/provider/builtin/discord/discord.yaml
Normal 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:
|
||||||
@@ -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))
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user