Files
禹仔二号 929f4a30b3 添加dingding通知 (#1312)
* 新增图片作为email附件发送功能

* feat(notification): 为 WebhookNotifier 添加 send_to 功能

- 在 WebhookNotifier 类中添加 send_to 属性
- 修改 TransformData 方法,增加 send_to 字段
- 在 NotificationConfig 中添加 webhook_endpoint 和 websocket_endpoint 属性

* refactor(WebhookNotifier): 添加 send_to 属性并调整访问修饰符

* refactor(notification): 重构 WebhookNotifier 并更新 NotificationConfig

- 在 NotificationConfig 中添加 WebhookSendTo 属性
- 重构 WebhookNotifier 构造函数,使用 NotificationConfig 对象进行初始化
- 更新 WebhookNotifier 发送逻辑,使用新的配置属性

* feat: add webhook ui.

* refactor(WebhookNotifier): 重构 TransformData 方法以优化数据结构- 将 notification_data 的内容合并到外层字典,以便于 webhook 接收端获取数据- 新增 event、result、timestamp 等字段,使数据结构

* fix(WebSocketNotifier): 添加消息发送后关闭连接的功能

- 在 SendAsync 方法中添加了 CloseAsync() 调用,确保消息发送后关闭 WebSocket 连接
- 此修改解决了消息发送后未关闭连接的问题,提高了资源利用率和系统稳定性

* fix: implement unified webhook ui

* fix: typos.

* 优化通知前端显示

* feat(notification): 添加钉钉 Webhook 通知支持

- 实现了钉钉 Webhook 通知的发送功能
- 在通知配置中添加了钉钉 Webhook URL 和密钥的设置选项
- 在通知服务中集成了钉钉通知的初始化和注册
- 优化了 WebhookNotifier 类的代码结构

* 新增钉钉通知ui

Signed-off-by: DR-lin-eng <@DR-lin-eng>

* 修正图标

Signed-off-by: DR-lin-eng <@DR-lin-eng>

---------

Signed-off-by: DR-lin-eng <@DR-lin-eng>
Co-authored-by: DR-lin-eng <@DR-lin-eng>
Co-authored-by: 秋云 <physligl@gmail.com>
Co-authored-by: DR-lin-eng <52230594+DR-lin-eng@users.noreply.github.com>
Co-authored-by: 辉鸭蛋 <huiyadanli@gmail.com>
2025-03-16 03:18:02 +08:00

82 lines
2.8 KiB
C#

using BetterGenshinImpact.Service.Notifier.Exception;
using BetterGenshinImpact.Service.Notifier.Interface;
using System.Net.Http;
using System.Text;
using System.Text.Json; // 确保 System.Text.Json 命名空间被引用
using System.Threading.Tasks;
using BetterGenshinImpact.Service.Notification.Model;
using System.Collections.Generic;
using BetterGenshinImpact.Service.Notification; // 添加对 System.Collections.Generic 命名空间的引用
using BetterGenshinImpact.Service.Notification; // 添加对 NotificationConfig 类型的引用
using System.Text.Json; // 添加对 System.Text.Json 命名空间的引用
namespace BetterGenshinImpact.Service.Notifier;
public class WebhookNotifier : INotifier
{
public string Name { get; set; } = "Webhook";
public string Endpoint { get; set; }
// 添加 send_to 属性
private string SendTo { get; set; }
private readonly HttpClient _httpClient;
private readonly JsonSerializerOptions _jsonSerializerOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
};
public WebhookNotifier(HttpClient httpClient, NotificationConfig config)
{
_httpClient = httpClient;
Endpoint = config.WebhookEndpoint;
SendTo = config.WebhookSendTo; // 初始化 send_to 属性
}
public async Task SendAsync(BaseNotificationData content)
{
if (string.IsNullOrEmpty(Endpoint))
{
throw new NotifierException("Webhook 地址为空");
}
try
{
var response = await _httpClient.PostAsync(Endpoint, TransformData(content));
if (!response.IsSuccessStatusCode)
{
throw new NotifierException($"Webhook call failed with code: {response.StatusCode}");
}
}
catch (NotifierException)
{
throw;
}
catch (System.Exception ex)
{
throw new NotifierException($"Error sending webhook: {ex.Message}");
}
}
private StringContent TransformData(BaseNotificationData notificationData)
{
// 使用 SendTo 属性来设置 send_to 字段,并将 notification_data 的内容合并到外层字典
var dataToSend = new Dictionary<string, object>
{
{ "send_to", SendTo },
{ "event", notificationData.Event },
{ "result", notificationData.Result },
{ "timestamp", notificationData.Timestamp },
{ "screenshot", notificationData.Screenshot },
{ "message", notificationData.Message },
{ "data", notificationData.Data }
};
var serializedData = JsonSerializer.Serialize(dataToSend, _jsonSerializerOptions);
return new StringContent(serializedData, Encoding.UTF8, "application/json");
}
}