/// <summary> /// Adds a new filter. /// </summary> /// <param name="filterType">Type of filter to be added based on FilterType enum.</param> /// <param name="lastMassage">Message to get the filter from.</param> private void AddFilter(Storage.ChatFilters.FilterType filterType, ChatMessage lastMassage) { lastMassage.Message = lastMassage.Message.StripSingleWord(); if (lastMassage.Message == "") { ChannelInstance.SendChatMessageResponse(lastMassage, "Filter can not be empty!"); return; } //This is important, since we don't want regexes that fail to compile in memory try { Regex testRegex = new Regex(lastMassage.Message); } catch { ChannelInstance.SendChatMessageResponse(lastMassage, "Failed to compile regex!"); return; } switch (filterType) { case (Storage.ChatFilters.FilterType.Purge): { var newFilter = lastMassage.Message; Filters.PurgeFilters.Add(new Storage.ChatFilter(newFilter, "", 1)); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Added! You can update it further using command: !chatfilter update purge last Response:\"Custom response\""); } break; case (Storage.ChatFilters.FilterType.Timeout): { var newFilter = lastMassage.Message; Filters.TimeOutFilter.Add(new Storage.ChatFilter(newFilter, "", 1)); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Added! You can update it further using command: !chatfilter update timeout last Response:\"Custom response\", Duration:\"Lenght\""); } break; case (Storage.ChatFilters.FilterType.Ban): { var newFilter = lastMassage.Message; Filters.BanFilters.Add(new Storage.ChatFilter(newFilter, "", 1)); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Added! You can update it further using command: !chatfilter update ban last Response:\"Custom response\""); } break; } }
/// <summary> /// Removes the filter using a given ID. /// </summary> /// <param name="filterType">Type of filter to be removed based on FilterType enum.</param> /// <param name="lastMassage">Message from which to get id from.</param> private void RemoveFilter(Storage.ChatFilters.FilterType filterType, ChatMessage lastMassage) { lastMassage.Message = lastMassage.Message.StripSingleWord(); if (lastMassage.Message == "") { ChannelInstance.SendChatMessageResponse(lastMassage, "ID can not be empty!"); return; } else if (lastMassage.Message.StartsWithLazy("last")) { lastMassage.Message = lastMassage.Message.StripSingleWord(); switch (filterType) { case (Storage.ChatFilters.FilterType.Purge): { if (Filters.PurgeFilters.Count > 0) { Filters.PurgeFilters.RemoveAt(Filters.PurgeFilters.Count - 1); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Removed last purge filter."); } else { ChannelInstance.SendChatMessageResponse(lastMassage, "There are no purge filters definied."); } } break; case (Storage.ChatFilters.FilterType.Timeout): { if (Filters.TimeOutFilter.Count > 0) { Filters.TimeOutFilter.RemoveAt(Filters.TimeOutFilter.Count - 1); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Removed last timeout filter."); } else { ChannelInstance.SendChatMessageResponse(lastMassage, "There are no timeout filters definied."); } } break; case (Storage.ChatFilters.FilterType.Ban): { if (Filters.BanFilters.Count > 0) { Filters.BanFilters.RemoveAt(Filters.BanFilters.Count - 1); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Removed last ban filter."); } else { ChannelInstance.SendChatMessageResponse(lastMassage, "There are no ban filters definied."); } } break; } } else { if (int.TryParse(lastMassage.Message, out int id)) { if (id < 0) { ChannelInstance.SendChatMessageResponse(lastMassage, "ID can not be negative!"); } else { switch (filterType) { case (Storage.ChatFilters.FilterType.Purge): { if (id >= Filters.PurgeFilters.Count) { ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("ID was higher than a total number of Purge Filters ({0})", Filters.PurgeFilters.Count - 1)); } else { Filters.PurgeFilters.RemoveAt(id); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("Removed purge filter {0}", id)); } } break; case (Storage.ChatFilters.FilterType.Timeout): { if (id >= Filters.TimeOutFilter.Count) { ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("ID was higher than a total number of Purge Filters ({0})", Filters.TimeOutFilter.Count - 1)); } else { Filters.TimeOutFilter.RemoveAt(id); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("Removed timeout filter {0}", id)); } } break; case (Storage.ChatFilters.FilterType.Ban): { if (id >= Filters.BanFilters.Count) { ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("ID was higher than a total number of Purge Filters ({0})", Filters.BanFilters.Count - 1)); } else { Filters.BanFilters.RemoveAt(id); Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("Removed ban filter {0}", id)); } } break; } } } else { ChannelInstance.SendChatMessageResponse(lastMassage, "Failed to parse ID."); } } }
/// <summary> /// Updates a filter with Response and Duration for timeout. /// </summary> /// <param name="filterType">Type of filter to be added based on FilterType enum.</param> /// <param name="lastMassage">Message from which to get Response and Duration from.</param> private void UpdateFilter(Storage.ChatFilters.FilterType filterType, ChatMessage lastMassage) { lastMassage.Message = lastMassage.Message.StripSingleWord(); if (lastMassage.Message == "") { ChannelInstance.SendChatMessageResponse(lastMassage, "ID can not be empty!"); return; } else if (lastMassage.Message.StartsWithLazy("last")) { lastMassage.Message = lastMassage.Message.StripSingleWord(); switch (filterType) { case (Storage.ChatFilters.FilterType.Purge): { if (Filters.PurgeFilters.Count > 0) { AdvancedFilters(lastMassage.Message, out string Response, out _); var filter = Filters.PurgeFilters.Last(); filter.Duration = 1; filter.Response = Response; Filters.PurgeFilters[Filters.PurgeFilters.Count - 1] = filter; Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Updated purge filter with response: " + Response); } else { ChannelInstance.SendChatMessageResponse(lastMassage, "There are no purge filters definied."); } } break; case (Storage.ChatFilters.FilterType.Timeout): { if (Filters.TimeOutFilter.Count > 0) { AdvancedFilters(lastMassage.Message, out string Response, out uint Lenght); var filter = Filters.TimeOutFilter.Last(); filter.Duration = Lenght; filter.Response = Response; Filters.TimeOutFilter[Filters.TimeOutFilter.Count - 1] = filter; Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Updated timeout filter with duration of " + Lenght.ToString() + " seconds and response: " + Response); } else { ChannelInstance.SendChatMessageResponse(lastMassage, "There are no timeout filters definied."); } } break; case (Storage.ChatFilters.FilterType.Ban): { if (Filters.BanFilters.Count > 0) { AdvancedFilters(lastMassage.Message, out string Response, out _); var filter = Filters.BanFilters.Last(); filter.Duration = 1; filter.Response = Response; Filters.BanFilters[Filters.BanFilters.Count - 1] = filter; Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, "Updated ban filter with response: " + Response); } else { ChannelInstance.SendChatMessageResponse(lastMassage, "There are no ban filters definied."); } } break; } } else { if (lastMassage.Message.Contains(" ")) { var idAsString = lastMassage.Message.Split(new char[] { ' ' }); if (int.TryParse(idAsString[0], out int id)) { if (id < 0) { ChannelInstance.SendChatMessageResponse(lastMassage, "ID can not be negative!"); } else { switch (filterType) { case (Storage.ChatFilters.FilterType.Purge): { if (id >= Filters.PurgeFilters.Count) { ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("ID was higher than a current last ID of Purge Filters ({0})", Filters.PurgeFilters.Count - 1)); } else { AdvancedFilters(lastMassage.Message, out string responseText, out _); var filter = Filters.PurgeFilters[id]; filter.Duration = 1; filter.Response = responseText; Filters.PurgeFilters[id] = filter; Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("Updated purge filter {0} with a response: {1}", id, responseText)); } } break; case (Storage.ChatFilters.FilterType.Timeout): { if (id >= Filters.TimeOutFilter.Count) { ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("ID was higher than a current last ID of Timeout Filters ({0})", Filters.TimeOutFilter.Count - 1)); } else { AdvancedFilters(lastMassage.Message, out string responseText, out uint lenght); var filter = Filters.TimeOutFilter[id]; filter.Duration = lenght; filter.Response = responseText; Filters.TimeOutFilter[id] = filter; Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("Updated timeout filter {0} with duration of {1} and response: {2}", id, lenght, responseText)); } } break; case (Storage.ChatFilters.FilterType.Ban): { if (id >= Filters.BanFilters.Count) { ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("ID was higher than a current last ID of Ban Filters ({0})", Filters.BanFilters.Count - 1)); } else { AdvancedFilters(lastMassage.Message, out string responseText, out _); var filter = Filters.BanFilters[id]; filter.Duration = 1; filter.Response = responseText; Filters.BanFilters[id] = filter; Filters.Save(); ChannelInstance.SendChatMessageResponse(lastMassage, string.Format("Updated ban filter {0} with a response: {1}", id, responseText)); } } break; } } } else { ChannelInstance.SendChatMessageResponse(lastMassage, "Failed to parse ID."); return; } } else { ChannelInstance.SendChatMessageResponse(lastMassage, "No ID provided. Use !chatfilter update <type> <id> response:\"Custom response\", [duration:\"Time\"]"); return; } } }