Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // sql
- new SQLiteCommand("CREATE TABLE filters (word TEXT PRIMARY KEY, isRegex BOOL DEFAULT false);", dbConnection).ExecuteNonQuery();
- // filter list grid
- <Grid x:Name="SettingsGrid" Margin="-10,48,10,162" Visibility="Hidden">
- <Button Content="Close" HorizontalAlignment="Left" Height="32" Margin="457,360,0,0" VerticalAlignment="Top" Width="166" Click="CloseSettingsButton_OnClick"/>
- <DataGrid x:Name="FilterListDataGrid" HorizontalAlignment="Left" CanUserAddRows="False" AutoGenerateColumns="False" Height="283" Margin="70,72,0,0" VerticalAlignment="Top" Width="553" MouseDoubleClick="FilterListDataGrid_OnMouseDoubleClick">
- <DataGrid.Columns>
- <DataGridTextColumn Header="Word" Binding="{Binding Path=word}" Width="240" IsReadOnly="True"/>
- <DataGridTextColumn Header="is Regex" Binding="{Binding Path=isRegex}" Width="*" IsReadOnly="True"/>
- </DataGrid.Columns>
- </DataGrid>
- <Button Content="Add" HorizontalAlignment="Left" Margin="70,360,0,0" VerticalAlignment="Top" Width="88" Height="32" Click="AddFilterButton_Click"/>
- </Grid>
- // class representing each filtered word
- public class FilterItem
- {
- public string word { get; set; }
- public bool isRegex { get; set; }
- }
- // methods
- private List<FilterItem> filters;
- private void AddFilterButton_Click(object sender, RoutedEventArgs e)
- {
- SettingsGrid.Opacity = 0.5;
- SettingsGrid.IsEnabled = false;
- var dialog = new AddDialog();
- dialog.AddButton.Click += (a, b) =>
- {
- if (string.IsNullOrWhiteSpace(dialog.FilterWordBox.Text) ||
- string.IsNullOrWhiteSpace(dialog.DurationBox.Text))
- return;
- OverlayContainer.Visibility = Visibility.Hidden;
- SettingsGrid.Opacity = 1;
- filters.Add(new FilterItem { word = dialog.FilterWordBox.Text, duration = dialog.DurationBox.Text, addedBy = "AdminConsole", isRegex = (bool)dialog.IsRegexCheckBox.IsChecked });
- new SQLiteCommand("INSERT OR REPLACE INTO filters (word, duration, addedBy, isRegex) VALUES (\"" + dialog.FilterWordBox.Text + "\",\"" + dialog.DurationBox.Text + "\", \"AdminConsole\", " + ((bool)dialog.IsRegexCheckBox.IsChecked ? "1" : "0") + ");", dbConnection).ExecuteNonQuery();
- drawFilters();
- SettingsGrid.IsEnabled = true;
- };
- dialog.CancelButton.Click += (a, b) =>
- {
- OverlayContainer.Visibility = Visibility.Hidden;
- SettingsGrid.Opacity = 1;
- SettingsGrid.IsEnabled = true;
- };
- OverlayContainer.Content = dialog;
- OverlayContainer.Visibility = Visibility.Visible;
- }
- private void drawFilters()
- {
- FilterListDataGrid.Items.Clear();
- foreach (FilterItem item in filters)
- FilterListDataGrid.Items.Add(item);
- }
- private void FilterListDataGrid_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
- {
- if (!(sender is DataGrid))
- return;
- var dg = (DataGrid)sender;
- var filterItem = dg.SelectedItem as FilterItem;
- if (filterItem == null)
- return;
- if (Prompt.Ask("Do you wish to delete " + filterItem.word + "?", "Delete"))
- {
- filters.RemoveAll(x => x.word == filterItem.word);
- new SQLiteCommand("DELETE FROM filters WHERE word==\"" + filterItem.word + "\";", dbConnection).ExecuteNonQuery();
- drawFilters();
- }
- }
- //addDialog xaml
- <UserControl x:Class="RoxorBot.AddDialog"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- mc:Ignorable="d" d:DesignWidth="300" Height="226.866">
- <Grid Background="LightBlue">
- <Label Content="Filter Word" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="280"/>
- <TextBox x:Name="FilterWordBox" HorizontalAlignment="Left" Height="32" Margin="10,46,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="280"/>
- <Button x:Name="CancelButton" Content="Cancel" HorizontalAlignment="Left" Height="36" Margin="175,181,0,0" VerticalAlignment="Top" Width="115"/>
- <Button x:Name="AddButton" Content="Add" HorizontalAlignment="Left" Height="36" Margin="10,181,0,0" VerticalAlignment="Top" Width="115"/>
- <CheckBox x:Name="IsRegexCheckBox" Content="Regex" HorizontalAlignment="Left" Height="19" Margin="225,151,0,0" VerticalAlignment="Top" Width="65"/>
- </Grid>
- </UserControl>
- //Prompt.Ask
- using System.Windows.Forms;
- public static bool Ask(string text, string caption)
- {
- DialogResult result = MessageBox.Show(text,caption,MessageBoxButtons.YesNo);
- return (result == DialogResult.Yes);
- }
- //usage:
- private bool checkFilter(IrcRawMessageEventArgs e)
- {
- // e.Message.Parameters[1] == incoming message text
- var exists = filters.Any(x => e.Message.Parameters[1].ToLower().Contains(x.word.ToLower()));
- if (!exists)
- {
- var temp = filters.FindAll(x => x.isRegex);
- foreach (var filter in temp)
- if (Regex.IsMatch(e.Message.Parameters[1], filter.word))
- exists = true;
- }
- return exists;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement