Example #1
0
        /// <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);
        }
Example #2
0
        /// <inheritdoc/>
        public static ComplexMessage operator +(ComplexMessage left, ComplexMessage right)
        {
            var complexMessage = new ComplexMessage(left);

            complexMessage.AddRange(right);

            return(complexMessage);
        }
Example #3
0
        /// <inheritdoc/>
        public static ComplexMessage operator +(MessageElement left, ComplexMessage right)
        {
            var complexMessage = new ComplexMessage(right);

            complexMessage.Insert(0, left);

            return(complexMessage);
        }
Example #4
0
        /// <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));
        }
Example #5
0
        /// <inheritdoc/>
        public static ComplexMessage operator +(ComplexMessage left, MessageElement right)
        {
            var complexMessage = new ComplexMessage(left)
            {
                right
            };

            return(complexMessage);
        }
Example #6
0
        /// <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));
            }
        }
Example #7
0
        /// <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);
        }
Example #8
0
 /// <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));
Example #9
0
 /// <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;
 }