11package org .nyxcode .wurm .discordrelay ;
22
33import com .wurmonline .server .Message ;
4+ import com .wurmonline .server .Players ;
45import com .wurmonline .server .Server ;
6+ import com .wurmonline .server .Servers ;
57import com .wurmonline .server .creatures .Communicator ;
8+ import com .wurmonline .server .creatures .Creature ;
69import com .wurmonline .server .kingdom .Kingdom ;
710import com .wurmonline .server .kingdom .Kingdoms ;
811import com .wurmonline .server .villages .PvPAlliance ;
912import com .wurmonline .server .villages .Village ;
13+ import javassist .ClassPool ;
14+ import javassist .CtClass ;
15+ import javassist .NotFoundException ;
16+ import javassist .bytecode .Descriptor ;
17+ import mod .sin .lib .Util ;
1018import net .dv8tion .jda .core .AccountType ;
1119import net .dv8tion .jda .core .JDA ;
1220import net .dv8tion .jda .core .JDABuilder ;
1321import net .dv8tion .jda .core .MessageBuilder ;
1422import net .dv8tion .jda .core .entities .ChannelType ;
23+ import net .dv8tion .jda .core .entities .Game ;
1524import net .dv8tion .jda .core .events .message .MessageReceivedEvent ;
1625import net .dv8tion .jda .core .exceptions .RateLimitedException ;
1726import net .dv8tion .jda .core .hooks .ListenerAdapter ;
27+ import org .gotti .wurmunlimited .modloader .classhooks .HookManager ;
1828import org .gotti .wurmunlimited .modloader .interfaces .*;
1929
2030import javax .security .auth .login .LoginException ;
@@ -37,13 +47,48 @@ public class DiscordRelay extends ListenerAdapter implements WurmServerMod, PreI
3747 //private String wurmBotName;
3848 private boolean useUnderscore ;
3949
50+
51+ public static void sendRumour (Creature creature ){
52+ sendToDiscord ("rumors" , "Rumours of " + creature .getName () + " are starting to spread." , true );
53+ }
54+
4055 @ Override
4156 public void preInit () {
57+ ClassPool classPool = HookManager .getInstance ().getClassPool ();
58+ Class <DiscordRelay > thisClass = DiscordRelay .class ;
59+
4260 try {
4361 jda = new JDABuilder (AccountType .BOT ).setToken (botToken ).addEventListener (this ).buildBlocking ();
4462 } catch (LoginException | RateLimitedException | InterruptedException e ) {
4563 e .printStackTrace ();
4664 }
65+
66+ // - Send rumour messages to discord - //
67+ try {
68+ CtClass ctCreature = classPool .get ("com.wurmonline.server.creatures.Creature" );
69+ CtClass [] params1 = {
70+ CtClass .intType ,
71+ CtClass .booleanType ,
72+ CtClass .floatType ,
73+ CtClass .floatType ,
74+ CtClass .floatType ,
75+ CtClass .intType ,
76+ classPool .get ("java.lang.String" ),
77+ CtClass .byteType ,
78+ CtClass .byteType ,
79+ CtClass .byteType ,
80+ CtClass .booleanType ,
81+ CtClass .byteType ,
82+ CtClass .intType
83+ };
84+ String desc1 = Descriptor .ofMethod (ctCreature , params1 );
85+ Util .setReason ("Send rumour messages to Discord." );
86+ String replace = "$proceed($$);"
87+ + DiscordRelay .class .getName ()+".sendRumour(toReturn);" ;
88+ Util .instrumentDescribed (thisClass , ctCreature , "doNew" , desc1 , "broadCastSafe" , replace );
89+ } catch (NotFoundException e ) {
90+ e .printStackTrace ();
91+ }
4792 }
4893
4994 @ Override
@@ -55,12 +100,19 @@ public void configure(Properties properties) {
55100 }
56101
57102 private static final DateFormat df = new SimpleDateFormat ("HH:mm:ss" );
58- public static void sendToDiscord (String channel , String message ){
103+ public static void sendToDiscord (String channel , String message , boolean includeMap ){
59104 MessageBuilder builder = new MessageBuilder ();
60105 message = "[" + df .format (new Date (System .currentTimeMillis ())) + "] " +message ; // Add timestamp
106+ message = message + "(" + Servers .localServer .mapname + ")" ;
61107
62108 builder .append (message );
63- jda .getGuildsByName (serverName , true ).get (0 ).getTextChannelsByName (channel , true ).get (0 ).sendMessage (builder .build ()).queue ();
109+ try {
110+ jda .getPresence ().setGame (Game .of (Players .getInstance ().getNumberOfPlayers () + " online!" ));
111+ jda .getGuildsByName (serverName , true ).get (0 ).getTextChannelsByName (channel , true ).get (0 ).sendMessage (builder .build ()).queue ();
112+ }catch (Exception e ){
113+ e .printStackTrace ();
114+ logger .info ("Discord Relay failure: #" +channel +" - " +message );
115+ }
64116 }
65117
66118 @ Override
@@ -69,7 +121,7 @@ public MessagePolicy onKingdomMessage(Message message) {
69121 byte kingdomId = message .getSender ().getKingdomId ();
70122 //Kingdom kingdom = Kingdoms.getKingdom(kingdomId);
71123 String kingdomName = discordifyName ("GL-" +Kingdoms .getChatNameFor (kingdomId ));
72- sendToDiscord (kingdomName , message .getMessage ());
124+ sendToDiscord (kingdomName , message .getMessage (), false );
73125 /*MessageBuilder builder = new MessageBuilder();
74126
75127 builder.append(message.getMessage());
@@ -78,7 +130,7 @@ public MessagePolicy onKingdomMessage(Message message) {
78130 byte kingdomId = message .getSender ().getKingdomId ();
79131 //Kingdom kingdom = Kingdoms.getKingdom(kingdomId);
80132 String kingdomName = discordifyName (Kingdoms .getChatNameFor (kingdomId ));
81- sendToDiscord (kingdomName , message .getMessage ());
133+ sendToDiscord (kingdomName , message .getMessage (), false );
82134 }
83135
84136 return MessagePolicy .PASS ;
@@ -104,16 +156,13 @@ public void sendToGlobalKingdomChat(final String channel, final String message)
104156 if (kingdomId != -1 ) {
105157 //long wurmId = -10;
106158
107- byte messageType = global ? Message .GLOBKINGDOM : Message .KINGDOM ;
108- messageType = Message .GLOBKINGDOM ;
109159 String window = "" ;
110160 if (global ){
111161 window = window + "GL-" ;
112162 }
113163 window = window + Kingdoms .getChatNameFor (kingdomId );
114- logger .info ("Window = " +window );
115164
116- final Message mess = new Message (null , messageType , window , message );
165+ final Message mess = new Message (null , Message . GLOBKINGDOM , window , message );
117166 mess .setSenderKingdom (kingdomId );
118167 if (message .trim ().length () > 1 ) {
119168 Server .getInstance ().addMessage (mess );
0 commit comments