private IEnumerable <ResponseMessage> HandleUpdateSubscription(IncomingMessage incomingMessage) { if ( incomingMessage.RawText.ToLower().StartsWith("updatesubscribe:")) { var updateJson = incomingMessage.RawText.Substring("updatesubscribe:".Length); var update = JObject.Parse(updateJson).ToObject <UpdateSubscription>(); update.Id = Guid.NewGuid().ToString(); update.WebhookUrl = update.WebhookUrl.Trim('<', '>'); UpdateSubscriptions.Add(update); _jsonStoragePlugin.SaveFile("subscriptions", UpdateSubscriptions.ToArray()); yield return(incomingMessage.ReplyDirectlyToUser( $"Subscription added with id `{update.Id}` {Environment.NewLine}" + $"You may unsubscribe by sending `updateunsubscribe:{update.Id}` to me in DM")); } if ( incomingMessage.RawText.ToLower().StartsWith("updateunsubscribe:")) { var id = incomingMessage.RawText.Substring("updateunsubscribe:".Length).Trim(); var index = UpdateSubscriptions.FindIndex(subscription => subscription.Id == id); if (index >= 0) { UpdateSubscriptions.RemoveAt(index); _jsonStoragePlugin.SaveFile("subscriptions", UpdateSubscriptions.ToArray()); yield return(incomingMessage.ReplyDirectlyToUser($"Subscription removed")); } else { yield return(incomingMessage.ReplyDirectlyToUser($"Subscription was not found,")); } } }
private IEnumerable <ResponseMessage> DiscourseSearch(IncomingMessage incomingMessage, IValidHandle validHandle) { var genericAnswerKeywords = new List <string>() { "question", "i have a question", "i need help" }; if (genericAnswerKeywords.Contains(incomingMessage.RawText.ToLower())) { yield return(incomingMessage.IndicateTypingOnChannel()); _statsPlugin.IncrementState("Helper:BlindlyHelped"); yield return(incomingMessage.ReplyToChannel( $"Perhaps you should look at https://nbitstack.com/c/btcpayserver and see if there is already an answer for you there, @{incomingMessage.Username}")); } var discourseSearchKeywords = new List <string>() { "how can i", "i need help with" }; if (discourseSearchKeywords.Any(s => incomingMessage.RawText.ToLower().StartsWith(s.ToLower()))) { var discourseUrl = "https://nbitstack.com"; var searchText = incomingMessage.RawText; discourseSearchKeywords.ForEach(s => { searchText = searchText.Replace(s, ""); }); yield return(incomingMessage.IndicateTypingOnChannel()); var message = $"Maybe this can help: {discourseUrl}/search?q={Url.Encode(searchText.Trim())}"; _statsPlugin.IncrementState("RedirectedToDiscourseSearch:Count"); yield return(incomingMessage.ReplyToChannel(message)); } var bcashKeywords = new List <string>() { "bcash", "bitcoin cash", "tell me a joke" }; if (bcashKeywords.Contains(incomingMessage.RawText.ToLower())) { yield return(incomingMessage.IndicateTypingOnChannel()); _statsPlugin.IncrementState("Jokes:Told"); yield return(incomingMessage.ReplyToChannel(jokes[_r.Next(0, jokes.Count)].Content)); } if (incomingMessage.RawText.ToLower().StartsWith("addjoke:")) { var joke = incomingMessage.RawText.Substring("addjoke:".Length); jokes.Add(new Joke() { Content = joke }); _jsonStoragePlugin.SaveFile("jokes", jokes.ToArray()); yield return(incomingMessage.ReplyDirectlyToUser("joke added!")); } if (incomingMessage.RawText.ToLower().StartsWith("removejoke:")) { var joke = incomingMessage.RawText.Substring("removejoke:".Length); if (jokes.Any(joke1 => joke == joke1.Content)) { var jokeIndex = jokes.FindIndex(joke1 => joke == joke1.Content); jokes.RemoveAt(jokeIndex); _jsonStoragePlugin.SaveFile("jokes", jokes.ToArray()); yield return(incomingMessage.ReplyDirectlyToUser("joke removed!")); } } }