mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-15 09:17:13 +08:00
* 新增图片作为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>
82 lines
2.8 KiB
C#
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");
|
|
}
|
|
} |