@@ -28,11 +28,40 @@ public static bool SendGlobal([NotNull] Player player, [NotNull] string rawMessa
2828 if ( player == null ) throw new ArgumentNullException ( "player" ) ;
2929 if ( rawMessage == null ) throw new ArgumentNullException ( "rawMessage" ) ;
3030
31- if ( ! player . IsStaff ) {
31+ rawMessage = Filter ( rawMessage , player ) ;
32+ if ( rawMessage == null ) return false ;
33+
34+ var recipientList = Server . Players . NotIgnoring ( player ) ;
35+
36+ string formattedMessage = string . Format ( "{0}&F: {1}" ,
37+ player . ClassyName ,
38+ rawMessage ) ;
39+
40+ var e = new ChatSendingEventArgs ( player ,
41+ rawMessage ,
42+ formattedMessage ,
43+ ChatMessageType . Global ,
44+ recipientList ) ;
45+
46+
47+ if ( ! SendInternal ( e ) ) return false ;
48+
49+ Scheduler . NewTask ( t => getUrls ( rawMessage ) ) . RunOnce ( ) ;
50+
51+ rawMessage = Color . StripColors ( rawMessage , false ) ;
52+ checkBotResponses ( player , rawMessage ) ;
53+
54+ Logger . Log ( LogType . GlobalChat ,
55+ "(global){0}: {1}" , player . Info . Rank . Color + player . Name + Color . White , rawMessage ) ;
56+ return true ;
57+ }
58+
59+ public static string Filter ( string rawMessage , Player player ) {
60+ if ( player != null && ! player . IsStaff ) {
3261 if ( player . LastMessage == new string ( rawMessage . ToLower ( ) . Where ( c => ! char . IsWhiteSpace ( c ) ) . ToArray ( ) ) ) {
3362 if ( player . MessageSpam >= 2 ) {
3463 player . Message ( "Please refrain from repeating yourself!" ) ;
35- return false ;
64+ return null ;
3665 }
3766 player . MessageSpam ++ ;
3867 } else {
@@ -46,16 +75,19 @@ public static bool SendGlobal([NotNull] Player player, [NotNull] string rawMessa
4675 rawMessage = rawMessage . ReplaceString ( Swear . Word , Swear . Replacement , StringComparison . InvariantCultureIgnoreCase ) ;
4776 }
4877 }
49- if ( ! player . IsStaff ) {
78+ if ( player == null || ! player . IsStaff ) {
5079 rawMessage = RegexIPMatcher . Replace ( rawMessage , "<Redacted IP>" ) ;
5180 }
81+ if ( player == null ) return rawMessage ; // Checks below only work in-game
82+
5283 if ( rawMessage . Length >= 10 && player . Info . Rank . MaxCaps > 0 ) {
5384 int caps = 0 ;
5485 for ( int i = 0 ; i < rawMessage . Length ; i ++ ) {
5586 if ( char . IsUpper ( rawMessage [ i ] ) ) {
5687 caps ++ ;
5788 }
5889 }
90+
5991 if ( player . Info . Rank . MaxCaps == 1 ) {
6092 if ( caps > ( rawMessage . Length / 2 ) ) {
6193 rawMessage = rawMessage . ToLower ( ) . UppercaseFirst ( ) ;
@@ -66,35 +98,13 @@ public static bool SendGlobal([NotNull] Player player, [NotNull] string rawMessa
6698 player . Message ( "Max uppercase letters reached. Message set to lowercase" ) ;
6799 }
68100 }
101+
69102 if ( player . ChatRainbows ) {
70103 rawMessage = Colorize ( rawMessage , RainbowChars ) ;
71104 } else if ( player . ChatBWRainbows ) {
72105 rawMessage = Colorize ( rawMessage , BWRainbowChars ) ;
73106 }
74-
75- var recipientList = Server . Players . NotIgnoring ( player ) ;
76-
77- string formattedMessage = string . Format ( "{0}&F: {1}" ,
78- player . ClassyName ,
79- rawMessage ) ;
80-
81- var e = new ChatSendingEventArgs ( player ,
82- rawMessage ,
83- formattedMessage ,
84- ChatMessageType . Global ,
85- recipientList ) ;
86-
87-
88- if ( ! SendInternal ( e ) ) return false ;
89-
90- Scheduler . NewTask ( t => getUrls ( rawMessage ) ) . RunOnce ( ) ;
91-
92- rawMessage = Color . StripColors ( rawMessage , false ) ;
93- checkBotResponses ( player , rawMessage ) ;
94-
95- Logger . Log ( LogType . GlobalChat ,
96- "(global){0}: {1}" , player . Info . Rank . Color + player . Name + Color . White , rawMessage ) ;
97- return true ;
107+ return rawMessage ;
98108 }
99109
100110 public static void getUrls ( string rawMessage ) {
0 commit comments