/// <summary> /// 移除消息中的 <see cref="Quote"/> 元素 /// </summary> /// <param name="message">消息</param> private static ComplexMessage RemoveQuote(ComplexMessage message) { message = new ComplexMessage(message ?? throw new ArgumentNullException(nameof(message))); message.RemoveAll(x => x is Quote); return(message); }
/// <inheritdoc/> public static ComplexMessage operator +(ComplexMessage left, ComplexMessage right) { var complexMessage = new ComplexMessage(left); complexMessage.AddRange(right); return(complexMessage); }
/// <inheritdoc/> public static ComplexMessage operator +(MessageElement left, ComplexMessage right) { var complexMessage = new ComplexMessage(right); complexMessage.Insert(0, left); return(complexMessage); }
/// <summary> /// 异步发送消息到当前 <see cref="Chat"/> 实例 /// </summary> /// <param name="message">要发送的消息</param> /// <returns>所发送消息的 <see cref="Message"/> 实例</returns> public async Task <Message> SendAsync(ComplexMessage message) { message = message ?? throw new ArgumentNullException(nameof(message)); var result = JObject.Parse((await InternalSendAsync(RemoveQuote(message).ToArray(), GetQuote(message))).CheckError()); return(new Message(Session, GetSource(result.Value <int>("messageId")), message)); }
/// <inheritdoc/> public static ComplexMessage operator +(ComplexMessage left, MessageElement right) { var complexMessage = new ComplexMessage(left) { right }; return(complexMessage); }
/// <summary> /// 获取所发送消息的引用 /// </summary> /// <param name="message">消息</param> /// <returns>所发送消息需引用的消息 ID</returns> private static int?GetQuote(ComplexMessage message) { message = message ?? throw new ArgumentNullException(nameof(message)); try { var quote = message.OfType <Quote>().SingleOrDefault(); return(quote?.Message.Id); } catch (InvalidOperationException) { throw new MessageFormatException(nameof(Quote)); } }
/// <summary> /// 创建 <see cref="Message"/> 实例 /// </summary> /// <param name="session">指定 <see cref="Message"/> 实例所使用的 Session</param> /// <param name="content">指定 <see cref="Message"/> 实例的完整内容</param> internal Message(Session session, List <MessageElement> content) : base(session) { content = content ?? throw new ArgumentNullException(nameof(content)); var sources = content.OfType <Source>(); try { Source = sources.SingleOrDefault() ?? throw new MessageFormatException(nameof(Messaging.Source)); } catch (InvalidOperationException) { throw new MessageFormatException(nameof(Messaging.Source)); } Content = new ComplexMessage(content.Except(sources)); FullContent = new ComplexMessage(content); }
/// <summary> /// 回复当前 <see cref="MessageReceivedEventArgs"/> 实例 /// </summary> /// <param name="e">指定 <see cref="MessageReceivedEventArgs"/> 实例</param> /// <param name="message">要发送的消息</param> /// <returns>所发送消息的 <see cref="Message"/> 实例</returns> public static Task <Message> ReplyAsync(this MessageReceivedEventArgs e, ComplexMessage message) => e?.Source.SendAsync(GetReplyMessage(e, message ?? throw new ArgumentNullException(nameof(message)))) ?? throw new ArgumentNullException(nameof(e));
/// <summary> /// 创建 <see cref="Message"/> 实例 /// </summary> /// <param name="session">指定 <see cref="Message"/> 实例所使用的 Session</param> /// <param name="source">指定 <see cref="Message"/> 实例的来源</param> /// <param name="content">指定 <see cref="Message"/> 实例的内容</param> internal Message(Session session, Source source, ComplexMessage content) : base(session) { Source = source ?? throw new ArgumentNullException(nameof(source)); Content = content ?? throw new ArgumentNullException(nameof(content)); FullContent = Source + Content; }