protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { string memberId = turnContext.Activity.Recipient.Id; string[] message = turnContext.Activity.Text.Split(' ').Select(a => a.ToLower()).ToArray(); switch (message[0].ToLower()) { case "/subscribe": if (message.Length == 1) { await turnContext.SendActivityAsync(MessageFactory.Text("Please type /subscribe and Name of subreddit after space"), cancellationToken); break; } if (!RedditSubscription.RedditHot.IsKeyCorrect(message[1])) { await turnContext.SendActivityAsync(MessageFactory.Text ("Please take existing SubReddit (NOTE: maybe you typed \"r\\*subreddit_name*\" instead of \"*subreddit*\"?")); break; } if (!DBOperations.DoesSubExist(memberId, "RedditHot", message[1])) { DBOperations.AddSub(memberId, "RedditHot", message[1]); } else { await turnContext.SendActivityAsync(MessageFactory.Text("You're already subscribed, retart")); } break; case "/unsubscribe": if (message.Length == 1) { await turnContext.SendActivityAsync(MessageFactory.Text("Please type /unsubscribe and Name of subreddit after space"), cancellationToken); break; } if (DBOperations.DoesSubExist(memberId, "RedditHot", message[1])) { DBOperations.RemoveSub(memberId, "RedditHot", message[1]); } break; default: var replyText = "I'm the f*****g bot. I can't talk with you, sorry"; await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken); break; } if (isLoopStarted) { return; } isLoopStarted = true; while (true) { var sub = DBOperations.GetSubWithZeroPriority(memberId); if (sub == null) { continue; } var subName = sub.Subscription; var subKey = sub.SubscriptionKey; if (subName == "RedditHot") { var subreddit = RedditSubscription.RedditHot; var content = subreddit.Content(subKey).First(content => !DBOperations.HaveUserSeenContent(memberId, content.UniqueID)); string text = subKey + ": " + content.ToMessage; await turnContext.SendActivityAsync(MessageFactory.Text(text), cancellationToken); DBOperations.AddSeenContent(memberId, content.UniqueID); DBOperations.ShiftPriority(memberId); Thread.Sleep(5000); } } }