コード例 #1
0
ファイル: CQCodeUtil.cs プロジェクト: DeepOceanSoft/Sora
    /// <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());
    }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: SegmentHelper.cs プロジェクト: DeepOceanSoft/Sora
 /// <summary>
 /// 生成AT 消息段
 /// </summary>
 /// <param name="uid">uid</param>
 public static SoraSegment ToAt(this int uid)
 {
     return(SoraSegment.At(uid));
 }
コード例 #4
0
 /// <summary>
 /// 获取At消息段
 /// </summary>
 /// <returns>
 /// <see cref="SoraSegment"/> AT
 /// </returns>
 public SoraSegment At()
 {
     return(SoraSegment.At(Id));
 }