/// <summary> /// 序列化某一个酷Q码 /// </summary> /// <param name="msg"></param> /// <returns></returns> public static string SerializeSegment(this SoraSegment msg) { if (msg.MessageType == SegmentType.Text) { return(((TextSegment)msg.Data).Content.CQCodeEncode()); } var ret = new StringBuilder(); ret.Append("[CQ:"); //CQ码类型 string typeName = Helper.GetFieldDesc(msg.MessageType); if (string.IsNullOrEmpty(typeName)) { return(string.Empty); } ret.Append(typeName); BaseSegment data = msg.Data; Type dataType = data.GetType(); PropertyInfo[] dataFields = dataType.GetProperties(); foreach (PropertyInfo field in dataFields) { List <JsonPropertyAttribute> jsonPropertyArr = field.GetCustomAttributes <JsonPropertyAttribute>(true).ToList(); if (jsonPropertyArr.Count != 1) { continue; } JsonPropertyAttribute jsonProperty = jsonPropertyArr.First(); string key = jsonProperty.PropertyName; object propData = field.GetValue(data); if (string.IsNullOrWhiteSpace(key) || propData == null) { continue; } string value = propData.GetType().IsEnum ? Helper.GetFieldDesc(propData) : (propData.ToString() ?? "").CQCodeEncode(true); ret.Append(',').Append(key).Append('=').Append(value); } ret.Append(']'); return(ret.ToString()); }
public static MessageBody ToCqHttpMessages(this IGreenOnionsMessages greenOnionsMessage, int?RelpyId) { MessageBody cqHttpMessages = new MessageBody(); if (greenOnionsMessage.Reply && RelpyId != null) { cqHttpMessages.Add(SoraSegment.Reply(RelpyId.Value)); } for (int i = 0; i < greenOnionsMessage.Count; i++) { if (greenOnionsMessage[i] is IGreenOnionsTextMessage txtMsg) { cqHttpMessages.Add(SoraSegment.Text(txtMsg.Text)); } else if (greenOnionsMessage[i] is IGreenOnionsImageMessage imgMsg) { string data = string.IsNullOrEmpty(imgMsg.Url) ? ("base64://" + imgMsg.Base64Str) : imgMsg.Url; cqHttpMessages.Add(SoraSegment.Image(data)); } else if (greenOnionsMessage[i] is IGreenOnionsAtMessage atMsg) { if (atMsg.AtId == -1) { cqHttpMessages.Add(SoraSegment.AtAll()); } else { cqHttpMessages.Add(SoraSegment.At(atMsg.AtId)); } } else if (greenOnionsMessage[i] is IGreenOnionsForwardMessage forwardMsg) { for (int j = 0; j < forwardMsg.ItemMessages.Count; j++) { cqHttpMessages.AddRange(ToCqHttpMessages(forwardMsg.ItemMessages[i].itemMessage, RelpyId)); } } } return(cqHttpMessages); }
/// <summary> /// 生成AT 消息段 /// </summary> /// <param name="uid">uid</param> public static SoraSegment ToAt(this int uid) { return(SoraSegment.At(uid)); }
/// <summary> /// 获取At消息段 /// </summary> /// <returns> /// <see cref="SoraSegment"/> AT /// </returns> public SoraSegment At() { return(SoraSegment.At(Id)); }