コード例 #1
0
ファイル: JabbrListenerWorker.cs プロジェクト: anurse/NuBot
 void _client_MessageReceived(Message message, string room)
 {
     _robo.Bus.Send(new RawChatMessage(
         message.User.Name,
         room,
         message.When,
         message.Id,
         message.Content, 
         String.Equals(message.User.Name, _userName, StringComparison.OrdinalIgnoreCase),
         new[] { _userName }));
 }
コード例 #2
0
        public Task ProcessMessageAsync(string room, Message message)
        {
            var task = new Task<ChatMessageViewModel>(() =>
            {
                ChatMessageViewModel msgVm = CreateMessageViewModel(message);
                return msgVm;
            });

            task.ContinueWith(completedTask => OnMessageProcessed(completedTask.Result, room),
                              TaskContinuationOptions.OnlyOnRanToCompletion);
            task.ContinueWith(ProcessTaskExceptions, TaskContinuationOptions.OnlyOnFaulted);

            task.Start();
            return task;
        }
コード例 #3
0
        private void ProcessMessage(JabbR.Client.Models.Message message, string room)
        {
#if DEBUG
            Console.WriteLine("{0} {1} {2}", room, message.Content, message.User.Name);
            if (message.User.Name != Name)
            {
                Send("Received " + message.Content + " from " + message.User.Name + " in " + room, room);
            }
#endif
            Task.Factory.StartNew(() =>
            {
                string content = message.Content;
                string name    = message.User.Name;

                // Ignore replies from self
                if (name.Equals(Name, StringComparison.OrdinalIgnoreCase))
                {
                    return;
                }
                if (MessageReceived != null)
                {
                    MessageReceived(message, room);
                }

                ChatMessage chatMessage = new ChatMessage(message.Content, message.User.Name, room);

                bool handled = false;

                handled = HandleMessageWithSprockets(chatMessage, handled);

                if (!handled)
                {
                    ProcessUnhandledMessage(chatMessage);
                }
            })
            .ContinueWith(task =>
            {
                // Just write to debug output if it failed
                if (task.IsFaulted)
                {
                    Debug.WriteLine("JABBOT: Failed to process messages. {0}", task.Exception.GetBaseException());
                    Send("JABBOT: Failed to process messages:" + task.Exception.GetBaseException().ToString(), room);
                    new LogEvent(task.Exception.GetBaseException().ToString()).Raise();
                }
            });
        }
コード例 #4
0
        private ChatMessageViewModel CreateMessageViewModel(Message message)
        {
            string content = ProcessEmoji(message.Content);
            var msgVm = _serviceLocator.GetViewModel<ChatMessageViewModel>();
            UserViewModel userVm = _userService.GetUserViewModel(message.User);

            msgVm.IsNotifying = false;

            msgVm.RawContent = message.Content;
            msgVm.MessageDateTime = message.When.LocalDateTime;
            msgVm.MessageId = message.Id;
            msgVm.RichContent = ConvertToXaml(content);
            msgVm.User = userVm;

            msgVm.IsNotifying = true;

            return msgVm;
        }
コード例 #5
0
 public ChatMessageViewModel ProcessMessage(Message message)
 {
     return CreateMessageViewModel(message);
 }
コード例 #6
0
 private void OnMessageReceived(Message message, string room)
 {
     ProcessMessageAsync(room, message);
 }
コード例 #7
0
ファイル: Bot-OLD.cs プロジェクト: bdacode/TwitterBot
        public void ProcessMessage(Message message, string room)
        {
            // Run this on another thread since the signalr client doesn't like it
            // when we spend a long time processing messages synchronously
            Task.Factory.StartNew(() =>
            {
                string content = message.Content;
                string name = message.User.Name;

                // Ignore replies from self
                if (name.Equals(Name, StringComparison.OrdinalIgnoreCase))
                {
                    return;
                }

                // We're going to process commands for the bot here
                var chatMessage = new ChatMessage(WebUtility.HtmlDecode(content), name, room);

                if (MessageReceived != null)
                {
                    MessageReceived(chatMessage);
                }

                bool handled = false;

                // Loop over the registered sprockets
                foreach (var handler in _sprockets)
                {
                    // Stop at the first one that handled the message
                    if (handler.Handle(chatMessage, this))
                    {
                        handled = true;
                        break;
                    }
                }

                if (!handled)
                {
                    // Loop over the unhandled message sprockets
                    foreach (var handler in _unhandledMessageSprockets)
                    {
                        // Stop at the first one that handled the message
                        if (handler.Handle(chatMessage, this))
                        {
                            break;
                        }
                    }

                }
            })
            .ContinueWith(task =>
            {
                // Just write to debug output if it failed
                if (task.IsFaulted)
                {
                    Debug.WriteLine("JABBOT: Failed to process messages. {0}", task.Exception.GetBaseException());
                }
            });
        }
コード例 #8
0
        void OnMessageReceived(Message message, string room)
        {
            Trace.Call(message, room);

            var chat = GetChat(room, ChatType.Group) ?? ProtocolChat;
            AddMessage(chat, message);
        }
コード例 #9
0
        void AddMessage(ChatModel chat, Message msg)
        {
            if (chat == null) {
                throw new ArgumentNullException("chat");
            }
            if (msg == null) {
                throw new ArgumentNullException("msg");
            }

            string content = msg.Content;
            string name = msg.User.Name;

            var builder = CreateMessageBuilder<JabbrMessageBuilder>();
            if (msg.When != default(DateTimeOffset)) {
                builder.TimeStamp = msg.When.UtcDateTime;
            }
            var sender = name == Username ? Me : CreatePerson(name);
            builder.AppendSenderPrefix(sender);
            builder.AppendMessage(content);
            if (sender != Me) {
                builder.MarkHighlights();
            }
            var message = builder.ToMessage();
            Session.AddMessageToChat(chat, message);

            if (sender == Me) {
                // server echos our sent messages for us
                OnMessageSent(
                    new MessageEventArgs(chat, message, null, chat.ID)
                );
            } else {
                OnMessageReceived(
                    new MessageEventArgs(chat, message, name, chat.ID)
                );
            }
        }
コード例 #10
0
ファイル: JabbrProtocolManager.cs プロジェクト: RAOF/smuxi
        void AddMessage(ChatModel chat, Message msg)
        {
            if (chat == null) {
                throw new ArgumentNullException("chat");
            }
            if (msg == null) {
                throw new ArgumentNullException("msg");
            }

            string content = msg.Content;
            string name = msg.User.Name;

            var builder = CreateMessageBuilder<JabbrMessageBuilder>();
            if (msg.When != default(DateTimeOffset)) {
                builder.TimeStamp = msg.When.UtcDateTime;
            }
            var sender = name == Username ? Me : CreatePerson(name);
            builder.AppendSenderPrefix(sender);
            builder.AppendMessage(content);
            if (sender != Me) {
                builder.MarkHighlights();
            }
            Session.AddMessageToChat(chat, builder.ToMessage());
        }
コード例 #11
0
 public JabbrMessageReceivedMessage(object sender, JabbrConnection jabbr, JabbR.Client.Models.Message message, string roomName)
     : base(sender, jabbr)
 {
     this.Message  = message;
     this.RoomName = roomName;
 }
コード例 #12
0
ファイル: Bot.cs プロジェクト: sethwebster/Jabbot
        private void ProcessMessage(JabbR.Client.Models.Message message, string room)
        {
            // Ignore replies from self
            if (message.User.Name.Equals(Name, StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            if (message.Content.Equals("enabledebug"))
            {
                _debugMode = true;
            }
            if (message.Content.Equals("disabledebug"))
            {
                _debugMode = false;
            }
            WriteDebugInfo(string.Format("{0} {1} {2}", room, message.Content, message.User.Name));

            if (message.User.Name != Name)
            {
                WriteDebugInfo("Received " + message.Content + " from " + message.User.Name + " in " + room);
            }
            Task.Factory.StartNew(() =>
            {
                WriteDebugInfo("Message Processing Task Started");
                string content = message.Content;
                string name    = message.User.Name;

                WriteDebugInfo("Content: " + content + " from " + name);

                if (MessageReceived != null)
                {
                    MessageReceived(message, room);
                }

                ChatMessage chatMessage = new ChatMessage(message.Content, message.User.Name, room);

                bool handled = false;

                WriteDebugInfo("Handling Message with Sprockets");
                handled = HandleMessageWithSprockets(chatMessage, handled);

                WriteDebugInfo("Handling complete: " + handled);
                if (!handled)
                {
                    WriteDebugInfo("Unhandled Message Handling");
                    ProcessUnhandledMessage(chatMessage);
                    WriteDebugInfo("Unhandled Complete");
                }
            })
            .ContinueWith(task =>
            {
                // Just write to debug output if it failed
                if (task.IsFaulted)
                {
                    Debug.WriteLine("JABBOT: Failed to process messages. {0}", task.Exception.GetBaseException());
                    Send("JABBOT: Failed to process messages:" + task.Exception.GetBaseException().ToString(), room);
                    WriteDebugInfo(task.Exception.GetBaseException().ToString());
                }
            });
        }
コード例 #13
0
 void HandleMessageReceived(JabbR.Client.Models.Message message, string roomName)
 {
     Log("MessageReceived> " + message.User.Name + ": " + message.Content + " -> " + roomName);
     _messenger.Publish(new JabbrMessageReceivedMessage(this, this, message, roomName));
 }
コード例 #14
0
ファイル: Robot.cs プロジェクト: xt0rted/JibbR
        private void ClientOnMessageReceived(Message message, string room)
        {
            // we never want to respond to ourself...
            if (string.Equals(message.User.Name, Name, StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            Console.WriteLine("message received");
            var match = Regex.Match(message.Content, string.Format(@"^(?<name>@?{0}\b)\s+(?<message>\b.*\b)", Name), DefaultRegexOptions);

            ISession session = new Session(message, Name);

            Dictionary<string, MessageHandler> handlers;
            string messageBody;
            if (match.Success)
            {
                handlers = _responderHandlers;
                messageBody = match.ValueFor("message");
            }
            else
            {
                handlers = _listenerHandlers;
                messageBody = message.Content;
            }

            foreach (var handler in handlers)
            {
                var result = HandleCommand(session, messageBody, room, handler.Key, handler.Value);
                if (result)
                {
                    break;
                }
            }
        }
コード例 #15
0
 public MessageViewModel(JabbR.Client.Models.Message message) : base()
 {
     Message = message;
 }
コード例 #16
0
ファイル: Session.cs プロジェクト: xt0rted/JibbR
 public Session(Message message, string botName)
 {
     Message = message;
     BotName = botName;
 }