Skip to content

Commit 870a42d

Browse files
committed
Try/catch to prevent bugs. Add map name for certain messages.
1 parent 2e2dbd4 commit 870a42d

File tree

2 files changed

+59
-8
lines changed

2 files changed

+59
-8
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ repositories {
2525
maven { url "http://jcenter.bintray.com" }
2626
maven { url "http://gotti.no-ip.org/maven/repository" }
2727
maven { url "http://repo.maven.apache.org/maven2" }
28+
maven { url 'https://jitpack.io' }
2829
}
2930
dependencies {
3031
compile 'net.dv8tion:JDA:3.3.1_289'
3132
compile 'org.gotti.wurmunlimited:server-modlauncher:0.33-beta1'
33+
compile 'com.github.Sindusk:sindusklibrary:v1.0'
3234
}
3335

3436
jar {

src/main/java/org/nyxcode/wurm/discordrelay/DiscordRelay.java

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,30 @@
11
package org.nyxcode.wurm.discordrelay;
22

33
import com.wurmonline.server.Message;
4+
import com.wurmonline.server.Players;
45
import com.wurmonline.server.Server;
6+
import com.wurmonline.server.Servers;
57
import com.wurmonline.server.creatures.Communicator;
8+
import com.wurmonline.server.creatures.Creature;
69
import com.wurmonline.server.kingdom.Kingdom;
710
import com.wurmonline.server.kingdom.Kingdoms;
811
import com.wurmonline.server.villages.PvPAlliance;
912
import 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;
1018
import net.dv8tion.jda.core.AccountType;
1119
import net.dv8tion.jda.core.JDA;
1220
import net.dv8tion.jda.core.JDABuilder;
1321
import net.dv8tion.jda.core.MessageBuilder;
1422
import net.dv8tion.jda.core.entities.ChannelType;
23+
import net.dv8tion.jda.core.entities.Game;
1524
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
1625
import net.dv8tion.jda.core.exceptions.RateLimitedException;
1726
import net.dv8tion.jda.core.hooks.ListenerAdapter;
27+
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
1828
import org.gotti.wurmunlimited.modloader.interfaces.*;
1929

2030
import 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

Comments
 (0)