From 6490ce28488015f777c6aa431b7b844a0fe0e9ac Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 8 Sep 2021 13:51:42 +0200 Subject: [PATCH 1/8] Long DiscordId Signed-off-by: Chaoscaot --- src/de/steamwar/bungeecore/bot/AuthManager.java | 2 +- src/de/steamwar/bungeecore/sql/SteamwarUser.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/de/steamwar/bungeecore/bot/AuthManager.java b/src/de/steamwar/bungeecore/bot/AuthManager.java index 7d8b005b..a2facf00 100644 --- a/src/de/steamwar/bungeecore/bot/AuthManager.java +++ b/src/de/steamwar/bungeecore/bot/AuthManager.java @@ -56,7 +56,7 @@ public class AuthManager { if (TOKENS.containsKey(code)) { Member member = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).retrieveMemberById(TOKENS.get(code).longValue()).complete(); if(member == null) return null; - user.setDiscordId(member.getId()); + user.setDiscordId(member.getIdLong()); MessageBuilder builder = new MessageBuilder(); builder.setContent(":white_check_mark: Dein Discord Konto wurde mit **" + user.getUserName() + "** verknüpft"); builder.setActionRows(ActionRow.of(Button.success("tada", Emoji.fromUnicode("U+1F389")), Button.danger("invalid", "Ich war das nicht"))); diff --git a/src/de/steamwar/bungeecore/sql/SteamwarUser.java b/src/de/steamwar/bungeecore/sql/SteamwarUser.java index 67c35960..e09bbc8d 100644 --- a/src/de/steamwar/bungeecore/sql/SteamwarUser.java +++ b/src/de/steamwar/bungeecore/sql/SteamwarUser.java @@ -63,7 +63,7 @@ public class SteamwarUser { private static final Map usersByName = new HashMap<>(); private static final Map usersByUUID = new HashMap<>(); private static final Map usersById = new HashMap<>(); - private static final Map usersByDiscord = new HashMap<>(); + private static final Map usersByDiscord = new HashMap<>(); private static final InetAddress LIXFEL_DE; private static final String API_URL = "https://api.mojang.com/users/profiles/minecraft/"; private static final JsonParser jsonParser = new JsonParser(); @@ -75,7 +75,7 @@ public class SteamwarUser { private int team; private boolean leader; private final Map punishments; - private String discordId; + private Long discordId; static { try { @@ -93,7 +93,7 @@ public class SteamwarUser { userGroup = UserGroup.getUsergroup(rs.getString("UserGroup")); team = rs.getInt("Team"); leader = rs.getBoolean("Leader"); - discordId = rs.getString("DiscordId"); + discordId = rs.getLong("DiscordId"); usersById.put(id, this); usersByName.put(userName.toLowerCase(), this); usersByUUID.put(uuid, this); @@ -178,8 +178,8 @@ public class SteamwarUser { } public static SteamwarUser get(Long discordId) { - if(usersByDiscord.containsKey(discordId.toString())) - return usersByDiscord.get(discordId.toString()); + if(usersByDiscord.containsKey(discordId)) + return usersByDiscord.get(discordId); return byDiscord.select(rs -> { if(rs.next()) return new SteamwarUser(rs); @@ -235,11 +235,11 @@ public class SteamwarUser { return punishments.getOrDefault(type, null); } - public String getDiscordId() { + public Long getDiscordId() { return discordId; } - public void setDiscordId(String discordId) { + public void setDiscordId(Long discordId) { usersByDiscord.remove(this.discordId); this.discordId = discordId; updateDiscord.update(discordId, id); From d41bb58fac07425676ea44118505b2db85dd4703 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Thu, 16 Sep 2021 22:21:36 +0200 Subject: [PATCH 2/8] Fix null Issues Signed-off-by: Chaoscaot --- src/de/steamwar/bungeecore/bot/AuthManager.java | 1 - src/de/steamwar/bungeecore/sql/SteamwarUser.java | 6 +++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/bot/AuthManager.java b/src/de/steamwar/bungeecore/bot/AuthManager.java index a2facf00..ac4f5539 100644 --- a/src/de/steamwar/bungeecore/bot/AuthManager.java +++ b/src/de/steamwar/bungeecore/bot/AuthManager.java @@ -27,7 +27,6 @@ import net.dv8tion.jda.api.entities.Emoji; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.interactions.components.ActionRow; import net.dv8tion.jda.api.interactions.components.Button; -import net.md_5.bungee.api.scheduler.ScheduledTask; import java.util.*; import java.util.concurrent.TimeUnit; diff --git a/src/de/steamwar/bungeecore/sql/SteamwarUser.java b/src/de/steamwar/bungeecore/sql/SteamwarUser.java index e09bbc8d..2643d62b 100644 --- a/src/de/steamwar/bungeecore/sql/SteamwarUser.java +++ b/src/de/steamwar/bungeecore/sql/SteamwarUser.java @@ -94,11 +94,15 @@ public class SteamwarUser { team = rs.getInt("Team"); leader = rs.getBoolean("Leader"); discordId = rs.getLong("DiscordId"); + if(rs.wasNull()) { + discordId = null; + } usersById.put(id, this); usersByName.put(userName.toLowerCase(), this); usersByUUID.put(uuid, this); - if(discordId != null) + if(discordId != null) { usersByDiscord.put(discordId, this); + } punishments = Punishment.getPunishmentsOfPlayer(id); } From 5bcc87aa1e89fb69009649b756b0c3cdcd461639 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 30 Sep 2021 12:26:47 +0200 Subject: [PATCH 3/8] Fix autoreconnect Signed-off-by: Lixfel --- src/de/steamwar/bungeecore/sql/Statement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/sql/Statement.java b/src/de/steamwar/bungeecore/sql/Statement.java index c37538b2..9b1628c0 100644 --- a/src/de/steamwar/bungeecore/sql/Statement.java +++ b/src/de/steamwar/bungeecore/sql/Statement.java @@ -40,7 +40,7 @@ public class Statement { Statement.user = user; Statement.password = password; try { - con = DriverManager.getConnection(url + "?autoreconnect=true&useServerPrepStmts=true", user, password); + con = DriverManager.getConnection(url + "?autoReconnect=true&useServerPrepStmts=true", user, password); } catch (SQLException e) { ProxyServer.getInstance().stop(); throw new SecurityException("Could not start SQL-Connection", e); From 33924752c80ef163f0eb46a834684596846f179a Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 30 Sep 2021 12:30:11 +0200 Subject: [PATCH 4/8] Fix unregistering Signed-off-by: Lixfel --- src/de/steamwar/bungeecore/BungeeCore.java | 6 +++++- src/de/steamwar/bungeecore/ErrorLogger.java | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 6b46fbbc..9a5dfc16 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -71,6 +71,8 @@ public class BungeeCore extends Plugin { public static final Map serverPermissions = new HashMap<>(); public static final Map commands = new HashMap<>(); + private ErrorLogger errorLogger; + @Override public void onEnable(){ getProxy().registerChannel("sw:bridge"); @@ -78,7 +80,7 @@ public class BungeeCore extends Plugin { setInstance(this); loadConfig(); - new ErrorLogger(); + errorLogger = new ErrorLogger(); new ConnectionListener(); new Forge(); new LabyMod(); @@ -167,6 +169,8 @@ public class BungeeCore extends Plugin { } catch (InterruptedException e) { Thread.currentThread().interrupt(); } + + errorLogger.unregister(); Statement.close(); } diff --git a/src/de/steamwar/bungeecore/ErrorLogger.java b/src/de/steamwar/bungeecore/ErrorLogger.java index 4bfe84c8..80b417f1 100644 --- a/src/de/steamwar/bungeecore/ErrorLogger.java +++ b/src/de/steamwar/bungeecore/ErrorLogger.java @@ -40,6 +40,10 @@ public class ErrorLogger extends Handler { Logger.getLogger("").addHandler(this); } + void unregister(){ + Logger.getLogger("").removeHandler(this); + } + @Override public void publish(LogRecord logRecord) { if(logRecord.getLevel().intValue() < Level.WARNING.intValue()) From f9b42ad0c1a184bd9b71d35d82cf998137129b39 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 30 Sep 2021 16:21:24 +0200 Subject: [PATCH 5/8] Prevent username triggering Signed-off-by: Lixfel --- src/de/steamwar/bungeecore/listeners/ChatListener.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index e0e4472b..0e85917a 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -21,7 +21,6 @@ package de.steamwar.bungeecore.listeners; import de.steamwar.bungeecore.*; import de.steamwar.bungeecore.bot.SteamwarDiscordBot; -import de.steamwar.bungeecore.bot.listeners.IngameChatListener; import de.steamwar.bungeecore.commands.TpCommand; import de.steamwar.bungeecore.comms.packets.PingPacket; import de.steamwar.bungeecore.sql.SteamwarUser; @@ -151,7 +150,7 @@ public class ChatListener extends BasicListener { return; } - if(!sender.hasPermission(ConnectionListener.TEAM_GROUP) && (e.getMessage().contains("http") || e.getMessage().contains("www"))){ + if(!sender.hasPermission(ConnectionListener.TEAM_GROUP) && (e.getMessage().contains("http:") || e.getMessage().contains("https:") || e.getMessage().contains("www."))){ Message.send("CHAT_NO_LINKS", sender); e.setCancelled(true); return; From c3c666c30595ac01e80654e8a8e5328038f61a93 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Fri, 1 Oct 2021 10:38:48 +0200 Subject: [PATCH 6/8] Encapsulate DiscordBot errors Signed-off-by: Lixfel --- src/de/steamwar/bungeecore/BungeeCore.java | 8 +++++++- src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java | 7 ++++++- .../bungeecore/commands/ServerTeamchatCommand.java | 9 ++++++++- src/de/steamwar/bungeecore/listeners/ChatListener.java | 7 ++++++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 9a5dfc16..16e8e9dd 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -157,7 +157,11 @@ public class BungeeCore extends Plugin { }, 1, 1, TimeUnit.HOURS); if (SteamwarDiscordBotConfig.loaded) { - new SteamwarDiscordBot(); + try { + new SteamwarDiscordBot(); + } catch (Exception e) { + getLogger().log(Level.SEVERE, "Could not initialize discord bot", e); + } } } @@ -168,6 +172,8 @@ public class BungeeCore extends Plugin { SteamwarDiscordBot.instance().getJda().awaitStatus(JDA.Status.SHUTDOWN); } catch (InterruptedException e) { Thread.currentThread().interrupt(); + } catch (Exception e) { + getLogger().log(Level.SEVERE, "Could not shutdown discord bot", e); } errorLogger.unregister(); diff --git a/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java index 8ff2dfc9..3a4c2b39 100644 --- a/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java +++ b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java @@ -44,6 +44,7 @@ import javax.security.auth.login.LoginException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; public class SteamwarDiscordBot { @@ -84,7 +85,11 @@ public class SteamwarDiscordBot { } catch (InterruptedException e) { e.printStackTrace(); } - activity(); + try { + activity(); + } catch (Exception e) { + BungeeCore.get().getLogger().log(Level.SEVERE, "Could not set initial activity to discord", e); + } EventManager.update(); SchematicsManager.update(); ProxyServer.getInstance().getScheduler().schedule(BungeeCore.get(), () -> { diff --git a/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java b/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java index b9b0ab1a..f9c589b2 100644 --- a/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java +++ b/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java @@ -19,6 +19,7 @@ package de.steamwar.bungeecore.commands; +import de.steamwar.bungeecore.BungeeCore; import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.bot.SteamwarDiscordBot; import de.steamwar.bungeecore.listeners.ChatListener; @@ -28,6 +29,8 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; +import java.util.logging.Level; + public class ServerTeamchatCommand extends BasicCommand { public ServerTeamchatCommand() { @@ -51,7 +54,11 @@ public class ServerTeamchatCommand extends BasicCommand { String msg = msgBuilder.toString(); msg = ChatColor.translateAlternateColorCodes('&', msg); - SteamwarDiscordBot.instance().getServerTeamChatListener().send(" " + (player.getName() + "» " + msg).replaceAll("§[a-f0-9r]", "")); + try { + SteamwarDiscordBot.instance().getServerTeamChatListener().send(" " + (player.getName() + "» " + msg).replaceAll("§[a-f0-9r]", "")); + } catch (Exception e) { + BungeeCore.get().getLogger().log(Level.SEVERE, "Could not send stc message to discord", e); + } sendToTeam(msg, player); } } diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index 0e85917a..b4ff5e98 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -37,6 +37,7 @@ import net.md_5.bungee.event.EventHandler; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; public class ChatListener extends BasicListener { @@ -203,7 +204,11 @@ public class ChatListener extends BasicListener { msg = "§" + team.getTeamColor() + team.getTeamKuerzel() + " §r" + msg; } - SteamwarDiscordBot.instance().getIngameChatListener().send(" " + msg.replaceAll("§[a-f0-9r]", "")); + try { + SteamwarDiscordBot.instance().getIngameChatListener().send(" " + msg.replaceAll("§[a-f0-9r]", "")); + } catch (Exception e) { + BungeeCore.get().getLogger().log(Level.SEVERE, "Could not send chat message to discord", e); + } for(ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){ Subserver targetServer = Subserver.getSubserver(target); if(!(targetServer == null || targetServer.getType() != Servertype.ARENA || targetServer.getServer() != target.getServer().getInfo())) continue; From ef8928d3bda6f4517fc8e2be8661eea375eba730 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Fri, 1 Oct 2021 10:41:58 +0200 Subject: [PATCH 7/8] Better encapsulation Signed-off-by: Lixfel --- src/de/steamwar/bungeecore/BungeeCore.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 16e8e9dd..be2007a3 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -159,7 +159,7 @@ public class BungeeCore extends Plugin { if (SteamwarDiscordBotConfig.loaded) { try { new SteamwarDiscordBot(); - } catch (Exception e) { + } catch (Throwable e) { getLogger().log(Level.SEVERE, "Could not initialize discord bot", e); } } @@ -172,7 +172,7 @@ public class BungeeCore extends Plugin { SteamwarDiscordBot.instance().getJda().awaitStatus(JDA.Status.SHUTDOWN); } catch (InterruptedException e) { Thread.currentThread().interrupt(); - } catch (Exception e) { + } catch (Throwable e) { getLogger().log(Level.SEVERE, "Could not shutdown discord bot", e); } From a3d768b1f101af92b334fd016ed8f82a1184d558 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 1 Oct 2021 10:55:29 +0200 Subject: [PATCH 8/8] Making listener stuff volatile to fix NPE's with multiple threads accessing them --- src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java index 3a4c2b39..e614c5ee 100644 --- a/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java +++ b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java @@ -55,13 +55,13 @@ public class SteamwarDiscordBot { } @Getter - private AnnouncementListener announcementListener; + private volatile AnnouncementListener announcementListener; @Getter - private IngameChatListener ingameChatListener; + private volatile IngameChatListener ingameChatListener; @Getter - private ServerTeamChatListener serverTeamChatListener; + private volatile ServerTeamChatListener serverTeamChatListener; @Getter private final JDA jda; @@ -100,7 +100,6 @@ public class SteamwarDiscordBot { DiscordRolesMessage.sendMessage(); DiscordRulesMessage.sendMessage(); DiscordTicketMessage.sendMessage(); - new RolesInteractionButtonListener(); new DiscordTicketListener(); new DiscordAuthListener(); @@ -109,7 +108,6 @@ public class SteamwarDiscordBot { ingameChatListener = new IngameChatListener(); serverTeamChatListener = new ServerTeamChatListener(); new SlashCommandListener(); - jda.retrieveCommands().complete().forEach(command -> jda.deleteCommandById(command.getId()).queue()); Guild guild = jda.getGuildById(SteamwarDiscordBotConfig.GUILD);