Advertisement
horato

regex

Mar 30th, 2015
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.75 KB | None | 0 0
  1. // sql
  2. new SQLiteCommand("CREATE TABLE filters (word TEXT PRIMARY KEY, isRegex BOOL DEFAULT false);", dbConnection).ExecuteNonQuery();
  3.  
  4. // filter list grid
  5. <Grid x:Name="SettingsGrid" Margin="-10,48,10,162" Visibility="Hidden">
  6. <Button Content="Close" HorizontalAlignment="Left" Height="32" Margin="457,360,0,0" VerticalAlignment="Top" Width="166" Click="CloseSettingsButton_OnClick"/>
  7. <DataGrid x:Name="FilterListDataGrid" HorizontalAlignment="Left" CanUserAddRows="False" AutoGenerateColumns="False" Height="283" Margin="70,72,0,0" VerticalAlignment="Top" Width="553" MouseDoubleClick="FilterListDataGrid_OnMouseDoubleClick">
  8. <DataGrid.Columns>
  9. <DataGridTextColumn Header="Word" Binding="{Binding Path=word}" Width="240" IsReadOnly="True"/>
  10. <DataGridTextColumn Header="is Regex" Binding="{Binding Path=isRegex}" Width="*" IsReadOnly="True"/>
  11. </DataGrid.Columns>
  12. </DataGrid>
  13. <Button Content="Add" HorizontalAlignment="Left" Margin="70,360,0,0" VerticalAlignment="Top" Width="88" Height="32" Click="AddFilterButton_Click"/>
  14. </Grid>
  15.  
  16. // class representing each filtered word
  17. public class FilterItem
  18. {
  19. public string word { get; set; }
  20. public bool isRegex { get; set; }
  21. }
  22.  
  23. // methods
  24. private List<FilterItem> filters;
  25.  
  26.  
  27. private void AddFilterButton_Click(object sender, RoutedEventArgs e)
  28. {
  29. SettingsGrid.Opacity = 0.5;
  30. SettingsGrid.IsEnabled = false;
  31. var dialog = new AddDialog();
  32. dialog.AddButton.Click += (a, b) =>
  33. {
  34. if (string.IsNullOrWhiteSpace(dialog.FilterWordBox.Text) ||
  35. string.IsNullOrWhiteSpace(dialog.DurationBox.Text))
  36. return;
  37. OverlayContainer.Visibility = Visibility.Hidden;
  38. SettingsGrid.Opacity = 1;
  39. filters.Add(new FilterItem { word = dialog.FilterWordBox.Text, duration = dialog.DurationBox.Text, addedBy = "AdminConsole", isRegex = (bool)dialog.IsRegexCheckBox.IsChecked });
  40. 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();
  41. drawFilters();
  42. SettingsGrid.IsEnabled = true;
  43. };
  44. dialog.CancelButton.Click += (a, b) =>
  45. {
  46. OverlayContainer.Visibility = Visibility.Hidden;
  47. SettingsGrid.Opacity = 1;
  48. SettingsGrid.IsEnabled = true;
  49. };
  50. OverlayContainer.Content = dialog;
  51. OverlayContainer.Visibility = Visibility.Visible;
  52. }
  53.  
  54. private void drawFilters()
  55. {
  56. FilterListDataGrid.Items.Clear();
  57. foreach (FilterItem item in filters)
  58. FilterListDataGrid.Items.Add(item);
  59. }
  60.  
  61. private void FilterListDataGrid_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
  62. {
  63. if (!(sender is DataGrid))
  64. return;
  65.  
  66. var dg = (DataGrid)sender;
  67. var filterItem = dg.SelectedItem as FilterItem;
  68. if (filterItem == null)
  69. return;
  70.  
  71. if (Prompt.Ask("Do you wish to delete " + filterItem.word + "?", "Delete"))
  72. {
  73. filters.RemoveAll(x => x.word == filterItem.word);
  74. new SQLiteCommand("DELETE FROM filters WHERE word==\"" + filterItem.word + "\";", dbConnection).ExecuteNonQuery();
  75. drawFilters();
  76. }
  77. }
  78. //addDialog xaml
  79. <UserControl x:Class="RoxorBot.AddDialog"
  80. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  81. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  82. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  83. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  84. mc:Ignorable="d" d:DesignWidth="300" Height="226.866">
  85. <Grid Background="LightBlue">
  86. <Label Content="Filter Word" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="280"/>
  87. <TextBox x:Name="FilterWordBox" HorizontalAlignment="Left" Height="32" Margin="10,46,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="280"/>
  88. <Button x:Name="CancelButton" Content="Cancel" HorizontalAlignment="Left" Height="36" Margin="175,181,0,0" VerticalAlignment="Top" Width="115"/>
  89. <Button x:Name="AddButton" Content="Add" HorizontalAlignment="Left" Height="36" Margin="10,181,0,0" VerticalAlignment="Top" Width="115"/>
  90. <CheckBox x:Name="IsRegexCheckBox" Content="Regex" HorizontalAlignment="Left" Height="19" Margin="225,151,0,0" VerticalAlignment="Top" Width="65"/>
  91. </Grid>
  92. </UserControl>
  93.  
  94. //Prompt.Ask
  95. using System.Windows.Forms;
  96.  
  97. public static bool Ask(string text, string caption)
  98. {
  99. DialogResult result = MessageBox.Show(text,caption,MessageBoxButtons.YesNo);
  100. return (result == DialogResult.Yes);
  101. }
  102.  
  103.  
  104.  
  105. //usage:
  106. private bool checkFilter(IrcRawMessageEventArgs e)
  107. {
  108. // e.Message.Parameters[1] == incoming message text
  109. var exists = filters.Any(x => e.Message.Parameters[1].ToLower().Contains(x.word.ToLower()));
  110. if (!exists)
  111. {
  112. var temp = filters.FindAll(x => x.isRegex);
  113. foreach (var filter in temp)
  114. if (Regex.IsMatch(e.Message.Parameters[1], filter.word))
  115. exists = true;
  116. }
  117. return exists;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement