66import java .net .MalformedURLException ;
77import java .net .URL ;
88import java .util .logging .Level ;
9+ import org .bukkit .command .Command ;
10+ import org .bukkit .command .CommandSender ;
11+ import org .bukkit .entity .Player ;
912import org .bukkit .event .EventHandler ;
1013import org .bukkit .event .Listener ;
1114import org .bukkit .event .player .AsyncPlayerChatEvent ;
1720
1821public class Slack extends JavaPlugin implements Listener {
1922
20- private boolean setWebhook ;
23+ private boolean n ;
2124
2225 @ Override
2326 public void onEnable () {
2427 getLogger ().info ("Slack has been enabled." );
2528 getServer ().getPluginManager ().registerEvents (this , this );
26- this . saveDefaultConfig ( );
27- setWebhook = ! getConfig ().getString ("webhook" ).equals ("https://hooks.slack.com/services/" );
28- if (! setWebhook ) {
29+ updateConfig ( "1.2.0" );
30+ n = getConfig ().getString ("webhook" ).equals ("https://hooks.slack.com/services/" );
31+ if (n ) {
2932 getLogger ().severe ("You have not set your webhook URL in the config!" );
3033 }
3134 }
@@ -37,35 +40,70 @@ public void onDisable() {
3740
3841 @ EventHandler
3942 public void onChat (AsyncPlayerChatEvent event ) {
40- payload ('"' + event .getMessage () + '"' , event .getPlayer ().getName ());
43+ if (permCheck ("slack.hide.chat" , event .getPlayer ())) {
44+ payload ('"' + event .getMessage () + '"' , event .getPlayer ().getName ());
45+ }
4146 }
4247
4348 @ EventHandler
4449 public void onLogin (PlayerLoginEvent event ) {
45- payload ("logged in" , event .getPlayer ().getName ());
50+ if (permCheck ("slack.hide.logout" , event .getPlayer ())) {
51+ payload ("logged in" , event .getPlayer ().getName ());
52+ }
4653 }
4754
4855 @ EventHandler
4956 public void onQuit (PlayerQuitEvent event ) {
50- payload ("logged out" , event .getPlayer ().getName ());
57+ if (permCheck ("slack.hide.logout" , event .getPlayer ())) {
58+ payload ("logged out" , event .getPlayer ().getName ());
59+ }
5160 }
5261
5362 @ EventHandler
5463 public void onCommand (PlayerCommandPreprocessEvent event ) {
55- payload (event .getMessage (), event .getPlayer ().getName ());
64+ if (blacklist (event .getMessage ()) && permCheck ("slack.hide.command" , event .getPlayer ())) {
65+ payload (event .getMessage (), event .getPlayer ().getName ());
66+ }
5667 }
5768
58- public void payload (String m , String p ) {
69+ /**
70+ * Send a message to Slack.
71+ * @param m The message sent to Slack.
72+ * @param p The name of the sender of the message sent to Slack.
73+ * @return True if the message was successfully sent to Slack.
74+ */
75+ public boolean payload (String m , String p ) {
5976 JSONObject j = new JSONObject ();
60- j .put ("text" , m );
77+ j .put ("text" , p + ": " + m );
6178 j .put ("username" , p );
62- j .put ("icon_url" , "https://minotar.net/avatar /" + p + "/100.png" );
79+ j .put ("icon_url" , "https://cravatar.eu/helmhead /" + p + "/100.png" );
6380 String b = "payload=" + j .toJSONString ();
64- post (b );
81+ return post (b );
82+ }
83+
84+ /**
85+ * Send a message to Slack with a custom user icon.
86+ * @param m The message sent to Slack.
87+ * @param p The name of the sender of the message sent to Slack.
88+ * @param i The URL of an image of the sender of the message sent to Slack. (recommended for non player messages).
89+ * @return True if the message was successfully sent to Slack.
90+ */
91+ public boolean payload (String m , String p , String i ) {
92+ if (permCheck ("slack.hide.*" , getServer ().getPlayer (p ))) {
93+ JSONObject j = new JSONObject ();
94+ j .put ("text" , p + ": " + m );
95+ j .put ("username" , p );
96+ j .put ("icon_url" , i );
97+ String b = "payload=" + j .toJSONString ();
98+ return post (b );
99+ } else {
100+ return false ;
101+ }
65102 }
66103
67- public void post (String b ) {
68- if (!setWebhook ) {
104+ private boolean post (String b ) {
105+ int i = 0 ;
106+ if (n ) {
69107 getLogger ().severe ("You have not set your webhook URL in the config!" );
70108 } else {
71109 try {
@@ -77,7 +115,7 @@ public void post(String b) {
77115 B .write (b .getBytes ("utf8" ));
78116 B .flush ();
79117 }
80- int i = C .getResponseCode ();
118+ i = C .getResponseCode ();
81119 String o = Integer .toString (i );
82120 String c = C .getResponseMessage ();
83121 getLogger ().log (Level .INFO , "{0} {1}" , new Object []{o , c });
@@ -88,5 +126,36 @@ public void post(String b) {
88126 getLogger ().log (Level .SEVERE , "IO exception: " , e );
89127 }
90128 }
129+ return i == 200 ;
130+ }
131+
132+ private boolean blacklist (String m ) {
133+ return !getConfig ().getStringList ("blacklist" ).contains (m );
134+ }
135+
136+ private void updateConfig (String v ) {
137+ this .saveDefaultConfig ();
138+ if (getConfig ().getString ("v" ) == null ? v != null : !getConfig ().getString ("v" ).equals (v )) {
139+ getConfig ().options ().copyDefaults (true );
140+ getConfig ().set ("version" , v );
141+ }
142+ this .saveConfig ();
143+ }
144+
145+ private boolean permCheck (String c , Player p ) {
146+ return !p .hasPermission (c );
147+ }
148+
149+ @ Override
150+ public boolean onCommand (CommandSender sender , Command cmd , String label , String [] args ) {
151+ if (cmd .getName ().equalsIgnoreCase ("slack" )) {
152+ this .reloadConfig ();
153+ sender .sendMessage ("Slack has been reloaded." );
154+ if (sender .getName () == null ? getServer ().getConsoleSender ().getName () != null : !sender .getName ().equals (getServer ().getConsoleSender ().getName ())) {
155+ getServer ().getConsoleSender ().sendMessage ("Slack has been reloaded." );
156+ }
157+ return true ;
158+ }
159+ return false ;
91160 }
92161}
0 commit comments