@@ -10,7 +10,8 @@ public class SpamServCommand : ICommand
1010 public ( bool handled , string response ) Process ( BotContext ctx , string senderNick , string message , string fullLine )
1111 {
1212 if ( ! message . StartsWith ( "!badwords" ) && ! message . StartsWith ( "!addbadword" ) &&
13- ! message . StartsWith ( "!delbadword" ) )
13+ ! message . StartsWith ( "!delbadword" ) && ! message . StartsWith ( "!wordban" ) &&
14+ ! message . StartsWith ( "!unwordban" ) && ! message . StartsWith ( "!wordlist" ) )
1415 return ( false , null ) ;
1516
1617 if ( ! ctx . Admins . Contains ( senderNick ) )
@@ -25,6 +26,46 @@ public class SpamServCommand : ICommand
2526 if ( message . StartsWith ( "!delbadword" ) )
2627 return HandleDelBadWord ( ctx , senderNick , message ) ;
2728
29+ if ( message . StartsWith ( "!wordban" ) )
30+ return HandleWordBan ( ctx , senderNick , message ) ;
31+
32+ if ( message . StartsWith ( "!unwordban" ) )
33+ return HandleUnwordBan ( ctx , senderNick , message ) ;
34+
35+ if ( message . StartsWith ( "!wordlist" ) )
36+ return HandleWordList ( ctx , senderNick , false ) ;
37+
38+ return ( false , null ) ;
39+ }
40+
41+ public ( bool handled , string response ) ProcessDiscord ( BotContext ctx , string senderNick , string message )
42+ {
43+ if ( ! message . StartsWith ( "!badwords" ) && ! message . StartsWith ( "!addbadword" ) &&
44+ ! message . StartsWith ( "!delbadword" ) && ! message . StartsWith ( "!wordban" ) &&
45+ ! message . StartsWith ( "!unwordban" ) && ! message . StartsWith ( "!wordlist" ) )
46+ return ( false , null ) ;
47+
48+ if ( ! ctx . Admins . Contains ( senderNick ) )
49+ return ( true , "You must be an admin to use SpamServ commands." ) ;
50+
51+ if ( message . StartsWith ( "!badwords" ) )
52+ return HandleBadWordsList ( ctx , senderNick ) ;
53+
54+ if ( message . StartsWith ( "!addbadword" ) )
55+ return HandleAddBadWord ( ctx , senderNick , message ) ;
56+
57+ if ( message . StartsWith ( "!delbadword" ) )
58+ return HandleDelBadWord ( ctx , senderNick , message ) ;
59+
60+ if ( message . StartsWith ( "!wordban" ) )
61+ return HandleWordBan ( ctx , senderNick , message ) ;
62+
63+ if ( message . StartsWith ( "!unwordban" ) )
64+ return HandleUnwordBan ( ctx , senderNick , message ) ;
65+
66+ if ( message . StartsWith ( "!wordlist" ) )
67+ return HandleWordList ( ctx , senderNick , true ) ;
68+
2869 return ( false , null ) ;
2970 }
3071
@@ -35,6 +76,16 @@ public class SpamServCommand : ICommand
3576 return ( false , null ) ;
3677 }
3778
79+ private ( bool , string ) HandleWordList ( BotContext ctx , string senderNick , bool isDiscord )
80+ {
81+ string commandId = $ "wordlist_{ DateTime . UtcNow . Ticks } _{ senderNick } ";
82+ ctx . CurrentServiceRequestId = commandId ;
83+ ctx . TrackServiceRequest ( commandId , senderNick , isDiscord ) ;
84+ ctx . Writer ? . WriteLine ( $ "PRIVMSG SpamServ :listbadwords { ctx . Channel } ") ;
85+ ctx . Logger ? . Log ( $ "[SPAMSERV] { senderNick } requested badwords list for { ctx . Channel } (ID: { commandId } )") ;
86+ return ( false , null ) ;
87+ }
88+
3889 private ( bool , string ) HandleAddBadWord ( BotContext ctx , string senderNick , string message )
3990 {
4091 var parts = message . Split ( ' ' , StringSplitOptions . RemoveEmptyEntries ) ;
@@ -61,6 +112,36 @@ public class SpamServCommand : ICommand
61112 ctx . Logger ? . Log ( $ "[SPAMSERV] { senderNick } removed bad word '{ word } ' from { ctx . Channel } ") ;
62113 return ( false , null ) ;
63114 }
115+
116+ private ( bool , string ) HandleWordBan ( BotContext ctx , string senderNick , string message )
117+ {
118+ var parts = message . Split ( ' ' , StringSplitOptions . RemoveEmptyEntries ) ;
119+ if ( parts . Length < 2 )
120+ return ( true , "Usage: !wordban <word> [reason]" ) ;
121+
122+ string word = parts [ 1 ] ;
123+ string reason = parts . Length > 2 ? string . Join ( " " , parts . Skip ( 2 ) ) : "Spam" ;
124+
125+ string wildcardWord = $ "*{ word } *";
126+ ctx . Writer ? . WriteLine ( $ "PRIVMSG SpamServ :addbadword { ctx . Channel } { wildcardWord } { reason } ") ;
127+ ctx . Logger ? . Log ( $ "[SPAMSERV] { senderNick } word-banned '{ word } ' in { ctx . Channel } ") ;
128+ return ( false , null ) ;
129+ }
130+
131+ private ( bool , string ) HandleUnwordBan ( BotContext ctx , string senderNick , string message )
132+ {
133+ var parts = message . Split ( ' ' , StringSplitOptions . RemoveEmptyEntries ) ;
134+ if ( parts . Length < 2 )
135+ return ( true , "Usage: !unwordban <word>" ) ;
136+
137+ string word = parts [ 1 ] ;
138+ string wildcardWord = $ "*{ word } *";
139+
140+ ctx . Writer ? . WriteLine ( $ "PRIVMSG SpamServ :delbadword { ctx . Channel } { wildcardWord } ") ;
141+ ctx . Logger ? . Log ( $ "[SPAMSERV] { senderNick } removed word ban for '{ word } ' in { ctx . Channel } ") ;
142+ return ( false , null ) ;
143+ }
64144 }
65145}
66146
147+
0 commit comments