/// <summary> /// build a image chat message /// </summary> /// <param name="imageName">image file name</param> /// <param name="mime">mime type.such as image/png</param> /// <param name="width">image display width</param> /// <param name="height">image display height</param> /// <param name="imageBase64">iamge with base64 encode</param> /// <param name="text">text message with the image</param> /// <returns>image chat message</returns> public static ChatMessage BuildImageMessage(string imageName, string mime, int width, int height, string imageBase64, string text = " ") { var msg = new ChatMessage(); msg.Text = text; msg.Ent = new List <EntMessage>(); msg.Fmt = new List <FmtMessage>(); msg.Ent.Add(new EntMessage() { Tp = "IM", Data = new EntData() { Mime = mime, Width = width, Height = height, Name = imageName, Val = imageBase64, } }); msg.Fmt.Add(new FmtMessage() { At = text.Length, Len = 1, Key = 0, }); if (text.Contains("\n")) { for (int i = 0; i < text.Length; i++) { if (text[i] == '\n') { FmtMessage fmt = new FmtMessage() { At = i, Tp = "BR", Len = 1 }; msg.Fmt.Add(fmt); } } } return(msg); }
/// <summary> /// build a attachment message /// </summary> /// <param name="attachmentInfo">attachment file information, you can get it with ChatBot.Upload(...)</param> /// <param name="text">text message with the attachment</param> /// <returns>attachment chat message</returns> public static ChatMessage BuildAttachmentMessage(UploadedAttachmentInfo attachmentInfo, string text = " ") { var msg = new ChatMessage(); msg.Text = text; msg.Ent = new List <EntMessage>(); msg.Fmt = new List <FmtMessage>(); msg.Ent.Add(new EntMessage() { Tp = "EX", Data = new EntData() { Mime = attachmentInfo.Mime, Name = attachmentInfo.FileName, Ref = attachmentInfo.RelativeUrl, Size = int.Parse(attachmentInfo.Size.ToString()), } }); msg.Fmt.Add(new FmtMessage() { At = text.Length, Len = 1, Key = 0, }); if (text.Contains("\n")) { for (int i = 0; i < text.Length; i++) { if (text[i] == '\n') { FmtMessage fmt = new FmtMessage() { At = i, Tp = "BR", Len = 1 }; msg.Fmt.Add(fmt); } } } return(msg); }
/// <summary> /// build a file chat message /// </summary> /// <param name="fileName">file name</param> /// <param name="mime">mime type, such as text/plain</param> /// <param name="contentBase64">file with base64 encode</param> /// <param name="text">text messaage with the file</param> /// <returns>file chat message</returns> public static ChatMessage BuildFileMessage(string fileName, string mime, string contentBase64, string text = " ") { var msg = new ChatMessage(); msg.Text = text; msg.Ent = new List <EntMessage>(); msg.Fmt = new List <FmtMessage>(); msg.Ent.Add(new EntMessage() { Tp = "EX", Data = new EntData() { Mime = mime, Name = fileName, Val = contentBase64, } }); msg.Fmt.Add(new FmtMessage() { At = text.Length, Len = 0, Key = 0, }); if (text.Contains("\n")) { for (int i = 0; i < text.Length; i++) { if (text[i] == '\n') { FmtMessage fmt = new FmtMessage() { At = i, Tp = "BR", Len = 1 }; msg.Fmt.Add(fmt); } } } return(msg); }
/// <summary> /// build text chat message with formatted /// </summary> /// <param name="text">text message</param> /// <returns>text chat message</returns> public static ChatMessage BuildTextMessage(string text = " ") { var msg = new ChatMessage(); msg.Text = text; msg.Ent = new List <EntMessage>(); msg.Fmt = new List <FmtMessage>(); if (text.Contains("\n")) { for (int i = 0; i < text.Length; i++) { if (text[i] == '\n') { FmtMessage fmt = new FmtMessage() { At = i, Tp = "BR", Len = 1 }; msg.Fmt.Add(fmt); } } } return(msg); }
/// <summary> /// Append text message to build message /// </summary> /// <param name="text">text message</param> /// <param name="isBold">if text should bold style</param> /// <param name="isItalic">if text should italic style</param> /// <param name="isDeleted">if text should deleted style</param> /// <param name="isCode">if text is code like data</param> /// <param name="isLink">if text is link</param> /// <param name="isMention">if text is mention user, should contains '@', for example: @tinode</param> /// <param name="isHashTag">if text is hashtags, should contains '#',for example: #tinode</param> /// <param name="isForm">if text is form</param> /// <param name="isButton">if text is button</param> /// <param name="buttonDataName">button name</param> /// <param name="buttonDataAct">button act</param> /// <param name="buttonDataVal">button val</param> public void AppendText(string text, bool isBold = false, bool isItalic = false, bool isDeleted = false , bool isCode = false, bool isLink = false, bool isMention = false, bool isHashTag = false, bool isForm = false, bool isButton = false, string buttonDataName = null, string buttonDataAct = "pub", string buttonDataVal = null) { int baseLen = Message.Text.Length; Message.Text += text; if (text.Contains("\n")) { for (int i = 0; i < text.Length; i++) { if (text[i] == '\n') { FmtMessage fmt = new FmtMessage() { At = baseLen + i, Tp = "BR", Len = 1 }; Message.Fmt.Add(fmt); } } } var leftLen = baseLen + (text.Length - text.TrimStart().Length); var subLen = text.Length - text.TrimEnd().Length; var validLen = Message.Text.Length - leftLen - subLen; if (isBold) { FmtMessage fmt = new FmtMessage() { Tp = "ST", At = leftLen, Len = validLen }; Message.Fmt.Add(fmt); } if (isItalic) { FmtMessage fmt = new FmtMessage() { Tp = "EM", At = leftLen, Len = validLen }; Message.Fmt.Add(fmt); } if (isDeleted) { FmtMessage fmt = new FmtMessage() { Tp = "DL", At = leftLen, Len = validLen }; Message.Fmt.Add(fmt); } if (isCode) { FmtMessage fmt = new FmtMessage() { Tp = "CO", At = leftLen, Len = validLen }; Message.Fmt.Add(fmt); } if (isLink) { FmtMessage fmt = new FmtMessage() { At = leftLen, Len = validLen, Key = Message.Ent.Count }; Message.Fmt.Add(fmt); var url = text.Trim().ToLower(); if (!url.StartsWith("http://") && !url.StartsWith("https://")) { url = $"http://{text.Trim()}"; } EntMessage ent = new EntMessage() { Tp = "LN", Data = new EntData() { Url = url } }; Message.Ent.Add(ent); } if (isMention) { FmtMessage fmt = new FmtMessage() { At = leftLen, Len = validLen, Key = Message.Ent.Count }; Message.Fmt.Add(fmt); var mentionName = text.Trim().Substring(1); EntMessage ent = new EntMessage() { Tp = "MN", Data = new EntData() { Val = mentionName } }; Message.Ent.Add(ent); } if (isHashTag) { FmtMessage fmt = new FmtMessage() { At = leftLen, Len = validLen, Key = Message.Ent.Count }; Message.Fmt.Add(fmt); var hashTag = text.Trim(); EntMessage ent = new EntMessage() { Tp = "HT", Data = new EntData() { Val = hashTag } }; Message.Ent.Add(ent); } if (isForm) { FmtMessage fmt = new FmtMessage() { At = leftLen, Len = validLen, Tp = "FM" }; Message.Fmt.Add(fmt); } if (isButton) { var btnName = buttonDataName; if (btnName == null) { buttonDataName = text.Trim().ToLower(); } FmtMessage fmt = new FmtMessage() { At = leftLen, Len = validLen, Key = Message.Ent.Count }; Message.Fmt.Add(fmt); var btnText = text.Trim(); EntMessage ent = new EntMessage() { Tp = "BN", Data = new EntData() { Name = buttonDataName, Act = buttonDataAct, Val = buttonDataVal } }; Message.Ent.Add(ent); } }