diff --git a/pom.xml b/pom.xml
index e8a7bdd..4e292c5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,7 @@
3.0.5
pom
-
+
com.jagrosh
EasySQL
0.3
@@ -47,6 +47,11 @@
0.1.8
+ com.squareup.okhttp3
+ okhttp
+ 3.13.0
+
+
ch.qos.logback
logback-classic
1.2.3
diff --git a/src/main/java/com/jagrosh/vortex/Listener.java b/src/main/java/com/jagrosh/vortex/Listener.java
index e4fad8e..6bdbd9e 100644
--- a/src/main/java/com/jagrosh/vortex/Listener.java
+++ b/src/main/java/com/jagrosh/vortex/Listener.java
@@ -167,14 +167,21 @@
}
else if (event instanceof UserUpdateNameEvent)
{
+ // Make sure the name actually changed
UserUpdateNameEvent unue = (UserUpdateNameEvent)event;
- // Log the name change
- vortex.getBasicLogger().logNameChange(unue);
- unue.getUser().getMutualGuilds().stream().map(g -> g.getMember(unue.getUser())).forEach(m -> vortex.getAutoMod().dehoist(m));
+ if(!unue.getNewName().equals(unue.getOldName()))
+ {
+ // Log the name change
+ vortex.getBasicLogger().logNameChange(unue);
+ unue.getUser().getMutualGuilds().stream().map(g -> g.getMember(unue.getUser())).forEach(m -> vortex.getAutoMod().dehoist(m));
+ }
}
else if (event instanceof UserUpdateDiscriminatorEvent)
{
- vortex.getBasicLogger().logNameChange((UserUpdateDiscriminatorEvent)event);
+ // Make sure the discrim actually changed
+ UserUpdateDiscriminatorEvent udue = (UserUpdateDiscriminatorEvent) event;
+ if(!udue.getNewDiscriminator().equals(udue.getOldDiscriminator()))
+ vortex.getBasicLogger().logDiscrimChange((UserUpdateDiscriminatorEvent)event);
}
else if (event instanceof GuildMemberUpdateNicknameEvent)
{
diff --git a/src/main/java/com/jagrosh/vortex/Vortex.java b/src/main/java/com/jagrosh/vortex/Vortex.java
index 7a6c890..ff01c4d 100644
--- a/src/main/java/com/jagrosh/vortex/Vortex.java
+++ b/src/main/java/com/jagrosh/vortex/Vortex.java
@@ -40,7 +40,8 @@
import com.jagrosh.vortex.logging.ModLogger;
import com.jagrosh.vortex.logging.TextUploader;
import com.jagrosh.vortex.utils.FormatUtil;
-import com.jagrosh.vortex.utils.MultiBotManager;
+import com.jagrosh.vortex.managers.MultiBotManager;
+import com.jagrosh.vortex.managers.UptimeManager;
import com.jagrosh.vortex.utils.OtherUtil;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
@@ -72,6 +73,7 @@
private final WebhookClient logwebhook;
private final AutoMod automod;
private final StrikeHandler strikehandler;
+ private final UptimeManager uptime;
private final CommandExceptionListener listener;
private final Config config;
@@ -91,6 +93,7 @@
logwebhook = new WebhookClientBuilder(config.getString("webhook-url")).build();
automod = new AutoMod(this, config);
strikehandler = new StrikeHandler(this);
+ uptime = new UptimeManager(logwebhook, database, threadpool, 1);
listener = new CommandExceptionListener();
CommandClient client = new CommandClientBuilder()
.setPrefix(Constants.PREFIX)
@@ -198,6 +201,7 @@
.build();
modlog.start();
+ uptime.start();
threadpool.scheduleWithFixedDelay(() -> cleanPremium(), 0, 2, TimeUnit.HOURS);
threadpool.scheduleWithFixedDelay(() -> leavePointlessGuilds(), 5, 30, TimeUnit.MINUTES);
diff --git a/src/main/java/com/jagrosh/vortex/commands/owner/PremiumCmd.java b/src/main/java/com/jagrosh/vortex/commands/owner/PremiumCmd.java
index cc6c565..b0515d8 100644
--- a/src/main/java/com/jagrosh/vortex/commands/owner/PremiumCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/owner/PremiumCmd.java
@@ -42,7 +42,7 @@
this.ownerCommand = true;
this.guildOnly = false;
this.hidden = true;
- this.children = new Command[]{ new PremiumAddCmd(), new PremiumInfoCmd(), new PremiumUserCmd() };
+ this.children = new Command[]{ new PremiumAddCmd(), new PremiumInfoCmd(), new PremiumUserCmd(), new PremiumRemoveCmd() };
}
@Override
@@ -161,6 +161,7 @@
{
this.name = "info";
this.help = "shows premium info";
+ this.arguments = "";
this.ownerCommand = true;
this.guildOnly = false;
this.hidden = true;
@@ -178,4 +179,58 @@
}).collect(Collectors.joining("\n")));
}
}
+
+ private class PremiumRemoveCmd extends Command
+ {
+ public PremiumRemoveCmd()
+ {
+ this.name = "remove";
+ this.help = "removes premium";
+ this.arguments = "";
+ this.ownerCommand = true;
+ this.guildOnly = false;
+ this.hidden = true;
+ }
+
+ @Override
+ protected void execute(CommandEvent event)
+ {
+ String[] parts = event.getArgs().split("\\s+", 1);
+ if(parts.length < 1)
+ {
+ event.replyError("Too few arguments");
+ return;
+ }
+
+ Guild guild;
+ try
+ {
+ guild = vortex.getShardManager().getGuildById(Long.parseLong(parts[0]));
+ }
+ catch(NumberFormatException ex)
+ {
+ event.replyError("Invalid guild ID");
+ return;
+ }
+
+ if(guild == null)
+ {
+ event.replyError("No guild found with ID `" + parts[0] + "`");
+ return;
+ }
+
+ PremiumInfo before = vortex.getDatabase().premium.getPremiumInfo(guild);
+ if(before == null || before.level == PremiumManager.Level.NONE)
+ {
+ event.replyError("Guild `" + guild.getName() + "` does not have premium!");
+ return;
+ }
+
+ // remove 5 years, so that the cleanup will still happen correctly
+ // tbh there should be a better cleanup system
+ vortex.getDatabase().premium.addPremium(guild, PremiumManager.Level.NONE, -5 * 365, ChronoUnit.DAYS);
+ PremiumInfo after = vortex.getDatabase().premium.getPremiumInfo(guild);
+ event.replySuccess("Before: " + before + "\n" + event.getClient().getSuccess() + " After: " + after);
+ }
+ }
}
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/PremiumManager.java b/src/main/java/com/jagrosh/vortex/database/managers/PremiumManager.java
index f775913..3a31ec1 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/PremiumManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/PremiumManager.java
@@ -20,7 +20,7 @@
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.*;
import com.jagrosh.vortex.Constants;
-import com.jagrosh.vortex.utils.MultiBotManager;
+import com.jagrosh.vortex.managers.MultiBotManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.Instant;
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/TempBanManager.java b/src/main/java/com/jagrosh/vortex/database/managers/TempBanManager.java
index 0e992c0..5cab81a 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/TempBanManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/TempBanManager.java
@@ -20,7 +20,7 @@
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.InstantColumn;
import com.jagrosh.easysql.columns.LongColumn;
-import com.jagrosh.vortex.utils.MultiBotManager;
+import com.jagrosh.vortex.managers.MultiBotManager;
import com.jagrosh.vortex.utils.Pair;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/TempMuteManager.java b/src/main/java/com/jagrosh/vortex/database/managers/TempMuteManager.java
index 0dc6e17..3fe7764 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/TempMuteManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/TempMuteManager.java
@@ -20,7 +20,7 @@
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.InstantColumn;
import com.jagrosh.easysql.columns.LongColumn;
-import com.jagrosh.vortex.utils.MultiBotManager;
+import com.jagrosh.vortex.managers.MultiBotManager;
import com.jagrosh.vortex.utils.Pair;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/TempSlowmodeManager.java b/src/main/java/com/jagrosh/vortex/database/managers/TempSlowmodeManager.java
index d2cd442..1d605e3 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/TempSlowmodeManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/TempSlowmodeManager.java
@@ -20,7 +20,7 @@
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.InstantColumn;
import com.jagrosh.easysql.columns.LongColumn;
-import com.jagrosh.vortex.utils.MultiBotManager;
+import com.jagrosh.vortex.managers.MultiBotManager;
import com.jagrosh.vortex.utils.Pair;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.Permission;
diff --git a/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java b/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java
index 8ed976b..c7aa917 100644
--- a/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java
+++ b/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java
@@ -222,7 +222,7 @@
});
}
- public void logNameChange(UserUpdateDiscriminatorEvent event)
+ public void logDiscrimChange(UserUpdateDiscriminatorEvent event)
{
OffsetDateTime now = OffsetDateTime.now();
event.getJDA().getMutualGuilds(event.getEntity()).stream()
@@ -232,7 +232,7 @@
.forEachOrdered(tc ->
{
log(now, tc, NAME, "**"+event.getUser().getName()+"**#"+event.getOldDiscriminator()+" (ID:"
- +event.getUser().getId()+") has changed names to "+FormatUtil.formatUser(event.getUser()), null);
+ +event.getUser().getId()+") has changed discrims to "+FormatUtil.formatUser(event.getUser()), null);
});
}
diff --git a/src/main/java/com/jagrosh/vortex/logging/MessageCache.java b/src/main/java/com/jagrosh/vortex/logging/MessageCache.java
index e6a810c..6c0e1f6 100644
--- a/src/main/java/com/jagrosh/vortex/logging/MessageCache.java
+++ b/src/main/java/com/jagrosh/vortex/logging/MessageCache.java
@@ -16,7 +16,7 @@
package com.jagrosh.vortex.logging;
import com.jagrosh.vortex.utils.FixedCache;
-import com.jagrosh.vortex.utils.MultiBotManager;
+import com.jagrosh.vortex.managers.MultiBotManager;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
diff --git a/src/main/java/com/jagrosh/vortex/managers/BlockingSessionController.java b/src/main/java/com/jagrosh/vortex/managers/BlockingSessionController.java
index 979f669..c612d07 100644
--- a/src/main/java/com/jagrosh/vortex/managers/BlockingSessionController.java
+++ b/src/main/java/com/jagrosh/vortex/managers/BlockingSessionController.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.jagrosh.vortex.utils;
+package com.jagrosh.vortex.managers;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.utils.SessionControllerAdapter;
diff --git a/src/main/java/com/jagrosh/vortex/managers/ConditionalEventManager.java b/src/main/java/com/jagrosh/vortex/managers/ConditionalEventManager.java
index 18d813c..d6f87a2 100644
--- a/src/main/java/com/jagrosh/vortex/managers/ConditionalEventManager.java
+++ b/src/main/java/com/jagrosh/vortex/managers/ConditionalEventManager.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.jagrosh.vortex.utils;
+package com.jagrosh.vortex.managers;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
diff --git a/src/main/java/com/jagrosh/vortex/managers/MultiBotManager.java b/src/main/java/com/jagrosh/vortex/managers/MultiBotManager.java
index f1dc122..409ce6a 100644
--- a/src/main/java/com/jagrosh/vortex/managers/MultiBotManager.java
+++ b/src/main/java/com/jagrosh/vortex/managers/MultiBotManager.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.jagrosh.vortex.utils;
+package com.jagrosh.vortex.managers;
import java.util.*;
import java.util.stream.Collectors;
diff --git a/src/main/java/com/jagrosh/vortex/managers/SlowerConcurrentSessionController.java b/src/main/java/com/jagrosh/vortex/managers/SlowerConcurrentSessionController.java
index 98f6d3e..a1f5ade 100644
--- a/src/main/java/com/jagrosh/vortex/managers/SlowerConcurrentSessionController.java
+++ b/src/main/java/com/jagrosh/vortex/managers/SlowerConcurrentSessionController.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.jagrosh.vortex.utils;
+package com.jagrosh.vortex.managers;
import net.dv8tion.jda.api.utils.ConcurrentSessionController;
diff --git a/src/main/java/com/jagrosh/vortex/managers/UptimeManager.java b/src/main/java/com/jagrosh/vortex/managers/UptimeManager.java
new file mode 100644
index 0000000..e1ca8e9
--- /dev/null
+++ b/src/main/java/com/jagrosh/vortex/managers/UptimeManager.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2023 jagrosh.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jagrosh.vortex.managers;
+
+import club.minnced.discord.webhook.WebhookClient;
+import com.jagrosh.vortex.Constants;
+import com.jagrosh.vortex.database.Database;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+/**
+ *
+ * @author jagrosh
+ */
+public class UptimeManager
+{
+ private boolean started = false;
+ private int failures = 0;
+ private final int minPrem;
+ private final ScheduledExecutorService threadpool;
+ private final WebhookClient log;
+ private final Database database;
+
+ public UptimeManager(WebhookClient log, Database database, ScheduledExecutorService threadpool, int minPrem)
+ {
+ this.log = log;
+ this.database = database;
+ this.threadpool = threadpool;
+ this.minPrem = minPrem;
+ }
+
+ public void start()
+ {
+ if(started)
+ return;
+ started = true;
+
+ threadpool.scheduleWithFixedDelay(()->check(), 2, 2, TimeUnit.MINUTES);
+ }
+
+ private void check()
+ {
+ boolean valid = false;
+ try
+ {
+ boolean closed = database.getConnection().isClosed();
+ int prem = database.premium.getPremiumGuilds().size();
+ valid = !closed && prem >= minPrem;
+ }
+ catch(Exception ignored){}
+
+ if(!valid)
+ failures++;
+ else
+ failures = 0;
+
+ if(failures == 3)
+ shutdownAll();
+ }
+
+ private void shutdownAll()
+ {
+ try
+ {
+ log.send(Constants.ERROR+" Uptime failure, attempting restart...").get();
+ Thread.sleep(1000);
+ }
+ catch(Exception ignored){}
+ System.exit(1);
+ }
+}
diff --git a/src/main/java/com/jagrosh/vortex/utils/LogUtil.java b/src/main/java/com/jagrosh/vortex/utils/LogUtil.java
index 2384176..aaa332f 100644
--- a/src/main/java/com/jagrosh/vortex/utils/LogUtil.java
+++ b/src/main/java/com/jagrosh/vortex/utils/LogUtil.java
@@ -15,6 +15,7 @@
*/
package com.jagrosh.vortex.utils;
+import com.jagrosh.vortex.managers.MultiBotManager;
import com.jagrosh.vortex.Action;
import com.jagrosh.vortex.logging.MessageCache.CachedMessage;
import java.time.OffsetDateTime;