Example #1
0
 private void Messages_UnreadUpdated(object sender, MessagesUpdateEventArgs e)
 {
     try
     {
         foreach (var message in e.NewMessages)
         {
             MessageHandlers.ForEach(c =>
             {
                 if (c.Process(message))
                 {
                 }
             });
         }
     }
     catch (RedditGatewayTimeoutException exception)
     {
         _logger.Error(exception, $"Exception caught in {nameof(Messages_UnreadUpdated)}. Redoing event and continuing...");
         Account.Messages.InboxUpdated -= Messages_UnreadUpdated;
         SubscribeToMessageFeed();
     }
     catch (RedditServiceUnavailableException exception)
     {
         _logger.Error(exception, $"Exception caught in {nameof(Messages_UnreadUpdated)}. Redoing event and continuing...");
         Account.Messages.InboxUpdated -= Messages_UnreadUpdated;
         SubscribeToMessageFeed();
     }
     catch (Exception exception)
     {
         _logger.Error(exception, $"Unexpected exception caught in {nameof(Messages_UnreadUpdated)}");
     }
 }
Example #2
0
        // Callback function that's triggered whenever one or more new messages come in.  --Kris
        private void C_UnreadMessagesUpdated(object sender, MessagesUpdateEventArgs e)
        {
            if (e.NewMessages.Count > 0)
            {
                // Mark all messages as read now so they don't come up multiple times.  --Kris
                Reddit.Account.Messages.MarkAllRead();

                foreach (Message message in e.NewMessages)
                {
                    // If author has an active session, reply to the content.  Otherwise, respond with greeting.  --Kris
                    string response;
                    if (!ActiveSessions.ContainsKey(message.Author))
                    {
                        ActiveSessions.Add(message.Author, DateTime.Now);
                        response = Eliza.Session.GetGreeting();  // These greetings are really generic so feel free to replace this with your own custom greeting string.  --Kris
                    }
                    else
                    {
                        if (message.Body.Contains("bye", StringComparison.OrdinalIgnoreCase) ||
                            message.Body.Contains("farewell", StringComparison.OrdinalIgnoreCase) ||
                            message.Body.Equals("exit", StringComparison.OrdinalIgnoreCase) ||
                            message.Body.Equals("quit", StringComparison.OrdinalIgnoreCase))
                        {
                            ActiveSessions.Remove(message.Author);
                        }

                        response = Eliza.GetResponse(message.Body);
                    }

                    // Send the Reddit response.  --Kris
                    Reddit.Account.Messages.Compose(message.Author, message.Subject, response);
                }
            }
        }
Example #3
0
        private void MonitorPrivateMessagesThread(string key, string type, int startDelayMs = 0, int?monitoringDelayMs = null)
        {
            if (startDelayMs > 0)
            {
                Thread.Sleep(startDelayMs);
            }

            monitoringDelayMs = (monitoringDelayMs.HasValue ? monitoringDelayMs : Monitoring.Count() * MonitoringWaitDelayMS);

            while (!Terminate &&
                   Monitoring.Get(key).Contains("PrivateMessages"))
            {
                List <Message> oldList;
                List <Message> newList;
                switch (type)
                {
                default:
                    throw new RedditControllerException("Unrecognized type '" + type + "'.");

                case "inbox":
                    oldList = inbox;
                    newList = GetMessagesInbox();
                    break;

                case "unread":
                    oldList = unread;
                    newList = GetMessagesUnread();
                    break;

                case "sent":
                    oldList = sent;
                    newList = GetMessagesSent();
                    break;
                }

                if (Lists.ListDiff(oldList, newList, out List <Message> added, out List <Message> removed))
                {
                    // Event handler to alert the calling app that the list has changed.  --Kris
                    MessagesUpdateEventArgs args = new MessagesUpdateEventArgs
                    {
                        NewMessages = newList,
                        OldMessages = oldList,
                        Added       = added,
                        Removed     = removed
                    };
                    TriggerUpdate(args, type);
                }

                Thread.Sleep(monitoringDelayMs.Value);
            }
        }
Example #4
0
        protected void TriggerUpdate(MessagesUpdateEventArgs args, string type)
        {
            switch (type)
            {
            case "inbox":
                OnInboxUpdated(args);
                break;

            case "unread":
                OnUnreadUpdated(args);
                break;

            case "sent":
                OnSentUpdated(args);
                break;
            }
        }
Example #5
0
        public async Task OnUnreadMessagesUpdated(object sender, MessagesUpdateEventArgs e)
        {
            if (NoMessagesInEvent(e))
            {
                return;
            }

            foreach (var message in e.NewMessages)
            {
                if (MessageIsUsernameMention(message))
                {
                    try
                    {
                        await RotateAndUploadVideo(message);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Failed to process video rotation sequence: {ex}");
                    }
                }

                MarkMessageAsRead(message);
            }
        }
 private void C_UnreadMessagesUpdated(object sender, MessagesUpdateEventArgs e)
 {
     E = e;
 }
Example #7
0
 protected virtual void OnSentUpdated(MessagesUpdateEventArgs e)
 {
     SentUpdated?.Invoke(this, e);
 }
Example #8
0
 protected virtual void OnUnreadUpdated(MessagesUpdateEventArgs e)
 {
     UnreadUpdated?.Invoke(this, e);
 }
        private void MonitorPrivateMessagesThread(string key, string type, int startDelayMs = 0, int?monitoringDelayMs = null)
        {
            if (startDelayMs > 0)
            {
                Thread.Sleep(startDelayMs);
            }

            monitoringDelayMs = (monitoringDelayMs.HasValue ? monitoringDelayMs : Monitoring.Count() * MonitoringWaitDelayMS);

            while (!Terminate &&
                   Monitoring.Get(key).Contains("PrivateMessages"))
            {
                if (MonitoringExpiration.HasValue &&
                    DateTime.Now > MonitoringExpiration.Value)
                {
                    MonitorModel.RemoveMonitoringKey(key, "PrivateMessages", ref Monitoring);
                    Threads.Remove(key);

                    break;
                }

                while (!IsScheduled())
                {
                    if (Terminate)
                    {
                        break;
                    }

                    Thread.Sleep(15000);
                }

                if (Terminate)
                {
                    break;
                }

                List <Message> oldList;
                List <Message> newList;
                try
                {
                    switch (type)
                    {
                    default:
                        throw new RedditControllerException("Unrecognized type '" + type + "'.");

                    case "inbox":
                        oldList = inbox;
                        newList = GetMessagesInbox();
                        break;

                    case "unread":
                        oldList = unread;
                        newList = GetMessagesUnread();
                        break;

                    case "sent":
                        oldList = sent;
                        newList = GetMessagesSent();
                        break;
                    }

                    if (Lists.ListDiff(oldList, newList, out List <Message> added, out List <Message> removed))
                    {
                        // Event handler to alert the calling app that the list has changed.  --Kris
                        MessagesUpdateEventArgs args = new MessagesUpdateEventArgs
                        {
                            NewMessages = newList,
                            OldMessages = oldList,
                            Added       = added,
                            Removed     = removed
                        };
                        TriggerUpdate(args, type);
                    }
                }
                catch (Exception) when(!BreakOnFailure)
                {
                }

                Wait(monitoringDelayMs.Value);
            }
        }
 private void InvokeUnreadUpdatedEvent(object sender, MessagesUpdateEventArgs e)
 {
     UnreadUpdated.Invoke(sender, e);
 }
Example #11
0
 private static bool NoMessagesInEvent(MessagesUpdateEventArgs e)
 {
     return(e == null || e.NewMessages == null);
 }
        public async Task GivenRedditMessageHandler_WhenOnUnreadMessagesUpdatedIsCalledWithNoValidUsernameMentions_ThenNoUsernameMentionsWereHandled(MessagesUpdateEventArgs messagesUpdateEventArgs)
        {
            // Act
            await _redditMessageHandler.OnUnreadMessagesUpdated(new object(), messagesUpdateEventArgs);

            // Assert
            A.CallTo(() => _fakeRedditClientWrapper.ReadMessage(A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _fakeRedditClientWrapper.ReplyToComment(A <string> ._, A <string> ._)).MustNotHaveHappened();
        }