From c9e39d2f2647b8ac0a130f93e9a3ec2482ba2b60 Mon Sep 17 00:00:00 2001
From: Muihd <1083092844@qq.com>
Date: Wed, 30 Apr 2025 21:44:15 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E4=BD=93=E6=B7=BB=E5=8A=A0IF=E6=96=B9?=
=?UTF-8?q?=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Modles/JsonEntity/BarrageMessages.cs | 133 +++++++++++++++++-
1 file changed, 131 insertions(+), 2 deletions(-)
diff --git a/BarrageGrab/Modles/JsonEntity/BarrageMessages.cs b/BarrageGrab/Modles/JsonEntity/BarrageMessages.cs
index a7d23fc..c449dc7 100644
--- a/BarrageGrab/Modles/JsonEntity/BarrageMessages.cs
+++ b/BarrageGrab/Modles/JsonEntity/BarrageMessages.cs
@@ -1,4 +1,8 @@
-using System.ComponentModel;
+using System;
+using System.ComponentModel;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
+using Org.BouncyCastle.Asn1.Crmf;
namespace BarrageGrab.Modles.JsonEntity
{
@@ -94,6 +98,120 @@ namespace BarrageGrab.Modles.JsonEntity
Type = type;
ProcessName = processName;
}
+
+ ///
+ /// 当收到弹幕消息时执行回调
+ ///
+ public void IfChatMsg(Action action) => IfTypedMsg(PackMsgType.弹幕消息, action);
+
+ ///
+ /// 当收到点赞消息时执行回调
+ ///
+ public void IfLikeMsg(Action action) => IfTypedMsg(PackMsgType.点赞消息, action);
+
+ ///
+ /// 当收到进直播间消息时执行回调
+ ///
+ public void IfMemberMsg(Action action) => IfTypedMsg(PackMsgType.进直播间, action);
+
+ ///
+ /// 当收到关注消息时执行回调
+ ///
+ public void IfFollowMsg(Action action) => IfTypedMsg(PackMsgType.关注消息, action);
+
+ ///
+ /// 当收到礼物消息时执行回调
+ ///
+ public void IfGiftMsg(Action action) => IfTypedMsg(PackMsgType.礼物消息, action);
+
+ ///
+ /// 当收到直播间统计消息时执行回调
+ ///
+ public void IfUserSeqMsg(Action action) => IfTypedMsg(PackMsgType.直播间统计, action);
+
+ ///
+ /// 当收到粉丝团消息时执行回调
+ ///
+ public void IfFansclubMsg(Action action) => IfTypedMsg(PackMsgType.粉丝团消息, action);
+
+ ///
+ /// 当收到直播间分享消息时执行回调
+ ///
+ public void IfShareMsg(Action action) => IfTypedMsg(PackMsgType.直播间分享, action);
+
+ ///
+ /// 当收到下播消息
+ ///
+ public void IfLiveEndMsg(Action action) => IfTypedMsg(PackMsgType.下播, action);
+
+ ///
+ /// 解析所有未知类型的消息
+ ///
+ public void IfAnyMsg(Action action)
+ {
+ // 将 Data 转换为 JObject
+ JObject jObject = null;
+ try
+ {
+ jObject = JObject.Parse(this.Data);
+ }
+ catch (Exception)
+ {
+ // 解析失败,忽略错误
+ return;
+ }
+
+ // 如果成功解析为 JObject,转换为 Msg 对象
+ if (jObject != null)
+ {
+ var msg = jObject.ToObject();
+ if (msg != null)
+ {
+ action(msg);
+ }
+ }
+ }
+
+ ///
+ /// 泛型方法,根据 PackMsgType 解析消息对象并执行回调
+ ///
+ private void IfTypedMsg(PackMsgType expectedType, Action action) where T : Msg
+ {
+ if (this.Type != expectedType) return;
+ if (this.Data == null) return;
+
+ // 尝试将 Data 直接作为 T 类型使用
+ T msg = null;
+
+ try
+ {
+ // 如果 Data 是字符串类型
+ if (this.Data is string)
+ {
+ // 先尝试解析为 JObject
+ try
+ {
+ JObject jObject = JObject.Parse(this.Data);
+ msg = jObject.ToObject();
+ }
+ catch
+ {
+ // 如果解析 JObject 失败,尝试直接反序列化
+ msg = JsonConvert.DeserializeObject(this.Data);
+ }
+ }
+ }
+ catch (Exception)
+ {
+ // 解析失败,忽略错误
+ }
+
+ // 如果成功解析消息,执行回调
+ if (msg != null)
+ {
+ action(msg);
+ }
+ }
}
///
@@ -114,7 +232,8 @@ namespace BarrageGrab.Modles.JsonEntity
///
/// 主播简要信息
///
- public RoomAnchorInfo Onwer { get; set; }
+ public RoomAnchorInfo Owner { get; set; }
+ public string Onwer { get; set; } = "该字段存在拼写错误,请修正为 ‘Owner’ 后使用";
///
/// 消息内容
@@ -131,6 +250,16 @@ namespace BarrageGrab.Modles.JsonEntity
///
public string WebRoomId { get; set; }
+ ///
+ /// 房间标题
+ ///
+ public string RoomTitle { get; set; }
+
+ ///
+ /// 是否是匿名直播间
+ ///
+ public bool IsAnonymous { get; set; }
+
///
/// 用户使用的 Appid ,已知 1128,8663,2329 等
///