diff --git a/.gitignore b/.gitignore
index c177e3a..dfba200 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,5 @@
/database/
/.idea/
nb*.xml
-*.conf
\ No newline at end of file
+*.conf
+/nbproject/
\ No newline at end of file
diff --git a/images/NoAvatar.png b/images/NoAvatar.png
index 14fd0ca..6621980 100644
--- a/images/NoAvatar.png
+++ b/images/NoAvatar.png
Binary files differ
diff --git a/images/NoAvatar_old.png b/images/NoAvatar_old.png
new file mode 100644
index 0000000..14fd0ca
--- /dev/null
+++ b/images/NoAvatar_old.png
Binary files differ
diff --git a/lists/copypastas.txt b/lists/copypastas.txt
index 396f7d4..cb752a7 100644
--- a/lists/copypastas.txt
+++ b/lists/copypastas.txt
@@ -17,6 +17,7 @@
// Unicode
Bob || /▌ && /\ && This is bob
Lennipede || ╚═(███)═╝ && Lenn
+Doge || ▐▄█▀▒▒▒▒▄▀█▄ && ▐▄█▄█▌▄▒▀▒ && ▒▀▀▄▄▒▒▒▄▒
// Text
Navy Seals || say about me && ll have you know I && I am trained && Think again && Not only am I extensively trained && kid
diff --git a/lists/referral_domains.txt b/lists/referral_domains.txt
index 725fa70..40636ec 100644
--- a/lists/referral_domains.txt
+++ b/lists/referral_domains.txt
@@ -40,6 +40,7 @@
yoütu.be
yoütübe.co
yoütübe.com
+youtubeshort.watch
// Ad sites
adblade.com
@@ -110,6 +111,7 @@
// Scams
amazingsexdating.com
easter-event.com
+ezrobux.gg
fortnite.cards
fortnite.events
fortnite-christmas.com
diff --git a/pom.xml b/pom.xml
index 59c5962..c910073 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
jcenter
jcenter-bintray
- http://jcenter.bintray.com
+ https://jcenter.bintray.com
@@ -24,7 +24,7 @@
net.dv8tion
JDA
- 4.0.0_52
+ 4.1.1_110
com.jagrosh
@@ -52,6 +52,18 @@
config
1.3.2
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.hamcrest
+ hamcrest-core
+ 1.3
+ test
+
@@ -82,4 +94,4 @@
-
\ No newline at end of file
+
diff --git a/src/main/java/com/jagrosh/vortex/Constants.java b/src/main/java/com/jagrosh/vortex/Constants.java
index b4a7937..96dfc7c 100644
--- a/src/main/java/com/jagrosh/vortex/Constants.java
+++ b/src/main/java/com/jagrosh/vortex/Constants.java
@@ -33,6 +33,7 @@
public final static String HELP_REACTION = SUCCESS.replaceAll("", "$1:$2");
public final static String ERROR_REACTION = ERROR.replaceAll("", "$1:$2");
public final static String VORTEX_EMOJI = "<:Vortex:386971287282515970>";
+ public final static int DEFAULT_CACHE_SIZE = 8000;
public final static Permission[] PERMISSIONS = {Permission.ADMINISTRATOR, Permission.BAN_MEMBERS, Permission.KICK_MEMBERS, Permission.MANAGE_ROLES,
Permission.MANAGE_SERVER, Permission.MESSAGE_ADD_REACTION, Permission.MESSAGE_ATTACH_FILES, Permission.MESSAGE_READ,
Permission.MESSAGE_WRITE,Permission.MESSAGE_EMBED_LINKS, Permission.MESSAGE_HISTORY, Permission.MESSAGE_EXT_EMOJI,
diff --git a/src/main/java/com/jagrosh/vortex/Listener.java b/src/main/java/com/jagrosh/vortex/Listener.java
index b01c424..50a2efd 100644
--- a/src/main/java/com/jagrosh/vortex/Listener.java
+++ b/src/main/java/com/jagrosh/vortex/Listener.java
@@ -27,6 +27,7 @@
import net.dv8tion.jda.api.events.guild.GuildBanEvent;
import net.dv8tion.jda.api.events.guild.GuildUnbanEvent;
import net.dv8tion.jda.api.events.guild.member.*;
+import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateNicknameEvent;
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceJoinEvent;
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceLeaveEvent;
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceMoveEvent;
@@ -170,9 +171,9 @@
{
vortex.getBasicLogger().logNameChange((UserUpdateDiscriminatorEvent)event);
}
- else if (event instanceof GuildMemberNickChangeEvent)
+ else if (event instanceof GuildMemberUpdateNicknameEvent)
{
- vortex.getAutoMod().dehoist(((GuildMemberNickChangeEvent) event).getMember());
+ vortex.getAutoMod().dehoist(((GuildMemberUpdateNicknameEvent) event).getMember());
}
else if (event instanceof UserUpdateAvatarEvent)
{
diff --git a/src/main/java/com/jagrosh/vortex/Vortex.java b/src/main/java/com/jagrosh/vortex/Vortex.java
index b031495..10c7afd 100644
--- a/src/main/java/com/jagrosh/vortex/Vortex.java
+++ b/src/main/java/com/jagrosh/vortex/Vortex.java
@@ -15,6 +15,8 @@
*/
package com.jagrosh.vortex;
+import club.minnced.discord.webhook.WebhookClient;
+import club.minnced.discord.webhook.WebhookClientBuilder;
import com.jagrosh.vortex.commands.tools.LookupCmd;
import com.jagrosh.vortex.commands.automod.*;
import com.jagrosh.vortex.commands.general.*;
@@ -32,7 +34,6 @@
import com.jagrosh.vortex.commands.CommandExceptionListener;
import java.util.concurrent.ScheduledExecutorService;
import net.dv8tion.jda.api.OnlineStatus;
-import net.dv8tion.jda.api.entities.Game;
import com.jagrosh.vortex.database.Database;
import com.jagrosh.vortex.logging.BasicLogger;
import com.jagrosh.vortex.logging.MessageCache;
@@ -45,8 +46,11 @@
import com.typesafe.config.ConfigFactory;
import java.util.EnumSet;
import java.util.concurrent.TimeUnit;
+import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.exceptions.PermissionException;
+import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder;
+import net.dv8tion.jda.api.sharding.ShardManager;
import net.dv8tion.jda.api.utils.cache.CacheFlag;
/**
@@ -66,6 +70,7 @@
private final WebhookClient logwebhook;
private final AutoMod automod;
private final StrikeHandler strikehandler;
+ private final CommandExceptionListener listener;
public Vortex() throws Exception
{
@@ -83,15 +88,16 @@
logwebhook = new WebhookClientBuilder(config.getString("webhook-url")).build();
automod = new AutoMod(this, config);
strikehandler = new StrikeHandler(this);
+ listener = new CommandExceptionListener();
CommandClient client = new CommandClientBuilder()
.setPrefix(Constants.PREFIX)
- .setGame(Game.playing(Constants.Wiki.SHORT_WIKI))
+ .setActivity(Activity.playing(Constants.Wiki.SHORT_WIKI))
.setOwnerId(Constants.OWNER_ID)
.setServerInvite(Constants.SERVER_INVITE)
.setEmojis(Constants.SUCCESS, Constants.WARNING, Constants.ERROR)
.setLinkedCacheSize(0)
.setGuildSettingsManager(database.settings)
- .setListener(new CommandExceptionListener())
+ .setListener(listener)
.setScheduleExecutor(threadpool)
.setShutdownAutomatically(false)
.addCommands(
@@ -107,6 +113,7 @@
new KickCmd(this),
new BanCmd(this),
new SoftbanCmd(this),
+ new SilentbanCmd(this),
new UnbanCmd(this),
new CleanCmd(this),
new VoicemoveCmd(this),
@@ -177,10 +184,10 @@
.setToken(config.getString("bot-token"))
.addEventListeners(new Listener(this), client, waiter)
.setStatus(OnlineStatus.DO_NOT_DISTURB)
- .setGame(Game.playing("loading..."))
+ .setActivity(Activity.playing("loading..."))
.setBulkDeleteSplittingEnabled(false)
.setRequestTimeoutRetry(true)
- .setDisabledCacheFlags(EnumSet.of(CacheFlag.EMOTE, CacheFlag.GAME)) //TODO: dont disable GAME
+ .setDisabledCacheFlags(EnumSet.of(CacheFlag.EMOTE, CacheFlag.ACTIVITY)) //TODO: dont disable GAME
.setSessionController(new BlockingSessionController())
.build();
@@ -248,6 +255,11 @@
return strikehandler;
}
+ public CommandExceptionListener getListener()
+ {
+ return listener;
+ }
+
// Global methods
public void cleanPremium()
diff --git a/src/main/java/com/jagrosh/vortex/automod/AutoMod.java b/src/main/java/com/jagrosh/vortex/automod/AutoMod.java
index 9206735..500bcac 100644
--- a/src/main/java/com/jagrosh/vortex/automod/AutoMod.java
+++ b/src/main/java/com/jagrosh/vortex/automod/AutoMod.java
@@ -23,6 +23,7 @@
import com.jagrosh.vortex.automod.URLResolver.*;
import com.jagrosh.vortex.utils.FixedCache;
import com.jagrosh.vortex.utils.OtherUtil;
+import com.jagrosh.vortex.utils.Usage;
import com.typesafe.config.Config;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
@@ -35,6 +36,7 @@
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.Guild.VerificationLevel;
@@ -70,6 +72,7 @@
private final CopypastaResolver copypastaResolver = new CopypastaResolver();
private final FixedCache spams = new FixedCache<>(3000);
private final HashMap latestGuildJoin = new HashMap<>();
+ private final Usage usage = new Usage();
public AutoMod(Vortex vortex, Config config)
{
@@ -94,6 +97,11 @@
this.refLinkList = OtherUtil.readLines("referral_domains");
}
+ public Usage getUsage()
+ {
+ return usage;
+ }
+
public void enableRaidMode(Guild guild, Member moderator, OffsetDateTime now, String reason)
{
vortex.getDatabase().settings.enableRaidMode(guild);
@@ -153,8 +161,8 @@
else if(ams.useAutoRaidMode())
{
// find the time that we should be looking after, and count the number of people that joined after that
- OffsetDateTime min = event.getMember().getJoinDate().minusSeconds(ams.raidmodeTime);
- long recent = event.getGuild().getMemberCache().stream().filter(m -> !m.getUser().isBot() && m.getJoinDate().isAfter(min)).count();
+ OffsetDateTime min = event.getMember().getTimeJoined().minusSeconds(ams.raidmodeTime);
+ long recent = event.getGuild().getMemberCache().stream().filter(m -> !m.getUser().isBot() && m.getTimeJoined().isAfter(min)).count();
if(recent>=ams.raidmodeNumber)
{
enableRaidMode(event.getGuild(), event.getGuild().getSelfMember(), now, "Maximum join rate exceeded ("+ams.raidmodeNumber+"/"+ams.raidmodeTime+"s)");
@@ -169,7 +177,7 @@
{
try
{
- event.getGuild().getController().kick(event.getMember(), "Anti-Raid Mode").queue();
+ event.getGuild().kick(event.getMember(), "Anti-Raid Mode").queue();
}catch(Exception ignore){}
});
}
@@ -179,8 +187,8 @@
{
try
{
- event.getGuild().getController()
- .addSingleRoleToMember(event.getMember(), vortex.getDatabase().settings.getSettings(event.getGuild()).getMutedRole(event.getGuild()))
+ event.getGuild()
+ .addRoleToMember(event.getMember(), vortex.getDatabase().settings.getSettings(event.getGuild()).getMutedRole(event.getGuild()))
.reason(RESTORE_MUTE_ROLE_AUDIT).queue();
} catch(Exception ignore){}
}
@@ -245,6 +253,7 @@
try
{
+ usage.increment(member.getGuild().getIdLong());
OtherUtil.dehoist(member, settings.dehoistChar);
}
catch(Exception ignore) {}
@@ -271,6 +280,7 @@
List inviteWhitelist = !preventInvites ? Collections.emptyList()
: vortex.getDatabase().inviteWhitelist.readWhitelist(message.getGuild());
List filters = vortex.getDatabase().filters.getFilters(message.getGuild());
+ usage.increment(message.getGuild().getIdLong());
boolean shouldDelete = false;
String channelWarning = null;
@@ -421,6 +431,7 @@
LOG.trace("Found "+invites.size()+" invites.");
for(String inviteCode : invites)
{
+ LOG.info("Resolving invite in " + message.getGuild().getId() + ": " + inviteCode);
long gid = inviteResolver.resolve(message.getJDA(), inviteCode);
if(gid != message.getGuild().getIdLong() && !inviteWhitelist.contains(gid))
{
@@ -478,7 +489,9 @@
{
if(preventInvites && resolved.matches(INVITE_LINK))
{
- long invite = inviteResolver.resolve(message.getJDA(), resolved.replaceAll(INVITE_LINK, "$1"));
+ String code = resolved.replaceAll(INVITE_LINK, "$1");
+ LOG.info("Delayed resolving invite in " + message.getGuild().getId() + ": " + code);
+ long invite = inviteResolver.resolve(message.getJDA(), code);
if(invite != message.getGuild().getIdLong() && !inviteWhitelist.contains(invite))
containsInvite = true;
}
@@ -487,7 +500,6 @@
if(resolved.matches(REF.pattern()) || isReferralUrl(resolved.replaceAll(BASE_URL.pattern(), "$1")))
containsRef = true;
}
-
}
if((containsInvite || !preventInvites) && (containsRef || settings.refStrikes<1))
break;
@@ -510,16 +522,29 @@
private void purgeMessages(Guild guild, Predicate predicate)
{
- vortex.getMessageCache().getMessages(guild, predicate).forEach(m ->
+ vortex.getMessageCache().getMessages(guild, predicate).stream()
+ .collect(Collectors.groupingBy(CachedMessage::getTextChannelId)).entrySet().forEach(entry ->
{
try
{
+ TextChannel mtc = guild.getTextChannelById(entry.getKey());
+ if(mtc != null)
+ mtc.purgeMessagesById(entry.getValue().stream().map(CachedMessage::getId).collect(Collectors.toList()));
+ }
+ catch(PermissionException ignore) {}
+ catch(Exception ex) { LOG.error("Error in purging messages: ", ex); }
+ });//*/
+ /*vortex.getMessageCache().getMessages(guild, predicate).forEach(m ->
+ {
+
+ try
+ {
TextChannel mtc = m.getTextChannel(guild);
if(mtc!=null)
mtc.deleteMessageById(m.getIdLong()).queue(s->{}, f->{});
}
catch(PermissionException ignore) {}
- });
+ });//*/
}
private boolean isReferralUrl(String url)
@@ -546,7 +571,7 @@
private static OffsetDateTime latestTime(Message m)
{
- return m.isEdited() ? m.getEditedTime() : m.getTimeCreated();
+ return m.isEdited() ? m.getTimeEdited(): m.getTimeCreated();
}
private class DupeStatus
diff --git a/src/main/java/com/jagrosh/vortex/automod/Filter.java b/src/main/java/com/jagrosh/vortex/automod/Filter.java
index 3e5c605..cfb0710 100644
--- a/src/main/java/com/jagrosh/vortex/automod/Filter.java
+++ b/src/main/java/com/jagrosh/vortex/automod/Filter.java
@@ -30,7 +30,7 @@
public final static int MAX_CONTENT_LENGTH = 255;
public final static int MAX_STRIKES = 100;
- private final static String[] TEST_CASES = {"welcome", "i will follow the rules"};
+ private final static String[] TEST_CASES = {"welcome", "i will follow the rules", "this is a sentence"};
public final String name;
public final int strikes;
@@ -150,15 +150,21 @@
glob = glob.replaceAll("\\*+", "*"); // remove double wildcards
this.startWildcard = glob.startsWith("*");
this.endWildcard = glob.endsWith("*");
- this.glob = (startWildcard ? "" : " ")
- + glob.substring(startWildcard ? 1 : 0, endWildcard ? glob.length()-1 : glob.length())
- + (endWildcard ? "" : " ");
+ this.glob = glob.substring(startWildcard ? 1 : 0, endWildcard ? glob.length()-1 : glob.length());
}
@Override
public boolean test(String message)
{
- return (" " + message.replaceAll("\\s+", " ").toLowerCase() + " ").contains(glob);
+ String lower = message.toLowerCase();
+ int index = -1;
+ while((index = lower.indexOf(glob, index + 1)) > -1)
+ {
+ if((startWildcard || isWordBoundary(lower, index - 1))
+ && (endWildcard || isWordBoundary(lower, index + glob.length())))
+ return true;
+ }
+ return false;
}
@Override
@@ -166,6 +172,14 @@
{
return (startWildcard ? "*" : "") + glob.trim() + (endWildcard ? "*" : "");
}
+
+ private static boolean isWordBoundary(String str, int index)
+ {
+ if(index < 0 || index >= str.length())
+ return true;
+ char c = str.charAt(index);
+ return !(c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z') && !(c >= '0' && c <= '9');
+ }
}
public static class Quote extends Item
diff --git a/src/main/java/com/jagrosh/vortex/automod/InviteResolver.java b/src/main/java/com/jagrosh/vortex/automod/InviteResolver.java
index ae6bc20..54d3a6e 100644
--- a/src/main/java/com/jagrosh/vortex/automod/InviteResolver.java
+++ b/src/main/java/com/jagrosh/vortex/automod/InviteResolver.java
@@ -18,6 +18,8 @@
import com.jagrosh.vortex.utils.FixedCache;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Invite;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
*
@@ -25,15 +27,17 @@
*/
public class InviteResolver
{
- private final FixedCache cached = new FixedCache<>(200);
+ private final Logger log = LoggerFactory.getLogger(InviteResolver.class);
+ private final FixedCache cached = new FixedCache<>(5000);
public long resolve(JDA jda, String code)
{
+ log.debug("Attempting to resolve " + code);
if(cached.contains(code))
return cached.get(code);
try
{
- Invite i = Invite.resolve(jda, code).complete();
+ Invite i = Invite.resolve(jda, code).complete(false);
cached.put(code, i.getGuild().getIdLong());
return i.getGuild().getIdLong();
}
diff --git a/src/main/java/com/jagrosh/vortex/automod/StrikeHandler.java b/src/main/java/com/jagrosh/vortex/automod/StrikeHandler.java
index 5580dcf..8266044 100644
--- a/src/main/java/com/jagrosh/vortex/automod/StrikeHandler.java
+++ b/src/main/java/com/jagrosh/vortex/automod/StrikeHandler.java
@@ -88,7 +88,7 @@
if(punishments.stream().anyMatch(p -> p.action==Action.BAN) && canBan)
{
OtherUtil.safeDM(target, dmmsg + punish(Action.BAN, moderator.getGuild()), isMember,
- () -> moderator.getGuild().getController().ban(target, 7, notimeaudit).queue());
+ () -> moderator.getGuild().ban(target, 7, notimeaudit).queue());
vortex.getDatabase().tempbans.clearBan(moderator.getGuild(), target.getIdLong());
return;
}
@@ -107,7 +107,7 @@
{
int finalBanDuration = banDuration;
OtherUtil.safeDM(target, dmmsg + punishTime(Action.TEMPBAN, moderator.getGuild(), banDuration), isMember,
- () -> moderator.getGuild().getController().ban(target, 7, LogUtil.auditStrikeReasonFormat(moderator, finalBanDuration, counts[0], counts[1], reason)).queue());
+ () -> moderator.getGuild().ban(target, 7, LogUtil.auditStrikeReasonFormat(moderator, finalBanDuration, counts[0], counts[1], reason)).queue());
vortex.getDatabase().tempbans.setBan(moderator.getGuild(), target.getIdLong(), now.plus(banDuration, ChronoUnit.MINUTES));
if(muteDuration>0)
vortex.getDatabase().tempmutes.setMute(moderator.getGuild(), target.getIdLong(), muteTime(now, muteDuration));
@@ -116,8 +116,8 @@
if(punishments.stream().anyMatch(p -> p.action==Action.SOFTBAN) && canBan)
{
OtherUtil.safeDM(target, dmmsg + punish(Action.SOFTBAN, moderator.getGuild()), isMember,
- () -> moderator.getGuild().getController().ban(target, 7, notimeaudit).queue(
- s -> moderator.getGuild().getController().unban(target).reason(notimeaudit).queueAfter(4, TimeUnit.SECONDS)));
+ () -> moderator.getGuild().ban(target, 7, notimeaudit).queue(
+ s -> moderator.getGuild().unban(target).reason(notimeaudit).queueAfter(4, TimeUnit.SECONDS)));
if(muteDuration>0)
vortex.getDatabase().tempmutes.setMute(moderator.getGuild(), target.getIdLong(), muteTime(now, muteDuration));
return;
@@ -128,7 +128,7 @@
if(moderator.getGuild().isMember(target))
{
OtherUtil.safeDM(target, dmmsg + punish(Action.KICK, moderator.getGuild()), isMember,
- () -> moderator.getGuild().getController().kick(target.getId(), notimeaudit).queue());
+ () -> moderator.getGuild().kick(target.getId(), notimeaudit).queue());
}
else
{
@@ -158,7 +158,7 @@
}
else
{
- moderator.getGuild().getController().addSingleRoleToMember(mem, muted)
+ moderator.getGuild().addRoleToMember(mem, muted)
.reason(muteDuration==Integer.MAX_VALUE ? notimeaudit : LogUtil.auditStrikeReasonFormat(moderator, muteDuration, counts[0], counts[1], reason))
.queue();
}
diff --git a/src/main/java/com/jagrosh/vortex/commands/CommandExceptionListener.java b/src/main/java/com/jagrosh/vortex/commands/CommandExceptionListener.java
index 63a097b..fdd7873 100644
--- a/src/main/java/com/jagrosh/vortex/commands/CommandExceptionListener.java
+++ b/src/main/java/com/jagrosh/vortex/commands/CommandExceptionListener.java
@@ -18,6 +18,8 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
import com.jagrosh.jdautilities.command.CommandListener;
+import com.jagrosh.vortex.utils.Usage;
+import net.dv8tion.jda.api.entities.ChannelType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -28,6 +30,7 @@
public class CommandExceptionListener implements CommandListener
{
private final Logger log = LoggerFactory.getLogger("Command");
+ private final Usage usage = new Usage();
@Override
public void onCommandException(CommandEvent event, Command command, Throwable throwable)
@@ -55,4 +58,16 @@
super(message);
}
}
+
+ @Override
+ public void onCommand(CommandEvent event, Command command)
+ {
+ if(event.isFromType(ChannelType.TEXT))
+ usage.increment(event.getGuild().getIdLong());
+ }
+
+ public Usage getUsage()
+ {
+ return usage;
+ }
}
diff --git a/src/main/java/com/jagrosh/vortex/commands/automod/AntiduplicateCmd.java b/src/main/java/com/jagrosh/vortex/commands/automod/AntiduplicateCmd.java
index 594430d..ff72560 100644
--- a/src/main/java/com/jagrosh/vortex/commands/automod/AntiduplicateCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/automod/AntiduplicateCmd.java
@@ -17,7 +17,6 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
-import com.jagrosh.vortex.Constants;
import net.dv8tion.jda.api.Permission;
import com.jagrosh.vortex.Vortex;
import com.jagrosh.vortex.database.managers.PunishmentManager;
@@ -48,7 +47,7 @@
if(event.getArgs().isEmpty() || event.getArgs().equalsIgnoreCase("help"))
{
event.replySuccess("The Anti-Duplicate system prevents and punishes users for sending the same message repeatedly.\n"
- + "Usage: `"+Constants.PREFIX+name+" "+arguments+"`\n"
+ + "Usage: `"+event.getClient().getPrefix()+name+" "+arguments+"`\n"
+ "`` - the number of duplicates at which strikes should start being assigned\n"
+ "`[delete threshold]` - the number of duplicates at which a user's messages should start being deleted\n"
+ "`[strikes]` - the number of strikes to assign on each duplicate after the strike threshold is met");
diff --git a/src/main/java/com/jagrosh/vortex/commands/automod/AutodehoistCmd.java b/src/main/java/com/jagrosh/vortex/commands/automod/AutodehoistCmd.java
index ed659ac..b039870 100644
--- a/src/main/java/com/jagrosh/vortex/commands/automod/AutodehoistCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/automod/AutodehoistCmd.java
@@ -19,7 +19,6 @@
import com.jagrosh.jdautilities.command.CommandEvent;
import net.dv8tion.jda.api.Permission;
import com.jagrosh.vortex.Vortex;
-import com.jagrosh.vortex.automod.AutoMod;
import com.jagrosh.vortex.commands.CommandExceptionListener;
import com.jagrosh.vortex.database.managers.PunishmentManager;
import com.jagrosh.vortex.utils.OtherUtil;
diff --git a/src/main/java/com/jagrosh/vortex/commands/automod/BlacklistCmd.java b/src/main/java/com/jagrosh/vortex/commands/automod/BlacklistCmd.java
deleted file mode 100644
index ebab9bd..0000000
--- a/src/main/java/com/jagrosh/vortex/commands/automod/BlacklistCmd.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2018 John Grosh (john.a.grosh@gmail.com).
- *
- * 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.commands.automod;
-
-import com.jagrosh.jdautilities.command.Command;
-import com.jagrosh.jdautilities.command.CommandEvent;
-import com.jagrosh.vortex.Vortex;
-import net.dv8tion.jda.api.Permission;
-
-/**
- *
- * @author John Grosh (john.a.grosh@gmail.com)
- */
-public class BlacklistCmd extends Command
-{
- private final Vortex vortex;
-
- public BlacklistCmd(Vortex vortex)
- {
- this.vortex = vortex;
- this.guildOnly = true;
- this.name = "blacklist";
- this.category = new Category("AutoMod");
- this.arguments = "[word]";
- this.help = "shows/edits the word blacklist";
- this.userPermissions = new Permission[]{Permission.MANAGE_SERVER};
- }
-
- @Override
- protected void execute(CommandEvent event)
- {
-
- }
-}
diff --git a/src/main/java/com/jagrosh/vortex/commands/automod/FilterCmd.java b/src/main/java/com/jagrosh/vortex/commands/automod/FilterCmd.java
index 2cd0d92..15238b9 100644
--- a/src/main/java/com/jagrosh/vortex/commands/automod/FilterCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/automod/FilterCmd.java
@@ -57,7 +57,7 @@
+ "quote can be checked for by surrounding the word in double quotation marks (\"). \n");
for(Command cmd: children)
{
- sb.append("\n`").append(Constants.PREFIX).append(name).append(" ").append(cmd.getName())
+ sb.append("\n`").append(event.getClient().getPrefix()).append(name).append(" ").append(cmd.getName())
.append(cmd.getArguments() == null ? "" : " " + cmd.getArguments()).append("` - ").append(cmd.getHelp());
}
event.reply(sb.toString());
diff --git a/src/main/java/com/jagrosh/vortex/commands/automod/IgnoreCmd.java b/src/main/java/com/jagrosh/vortex/commands/automod/IgnoreCmd.java
index 42dd3ad..73c8439 100644
--- a/src/main/java/com/jagrosh/vortex/commands/automod/IgnoreCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/automod/IgnoreCmd.java
@@ -37,7 +37,8 @@
}
@Override
- protected void execute(CommandEvent event) {
+ protected void execute(CommandEvent event)
+ {
if(event.getArgs().isEmpty())
{
EmbedBuilder ebuilder = new EmbedBuilder();
diff --git a/src/main/java/com/jagrosh/vortex/commands/automod/UnignoreCmd.java b/src/main/java/com/jagrosh/vortex/commands/automod/UnignoreCmd.java
index 7b40ae2..0110f36 100644
--- a/src/main/java/com/jagrosh/vortex/commands/automod/UnignoreCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/automod/UnignoreCmd.java
@@ -18,7 +18,6 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
import com.jagrosh.jdautilities.commons.utils.FinderUtil;
-import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.Vortex;
import java.util.List;
import net.dv8tion.jda.api.Permission;
@@ -79,7 +78,7 @@
event.replySuccess("Automod is no longer ignoring role `"+roles.get(0).getName()+"`");
else
event.replyError("Automod was not ignoring role `"+roles.get(0).getName()+"`"
- + "\n"+Constants.WARNING+" If this role is still listed when using `"+Constants.PREFIX+"ignore`:"
+ + "\n"+event.getClient().getWarning()+" If this role is still listed when using `"+event.getClient().getPrefix()+"ignore`:"
+ "\n`[can't interact]` - the role is above "+event.getSelfUser().getName()+"'s highest role; try moving the '"+event.getSelfUser().getName()+"' role higher"
+ "\n`[elevated perms]` - the role has one of the following permissions: Kick Members, Ban Members, Manage Server, Manage Messages, Administrator");
}
diff --git a/src/main/java/com/jagrosh/vortex/commands/general/UserinfoCmd.java b/src/main/java/com/jagrosh/vortex/commands/general/UserinfoCmd.java
index 13949c0..a90b39f 100644
--- a/src/main/java/com/jagrosh/vortex/commands/general/UserinfoCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/general/UserinfoCmd.java
@@ -27,9 +27,9 @@
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.Permission;
+import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
-import net.dv8tion.jda.api.utils.MiscUtil;
/**
*
@@ -89,16 +89,16 @@
else
roles=roles.substring(3)+"`";
str+="\n"+LINESTART+"Roles: "+roles;
- str+="\n"+LINESTART+"Status: "+statusToEmote(member.getOnlineStatus(), member.getGame())+"**"+member.getOnlineStatus().name()+"**";
- Game game = member.getGame();
+ str+="\n"+LINESTART+"Status: "+statusToEmote(member.getOnlineStatus(), member.getActivities())+"**"+member.getOnlineStatus().name()+"**";
+ Activity game = member.getActivities().isEmpty() ? null : member.getActivities().get(0);
if(game!=null)
str+=" ("+formatGame(game)+")";
- str+="\n"+LINESTART+"Account Creation: **"+MiscUtil.getDateTimeString(MiscUtil.getCreationTime(user))+"**";
+ str+="\n"+LINESTART+"Account Creation: **"+user.getTimeCreated().format(DateTimeFormatter.RFC_1123_DATE_TIME)+"**";
List joins = new ArrayList<>(event.getGuild().getMembers());
- Collections.sort(joins, (Member a, Member b) -> a.getJoinDate().compareTo(b.getJoinDate()));
+ Collections.sort(joins, (Member a, Member b) -> a.getTimeJoined().compareTo(b.getTimeJoined()));
int index = joins.indexOf(member);
- str+="\n"+LINESTART+"Guild Join Date: **"+member.getJoinDate().format(DateTimeFormatter.RFC_1123_DATE_TIME) + "** `(#"+(index+1)+")`";
+ str+="\n"+LINESTART+"Guild Join Date: **"+member.getTimeJoined().format(DateTimeFormatter.RFC_1123_DATE_TIME) + "** `(#"+(index+1)+")`";
index-=3;
if(index<0)
index=0;
@@ -119,7 +119,7 @@
}
event.reply(new MessageBuilder()
- .append(title)
+ .append(FormatUtil.filterEveryone(title))
.setEmbed(new EmbedBuilder()
.setDescription(str)
.setThumbnail(user.getEffectiveAvatarUrl())
@@ -127,9 +127,10 @@
.build());
}
- private static String statusToEmote(OnlineStatus status, Game game)
+ private static String statusToEmote(OnlineStatus status, List games)
{
- if(game!=null && game.getType()==Game.GameType.STREAMING && game.getUrl()!=null && Game.isValidStreamingUrl(game.getUrl()))
+ Activity game = games.isEmpty() ? null : games.get(0);
+ if(game!=null && game.getType()==Activity.ActivityType.STREAMING && game.getUrl()!=null && Activity.isValidStreamingUrl(game.getUrl()))
return "<:streaming:313956277132853248>";
switch(status) {
case ONLINE: return "<:online:313956277808005120>";
@@ -141,7 +142,7 @@
}
}
- private static String formatGame(Game game)
+ private static String formatGame(Activity game)
{
String str;
switch(game.getType())
diff --git a/src/main/java/com/jagrosh/vortex/commands/moderation/BanCmd.java b/src/main/java/com/jagrosh/vortex/commands/moderation/BanCmd.java
index 6a6efdf..0048356 100644
--- a/src/main/java/com/jagrosh/vortex/commands/moderation/BanCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/moderation/BanCmd.java
@@ -36,6 +36,8 @@
*/
public class BanCmd extends ModCommand
{
+ protected int daysToDelete = 1;
+
public BanCmd(Vortex vortex)
{
super(vortex, Permission.BAN_MEMBERS);
@@ -102,7 +104,7 @@
long uid = ids.get(i);
String id = Long.toString(uid);
boolean last = i+1 == ids.size();
- event.getGuild().ban(id, 1, reason).queue(success ->
+ event.getGuild().ban(id, daysToDelete, reason).queue(success ->
{
builder.append("\n").append(event.getClient().getSuccess()).append(" Successfully banned <@").append(id).append(">").append(time);
if(minutes>0)
diff --git a/src/main/java/com/jagrosh/vortex/commands/moderation/RaidCmd.java b/src/main/java/com/jagrosh/vortex/commands/moderation/RaidCmd.java
index 21bbfc1..b7ce068 100644
--- a/src/main/java/com/jagrosh/vortex/commands/moderation/RaidCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/moderation/RaidCmd.java
@@ -16,7 +16,6 @@
package com.jagrosh.vortex.commands.moderation;
import com.jagrosh.jdautilities.command.CommandEvent;
-import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.Vortex;
import com.jagrosh.vortex.commands.ModCommand;
import net.dv8tion.jda.api.Permission;
@@ -65,8 +64,8 @@
else
{
event.replySuccess("Anti-Raid Mode is currently `"+(active ? "ACTIVE" : "NOT ACTIVE")+"`\n\n"
- + "`"+Constants.PREFIX+name+" ON` to enable Anti-Raid Mode\n"
- + "`"+Constants.PREFIX+name+" OFF` to disable Anti-Raid Mode");
+ + "`"+event.getClient().getPrefix()+name+" ON` to enable Anti-Raid Mode\n"
+ + "`"+event.getClient().getPrefix()+name+" OFF` to disable Anti-Raid Mode");
}
}
}
diff --git a/src/main/java/com/jagrosh/vortex/commands/moderation/SilentbanCmd.java b/src/main/java/com/jagrosh/vortex/commands/moderation/SilentbanCmd.java
new file mode 100644
index 0000000..e59ee70
--- /dev/null
+++ b/src/main/java/com/jagrosh/vortex/commands/moderation/SilentbanCmd.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 John Grosh (john.a.grosh@gmail.com).
+ *
+ * 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.commands.moderation;
+
+import com.jagrosh.vortex.Vortex;
+
+/**
+ *
+ * @author John Grosh (john.a.grosh@gmail.com)
+ */
+public class SilentbanCmd extends BanCmd
+{
+ public SilentbanCmd(Vortex vortex)
+ {
+ super(vortex);
+ this.name = "silentban";
+ this.aliases = new String[]{};
+ this.help = "bans users without deleting messages";
+ this.daysToDelete = 0;
+ }
+}
diff --git a/src/main/java/com/jagrosh/vortex/commands/owner/DebugCmd.java b/src/main/java/com/jagrosh/vortex/commands/owner/DebugCmd.java
index 12370a4..c234bed 100644
--- a/src/main/java/com/jagrosh/vortex/commands/owner/DebugCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/owner/DebugCmd.java
@@ -51,7 +51,7 @@
+ "\nLast Startup: "+FormatUtil.secondsToTime(Constants.STARTUP.until(OffsetDateTime.now(), ChronoUnit.SECONDS))+" ago"
+ "\nGuilds: **"+vortex.getShardManager().getGuildCache().size()+"**"
+ "\nMemory: **"+usedMb+"**Mb / **"+totalMb+"**Mb"
- + "\nAverage Ping: **"+vortex.getShardManager().getAveragePing()+"**ms"
+ + "\nAverage Ping: **"+vortex.getShardManager().getAverageGatewayPing()+"**ms"
+ "\nShard Total: **"+vortex.getShardManager().getShardsTotal()+"**"
+ "\nShard Connectivity: ```diff");
vortex.getShardManager().getShards().forEach(jda -> sb.append("\n").append(jda.getStatus()==JDA.Status.CONNECTED ? "+ " : "- ")
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 c91ffe7..365cf26 100644
--- a/src/main/java/com/jagrosh/vortex/commands/owner/PremiumCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/owner/PremiumCmd.java
@@ -17,7 +17,6 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
-import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.Vortex;
import com.jagrosh.vortex.database.managers.PremiumManager;
import com.jagrosh.vortex.database.managers.PremiumManager.PremiumInfo;
@@ -77,6 +76,6 @@
PremiumInfo before = vortex.getDatabase().premium.getPremiumInfo(guild);
vortex.getDatabase().premium.addPremium(guild, PremiumManager.Level.PRO, seconds, ChronoUnit.SECONDS);
PremiumInfo after = vortex.getDatabase().premium.getPremiumInfo(guild);
- event.replySuccess("Before: " + before + "\n" + Constants.SUCCESS + " After: " + after);
+ event.replySuccess("Before: " + before + "\n" + event.getClient().getSuccess() + " After: " + after);
}
}
diff --git a/src/main/java/com/jagrosh/vortex/commands/settings/PrefixCmd.java b/src/main/java/com/jagrosh/vortex/commands/settings/PrefixCmd.java
index bad623e..5ea0a6a 100644
--- a/src/main/java/com/jagrosh/vortex/commands/settings/PrefixCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/settings/PrefixCmd.java
@@ -17,7 +17,6 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
-import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.Vortex;
import com.jagrosh.vortex.database.managers.GuildSettingsDataManager;
import net.dv8tion.jda.api.Permission;
@@ -46,7 +45,7 @@
{
if(event.getArgs().isEmpty())
{
- event.replyError("Please include a prefix. The server's current prefix can be seen via the `"+Constants.PREFIX+"settings` command");
+ event.replyError("Please include a prefix. The server's current prefix can be seen via the `"+event.getClient().getPrefix()+"settings` command");
return;
}
@@ -65,6 +64,6 @@
vortex.getDatabase().settings.setPrefix(event.getGuild(), event.getArgs());
event.replySuccess("The server prefix has been set to `"+event.getArgs()+"`\n"
- + "Note that the default prefix (`"+Constants.PREFIX+"`) cannot be removed and will work in addition to the custom prefix.");
+ + "Note that the default prefix (`"+event.getClient().getPrefix()+"`) cannot be removed and will work in addition to the custom prefix.");
}
}
diff --git a/src/main/java/com/jagrosh/vortex/commands/settings/SettingsCmd.java b/src/main/java/com/jagrosh/vortex/commands/settings/SettingsCmd.java
index 3328dfb..1a1b472 100644
--- a/src/main/java/com/jagrosh/vortex/commands/settings/SettingsCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/settings/SettingsCmd.java
@@ -18,9 +18,8 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
import com.jagrosh.vortex.Vortex;
-import com.jagrosh.vortex.database.managers.PremiumManager;
import com.jagrosh.vortex.database.managers.PremiumManager.PremiumInfo;
-import java.time.Instant;
+import com.jagrosh.vortex.utils.FormatUtil;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.Permission;
@@ -48,7 +47,7 @@
{
PremiumInfo pi = vortex.getDatabase().premium.getPremiumInfo(event.getGuild());
event.getChannel().sendMessage(new MessageBuilder()
- .append("**"+event.getSelfUser().getName()+"** settings on **"+event.getGuild().getName()+"**:")
+ .append(FormatUtil.filterEveryone("**" + event.getSelfUser().getName() + "** settings on **" + event.getGuild().getName() + "**:"))
.setEmbed(new EmbedBuilder()
//.setThumbnail(event.getGuild().getIconId()==null ? event.getSelfUser().getEffectiveAvatarUrl() : event.getGuild().getIconUrl())
.addField(vortex.getDatabase().settings.getSettingsDisplay(event.getGuild()))
diff --git a/src/main/java/com/jagrosh/vortex/commands/settings/SetupCmd.java b/src/main/java/com/jagrosh/vortex/commands/settings/SetupCmd.java
index 559ebdc..fa9f35b 100644
--- a/src/main/java/com/jagrosh/vortex/commands/settings/SetupCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/settings/SetupCmd.java
@@ -56,7 +56,7 @@
{
StringBuilder sb = new StringBuilder("The following commands can be used to set up a **").append(event.getSelfUser().getName()).append("** feature:\n");
for(Command cmd: children)
- sb.append("\n`").append(Constants.PREFIX).append(name).append(" ").append(cmd.getName()).append("` - ").append(cmd.getHelp());
+ sb.append("\n`").append(event.getClient().getPrefix()).append(name).append(" ").append(cmd.getName()).append("` - ").append(cmd.getHelp());
event.replySuccess(sb.toString());
}
@@ -83,54 +83,54 @@
event.getChannel().sendTyping().queue();
StringBuilder sb = new StringBuilder("**Automod setup complete!**");
if(vortex.getDatabase().actions.useDefaultSettings(event.getGuild()))
- sb.append("\n").append(Constants.SUCCESS).append(" Set up default punishments");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Set up default punishments");
AutomodSettings ams = vortex.getDatabase().automod.getSettings(event.getGuild());
if(ams.inviteStrikes==0)
{
vortex.getDatabase().automod.setInviteStrikes(event.getGuild(), 2);
- sb.append("\n").append(Constants.SUCCESS).append(" Anti-invite set to `2` strikes");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Anti-invite set to `2` strikes");
}
if(ams.refStrikes==0)
{
vortex.getDatabase().automod.setRefStrikes(event.getGuild(), 3);
- sb.append("\n").append(Constants.SUCCESS).append(" Anti-referral set to `3` strikes");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Anti-referral set to `3` strikes");
}
if(!ams.useAntiDuplicate())
{
vortex.getDatabase().automod.setDupeSettings(event.getGuild(), 1, 2, 4);
- sb.append("\n").append(Constants.SUCCESS).append(" Anti-duplicate will start deleting at duplicate `2`, and will assign `1` strike each duplicate starting at duplicate `4`");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Anti-duplicate will start deleting at duplicate `2`, and will assign `1` strike each duplicate starting at duplicate `4`");
}
if(ams.copypastaStrikes==0)
{
vortex.getDatabase().automod.setCopypastaStrikes(event.getGuild(), 1);
- sb.append("\n").append(Constants.SUCCESS).append(" Anti-copypasta set to `1` strikes");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Anti-copypasta set to `1` strikes");
}
if(ams.maxMentions==0)
{
vortex.getDatabase().automod.setMaxMentions(event.getGuild(), 10);
- sb.append("\n").append(Constants.SUCCESS).append(" Maximum mentions set to `10` mentions");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Maximum mentions set to `10` mentions");
}
if(ams.maxRoleMentions==0)
{
vortex.getDatabase().automod.setMaxRoleMentions(event.getGuild(), 4);
- sb.append("\n").append(Constants.SUCCESS).append(" Maximum role mentions set to `4` mentions");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Maximum role mentions set to `4` mentions");
}
if(ams.maxLines==0)
{
vortex.getDatabase().automod.setMaxLines(event.getGuild(), 10);
- sb.append("\n").append(Constants.SUCCESS).append(" Maximum lines set to `10` lines");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Maximum lines set to `10` lines");
}
if(!ams.useAutoRaidMode())
{
vortex.getDatabase().automod.setAutoRaidMode(event.getGuild(), 10, 10);
- sb.append("\n").append(Constants.SUCCESS).append(" Anti-Raid Mode will activate upon `10` joins in `10` seconds");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Anti-Raid Mode will activate upon `10` joins in `10` seconds");
}
if(ams.dehoistChar==(char)0)
{
vortex.getDatabase().automod.setDehoistChar(event.getGuild(), '!');
- sb.append("\n").append(Constants.SUCCESS).append(" Names starting with `!` will be dehoisted");
+ sb.append("\n").append(event.getClient().getSuccess()).append(" Names starting with `!` will be dehoisted");
}
- sb.append("\n").append(Constants.WARNING).append(" Any settings not shown here were not set due to being already set. Please check the automod section of the wiki (<")
+ sb.append("\n").append(event.getClient().getWarning()).append(" Any settings not shown here were not set due to being already set. Please check the automod section of the wiki (<")
.append(Constants.Wiki.AUTOMOD).append(">) for more information about the automod.");
event.replySuccess(sb.toString());
});
@@ -179,7 +179,7 @@
private void setUpMutedRole(CommandEvent event, Role role)
{
- StringBuilder sb = new StringBuilder(Constants.SUCCESS+" Muted role setup started!\n");
+ StringBuilder sb = new StringBuilder(event.getClient().getSuccess()+" Muted role setup started!\n");
event.reply(sb + Constants.LOADING+" Initializing role...", m -> event.async(() ->
{
try
@@ -187,14 +187,14 @@
Role mutedRole;
if(role==null)
{
- mutedRole = event.getGuild().getController().createRole().setName("Muted").setPermissions().setColor(1).complete();
+ mutedRole = event.getGuild().createRole().setName("Muted").setPermissions().setColor(1).complete();
}
else
{
role.getManager().setPermissions().complete();
mutedRole = role;
}
- sb.append(Constants.SUCCESS+" Role initialized!\n");
+ sb.append(event.getClient().getSuccess()).append(" Role initialized!\n");
m.editMessage(sb + Constants.LOADING+" Making Category overrides...").complete();
PermissionOverride po;
for(net.dv8tion.jda.api.entities.Category cat: event.getGuild().getCategories())
@@ -205,7 +205,7 @@
else
po.getManager().deny(Permission.MESSAGE_WRITE, Permission.MESSAGE_ADD_REACTION, Permission.VOICE_CONNECT, Permission.VOICE_SPEAK).complete();
}
- sb.append(Constants.SUCCESS+" Category overrides complete!\n");
+ sb.append(event.getClient().getSuccess()).append(" Category overrides complete!\n");
m.editMessage(sb + Constants.LOADING + " Making Text Channel overrides...").complete();
for(TextChannel tc: event.getGuild().getTextChannels())
{
@@ -215,7 +215,7 @@
else
po.getManager().deny(Permission.MESSAGE_WRITE, Permission.MESSAGE_ADD_REACTION).complete();
}
- sb.append(Constants.SUCCESS+" Text Channel overrides complete!\n");
+ sb.append(event.getClient().getSuccess()).append(" Text Channel overrides complete!\n");
m.editMessage(sb + Constants.LOADING + " Making Voice Channel overrides...").complete();
for(VoiceChannel vc: event.getGuild().getVoiceChannels())
{
@@ -225,11 +225,11 @@
else
po.getManager().deny(Permission.VOICE_CONNECT, Permission.VOICE_SPEAK).complete();
}
- m.editMessage(sb + Constants.SUCCESS+" Voice Channel overrides complete!\n\n" + Constants.SUCCESS+" Muted role setup has completed!").queue();
+ m.editMessage(sb + event.getClient().getSuccess()+" Voice Channel overrides complete!\n\n" + event.getClient().getSuccess()+" Muted role setup has completed!").queue();
}
catch(Exception ex)
{
- m.editMessage(sb + Constants.ERROR+" An error occurred setting up the Muted role. Please check that I have the Administrator permission and that the Muted role is below my roles.").queue();
+ m.editMessage(sb + event.getClient().getError()+" An error occurred setting up the Muted role. Please check that I have the Administrator permission and that the Muted role is below my roles.").queue();
}
}));
}
@@ -240,7 +240,7 @@
.setChoices(CONFIRM, CANCEL)
.setEventWaiter(vortex.getEventWaiter())
.setTimeout(1, TimeUnit.MINUTES)
- .setText(Constants.WARNING+" "+message+"\n\n"+CONFIRM+" Continue\n"+CANCEL+" Cancel")
+ .setText(event.getClient().getWarning()+" "+message+"\n\n"+CONFIRM+" Continue\n"+CANCEL+" Cancel")
.setFinalAction(m -> m.delete().queue(s->{}, f->{}))
.setUsers(event.getAuthor())
.setAction(re ->
diff --git a/src/main/java/com/jagrosh/vortex/commands/tools/AuditCmd.java b/src/main/java/com/jagrosh/vortex/commands/tools/AuditCmd.java
index aca09dd..b42af66 100644
--- a/src/main/java/com/jagrosh/vortex/commands/tools/AuditCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/tools/AuditCmd.java
@@ -18,7 +18,6 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
import com.jagrosh.jdautilities.commons.utils.FinderUtil;
-import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.commands.CommandExceptionListener.CommandErrorException;
import com.jagrosh.vortex.commands.CommandExceptionListener.CommandWarningException;
import com.jagrosh.vortex.utils.FormatUtil;
@@ -28,6 +27,7 @@
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.audit.ActionType;
+import net.dv8tion.jda.api.audit.AuditLogChange;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.TextChannel;
@@ -99,9 +99,9 @@
break;
default:
throw new CommandErrorException("Valid subcommands:\n\n"
- + "`" + Constants.PREFIX + name + " all` - shows recent audit log entries\n"
- + "`" + Constants.PREFIX + name + " from ` - shows recent entries by a user\n"
- + "`" + Constants.PREFIX + name + " action ` shows recent entries of a certain action");
+ + "`" + event.getClient().getPrefix() + name + " all` - shows recent audit log entries\n"
+ + "`" + event.getClient().getPrefix() + name + " from ` - shows recent entries by a user\n"
+ + "`" + event.getClient().getPrefix() + name + " action ` shows recent entries of a certain action");
}
event.getChannel().sendTyping().queue();
action.queue(list ->
@@ -155,10 +155,12 @@
}
ale.getChanges().keySet().forEach(change ->
{
- sb.append("\n").append(LINESTART).append(fixCase(change)).append(": ")
- .append(ale.getChangeByKey(change).getOldValue()==null ? "" : "**"+ale.getChangeByKey(change).getOldValue()+"**")
- .append(ale.getChangeByKey(change).getOldValue()==null || ale.getChangeByKey(change).getNewValue()==null ? "" : " → ")
- .append(ale.getChangeByKey(change).getNewValue()==null ? "" : "**"+ale.getChangeByKey(change).getNewValue()+"**");
+ AuditLogChange alc = ale.getChangeByKey(change);
+ if(alc != null)
+ sb.append("\n").append(LINESTART).append(fixCase(change)).append(": ")
+ .append(alc.getOldValue()==null ? "" : "**"+alc.getOldValue()+"**")
+ .append(alc.getOldValue()==null || alc.getNewValue()==null ? "" : " → ")
+ .append(alc.getNewValue()==null ? "" : "**"+alc.getNewValue()+"**");
});
ale.getOptions().keySet().forEach(option ->
{
@@ -172,7 +174,7 @@
eb.addField(actionToEmote(ale.getType())+" "+fixCase(ale.getType().name()), str, true);
});
event.reply(new MessageBuilder()
- .setContent(Constants.SUCCESS+" Recent Audit Logs in **"+FormatUtil.filterEveryone(event.getGuild().getName())+"**:")
+ .setContent(event.getClient().getSuccess()+" Recent Audit Logs in **"+FormatUtil.filterEveryone(event.getGuild().getName())+"**:")
.setEmbed(eb.build()).build());
}, f -> event.replyWarning("Failed to retrieve audit logs"));
}
diff --git a/src/main/java/com/jagrosh/vortex/commands/tools/InvitepruneCmd.java b/src/main/java/com/jagrosh/vortex/commands/tools/InvitepruneCmd.java
index bc48c86..d5e3dcd 100644
--- a/src/main/java/com/jagrosh/vortex/commands/tools/InvitepruneCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/tools/InvitepruneCmd.java
@@ -91,7 +91,7 @@
.setChoices(CONFIRM, CANCEL)
.setEventWaiter(vortex.getEventWaiter())
.setTimeout(1, TimeUnit.MINUTES)
- .setText(Constants.WARNING+" "+message+"\n\n"+CONFIRM+" Continue\n"+CANCEL+" Cancel")
+ .setText(event.getClient().getWarning()+" "+message+"\n\n"+CONFIRM+" Continue\n"+CANCEL+" Cancel")
.setFinalAction(m -> m.delete().queue(s->{}, f->{}))
.setUsers(event.getAuthor())
.setAction(re ->
diff --git a/src/main/java/com/jagrosh/vortex/commands/tools/LookupCmd.java b/src/main/java/com/jagrosh/vortex/commands/tools/LookupCmd.java
index fdb9acf..dd69e91 100644
--- a/src/main/java/com/jagrosh/vortex/commands/tools/LookupCmd.java
+++ b/src/main/java/com/jagrosh/vortex/commands/tools/LookupCmd.java
@@ -18,6 +18,7 @@
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
import com.jagrosh.vortex.Vortex;
+import com.jagrosh.vortex.utils.FormatUtil;
import java.time.format.DateTimeFormatter;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.MessageBuilder;
@@ -28,6 +29,8 @@
import net.dv8tion.jda.api.utils.MiscUtil;
import net.dv8tion.jda.api.utils.WidgetUtil;
import net.dv8tion.jda.api.utils.WidgetUtil.Widget;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
*
@@ -40,7 +43,9 @@
private final static String GUILD_EMOJI = "\uD83D\uDDA5"; // 🖥
private final static String LINESTART = "\u25AB"; // ▫
+ private final Logger log = LoggerFactory.getLogger(LookupCmd.class);
private final Vortex vortex;
+ private boolean debug = true;
public LookupCmd(Vortex vortex)
{
@@ -55,6 +60,11 @@
@Override
protected void execute(CommandEvent event)
{
+ if(event.isFromType(ChannelType.TEXT) && event.getMember().getRoles().isEmpty())
+ {
+ event.reactError();
+ return;
+ }
if(event.getArgs().isEmpty())
{
event.replyError("Please provide a User ID, Server ID, or Invite Code\n"
@@ -63,6 +73,12 @@
return;
}
event.getChannel().sendTyping().queue();
+ log.info(event.getGuild().getId() + " - " + event.getMember().getUser().getId() + ": " + event.getMessage().getContentRaw());
+ if(debug && event.getGuild().getMemberById(113156185389092864L)==null && event.getGuild().getMemberById(194257036828082176L)==null)
+ {
+ event.reactError();
+ return;
+ }
event.async(() ->
{
try
@@ -82,9 +98,9 @@
String str = LINESTART+"Discord ID: **"+u.getId()+"**";
if(u.getAvatarId()!=null && u.getAvatarId().startsWith("a_"))
str+= " <:nitro:314068430611415041>";
- str+="\n"+LINESTART+"Account Creation: **"+MiscUtil.getDateTimeString(u.getTimeCreated())+"**";
+ str+="\n"+LINESTART+"Account Creation: **"+u.getTimeCreated().format(DateTimeFormatter.RFC_1123_DATE_TIME)+"**";
eb.setDescription(str);
- event.reply(new MessageBuilder().append(text).setEmbed(eb.build()).build());
+ event.reply(new MessageBuilder().append(FormatUtil.filterEveryone(text)).setEmbed(eb.build()).build());
return;
}
@@ -124,7 +140,7 @@
}
}
eb.setDescription(str);
- event.reply(new MessageBuilder().append(text).setEmbed(eb.build()).build());
+ event.reply(new MessageBuilder().append(FormatUtil.filterEveryone(text)).setEmbed(eb.build()).build());
return;
}
}
@@ -174,7 +190,7 @@
eb.setImage(inv.getGuild().getSplashUrl()+"?size=1024");
}
eb.addField("Guild Info", str, false);
- event.reply(new MessageBuilder().append(text).setEmbed(eb.build()).build());
+ event.reply(new MessageBuilder().append(FormatUtil.filterEveryone(text)).setEmbed(eb.build()).build());
});
}
}
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/AutomodManager.java b/src/main/java/com/jagrosh/vortex/database/managers/AutomodManager.java
index e9647e0..d46cb22 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/AutomodManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/AutomodManager.java
@@ -20,6 +20,7 @@
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.*;
import com.jagrosh.vortex.Action;
+import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.utils.FixedCache;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -60,7 +61,7 @@
public final static SQLColumn DEHOIST_CHAR = new IntegerColumn("DEHOIST_CHAR", false, 0);
// Cache
- private final FixedCache cache = new FixedCache<>(1000);
+ private final FixedCache cache = new FixedCache<>(Constants.DEFAULT_CACHE_SIZE);
private final AutomodSettings blankSettings = new AutomodSettings();
public AutomodManager(DatabaseConnector connector)
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/FilterManager.java b/src/main/java/com/jagrosh/vortex/database/managers/FilterManager.java
index 58ea5b2..96b79e5 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/FilterManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/FilterManager.java
@@ -20,6 +20,7 @@
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.*;
import com.jagrosh.vortex.Action;
+import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.automod.Filter;
import com.jagrosh.vortex.utils.FixedCache;
import java.util.ArrayList;
@@ -42,7 +43,7 @@
public final static SQLColumn STRIKES = new IntegerColumn("STRIKES", false, 0);
public final static SQLColumn CONTENT = new StringColumn("CONTENT", false, "", Filter.MAX_CONTENT_LENGTH);
- private final FixedCache> cache = new FixedCache<>(1000);
+ private final FixedCache> cache = new FixedCache<>(Constants.DEFAULT_CACHE_SIZE);
public FilterManager(DatabaseConnector connector)
{
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/GuildSettingsDataManager.java b/src/main/java/com/jagrosh/vortex/database/managers/GuildSettingsDataManager.java
index e1e49ab..6b97446 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/GuildSettingsDataManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/GuildSettingsDataManager.java
@@ -63,7 +63,7 @@
// level to set permission when finished
// Cache
- private final FixedCache cache = new FixedCache<>(1000);
+ private final FixedCache cache = new FixedCache<>(Constants.DEFAULT_CACHE_SIZE);
private final GuildSettings blankSettings = new GuildSettings();
public GuildSettingsDataManager(DatabaseConnector connector)
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/IgnoreManager.java b/src/main/java/com/jagrosh/vortex/database/managers/IgnoreManager.java
index 577eb47..1920919 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/IgnoreManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/IgnoreManager.java
@@ -19,11 +19,12 @@
import com.jagrosh.easysql.DatabaseConnector;
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.*;
+import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.utils.FixedCache;
-import java.sql.ResultSet;
-import java.util.LinkedList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
@@ -39,7 +40,7 @@
public final static SQLColumn ENTITY_ID = new LongColumn("ENTITY_ID",false,0L,true);
public final static SQLColumn TYPE = new IntegerColumn("TYPE",false,0);
- private final FixedCache> cache = new FixedCache<>(1000);
+ private final FixedCache> cache = new FixedCache<>(Constants.DEFAULT_CACHE_SIZE);
public IgnoreManager(DatabaseConnector connector)
{
@@ -48,32 +49,45 @@
public boolean isIgnored(TextChannel tc)
{
- return read(select(ENTITY_ID.is(tc.getIdLong()), ENTITY_ID), ResultSet::next);
+ return getIgnores(tc.getGuild()).contains(tc.getIdLong());
}
public boolean isIgnored(Member member)
{
- if(cache.contains(member.getGuild().getIdLong()))
- {
- for(long rid: cache.get(member.getGuild().getIdLong()))
- if(member.getRoles().stream().anyMatch(r -> r.getIdLong()==rid))
- return true;
- return false;
- }
- return read(select(GUILD_ID.is(member.getGuild().getId())+" AND "+TYPE.is(Type.ROLE.ordinal()), ENTITY_ID), rs ->
- {
- while(rs.next())
- {
- long id = ENTITY_ID.getValue(rs);
- if(member.getRoles().stream().anyMatch(r -> r.getIdLong()==id))
- return true;
- }
- return false;
- });
+ Set ignored = getIgnores(member.getGuild());
+ return member.getRoles().stream().anyMatch(r -> ignored.contains(r.getIdLong()));
}
+ public List getIgnoredChannels(Guild guild)
+ {
+ return getIgnores(guild).stream().map(l -> guild.getTextChannelById(l)).filter(t -> t != null).collect(Collectors.toList());
+ }
+
+ public List getIgnoredRoles(Guild guild)
+ {
+ return getIgnores(guild).stream().map(l -> guild.getRoleById(l)).filter(r -> r != null).collect(Collectors.toList());
+ }
+
+ private Set getIgnores(Guild guild)
+ {
+ long gid = guild.getIdLong();
+ if(cache.contains(gid))
+ return cache.get(gid);
+ Set ret = read(selectAll(GUILD_ID.is(gid)), rs ->
+ {
+ Set set = new HashSet<>();
+ while(rs.next())
+ set.add(ENTITY_ID.getValue(rs));
+ return set;
+ });
+ cache.put(gid, ret);
+ return ret;
+ }
+
+ // set things in database
public boolean ignore(TextChannel tc)
{
+ invalidateCache(tc.getGuild());
return readWrite(selectAll(GUILD_ID.is(tc.getGuild().getIdLong())+" AND "+ENTITY_ID.is(tc.getIdLong())), rs ->
{
if(rs.next())
@@ -103,49 +117,9 @@
});
}
- public List getIgnoredChannels(Guild guild)
- {
- return read(selectAll(GUILD_ID.is(guild.getIdLong())+" AND "+TYPE.is(Type.TEXT_CHANNEL.ordinal())), rs ->
- {
- List list = new LinkedList<>();
- while(rs.next())
- {
- TextChannel tc = guild.getTextChannelById(ENTITY_ID.getValue(rs));
- if(tc!=null)
- list.add(tc);
- }
- return list;
- });
- }
-
- public List getIgnoredRoles(Guild guild)
- {
- if(cache.contains(guild.getIdLong()))
- {
- List list = new LinkedList<>();
- for(long rid: cache.get(guild.getIdLong()))
- {
- Role role = guild.getRoleById(rid);
- if(role!=null)
- list.add(role);
- }
- return list;
- }
- return read(selectAll(GUILD_ID.is(guild.getIdLong())+" AND "+TYPE.is(Type.ROLE.ordinal())), rs ->
- {
- List list = new LinkedList<>();
- while(rs.next())
- {
- Role role = guild.getRoleById(ENTITY_ID.getValue(rs));
- if(role!=null)
- list.add(role);
- }
- return list;
- });
- }
-
public boolean unignore(TextChannel tc)
{
+ invalidateCache(tc.getGuild());
return readWrite(selectAll(GUILD_ID.is(tc.getGuild().getIdLong())+" AND "+ENTITY_ID.is(tc.getIdLong())), rs ->
{
if(rs.next())
diff --git a/src/main/java/com/jagrosh/vortex/database/managers/InviteWhitelistManager.java b/src/main/java/com/jagrosh/vortex/database/managers/InviteWhitelistManager.java
index cd9bd7a..9656c35 100644
--- a/src/main/java/com/jagrosh/vortex/database/managers/InviteWhitelistManager.java
+++ b/src/main/java/com/jagrosh/vortex/database/managers/InviteWhitelistManager.java
@@ -4,6 +4,7 @@
import com.jagrosh.easysql.DatabaseConnector;
import com.jagrosh.easysql.SQLColumn;
import com.jagrosh.easysql.columns.LongColumn;
+import com.jagrosh.vortex.Constants;
import com.jagrosh.vortex.utils.FixedCache;
import net.dv8tion.jda.api.entities.Guild;
import org.slf4j.LoggerFactory;
@@ -26,7 +27,7 @@
public static final SQLColumn GUILD_ID = new LongColumn("GUILD_ID", false, 0L);
public static final SQLColumn WHITELIST_ID = new LongColumn("WL_ID", false, 0L);
- private final FixedCache> cache = new FixedCache<>(1000);
+ private final FixedCache> cache = new FixedCache<>(Constants.DEFAULT_CACHE_SIZE);
public InviteWhitelistManager(DatabaseConnector connector)
{
diff --git a/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java b/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java
index fd17caf..b2b20a5 100644
--- a/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java
+++ b/src/main/java/com/jagrosh/vortex/logging/BasicLogger.java
@@ -19,6 +19,7 @@
import com.jagrosh.vortex.logging.MessageCache.CachedMessage;
import com.jagrosh.vortex.utils.FormatUtil;
import com.jagrosh.vortex.utils.LogUtil;
+import com.jagrosh.vortex.utils.Usage;
import com.typesafe.config.Config;
import java.awt.Color;
import java.time.OffsetDateTime;
@@ -62,6 +63,7 @@
private final Vortex vortex;
private final AvatarSaver avatarSaver;
+ private final Usage usage = new Usage();
public BasicLogger(Vortex vortex, Config config)
{
@@ -69,10 +71,16 @@
this.avatarSaver = new AvatarSaver(config);
}
+ public Usage getUsage()
+ {
+ return usage;
+ }
+
private void log(OffsetDateTime now, TextChannel tc, String emote, String message, MessageEmbed embed)
{
try
{
+ usage.increment(tc.getGuild().getIdLong());
tc.sendMessage(new MessageBuilder()
.append(FormatUtil.filterEveryone(LogUtil.basiclogFormat(now, vortex.getDatabase().settings.getSettings(tc.getGuild()).getTimezone(), emote, message)))
.setEmbed(embed)
@@ -85,9 +93,9 @@
{
try
{
- tc.sendFile(file, filename, new MessageBuilder()
- .append(FormatUtil.filterEveryone(LogUtil.basiclogFormat(now, vortex.getDatabase().settings.getSettings(tc.getGuild()).getTimezone(), emote, message)))
- .build()).queue();
+ usage.increment(tc.getGuild().getIdLong());
+ tc.sendMessage(FormatUtil.filterEveryone(LogUtil.basiclogFormat(now, vortex.getDatabase().settings.getSettings(tc.getGuild()).getTimezone(), emote, message)))
+ .addFile(file, filename).queue();
}
catch(PermissionException ignore) {}
}
diff --git a/src/main/java/com/jagrosh/vortex/logging/MessageCache.java b/src/main/java/com/jagrosh/vortex/logging/MessageCache.java
index 965c6d1..12dd3e6 100644
--- a/src/main/java/com/jagrosh/vortex/logging/MessageCache.java
+++ b/src/main/java/com/jagrosh/vortex/logging/MessageCache.java
@@ -113,6 +113,11 @@
return g.getTextChannelById(channel);
}
+ public long getTextChannelId()
+ {
+ return channel;
+ }
+
public TextChannel getTextChannel(Guild guild)
{
return guild.getTextChannelById(channel);
diff --git a/src/main/java/com/jagrosh/vortex/logging/ModLogger.java b/src/main/java/com/jagrosh/vortex/logging/ModLogger.java
index 9faa9ec..f4cce32 100644
--- a/src/main/java/com/jagrosh/vortex/logging/ModLogger.java
+++ b/src/main/java/com/jagrosh/vortex/logging/ModLogger.java
@@ -214,7 +214,7 @@
Role mRole = gs.getMutedRole(guild);
try
{
- List list = guild.getAuditLogs().cache(false).limit(limit).submit().get(30, TimeUnit.SECONDS);
+ List list = guild.retrieveAuditLogs().cache(false).limit(limit).submit().get(30, TimeUnit.SECONDS);
for(AuditLogEntry ale: vortex.getDatabase().auditcache.filterUncheckedEntries(list))
{
Action act = null;
diff --git a/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java b/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java
index d467911..91c4565 100644
--- a/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java
+++ b/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java
@@ -45,7 +45,8 @@
public static String filterEveryone(String input)
{
- return input.replace("@everyone","@\u0435veryone") // cyrillic e
+ return input.replace("\u202E","") // RTL override
+ .replace("@everyone","@\u0435veryone") // cyrillic e
.replace("@here","@h\u0435re") // cyrillic e
.replace("discord.gg/", "dis\u0441ord.gg/"); // cyrillic c
}
@@ -259,7 +260,7 @@
if(event.getArgs().isEmpty())
{
commandsInCategory = Collections.EMPTY_LIST;
- content = Constants.SUCCESS+" **"+event.getSelfUser().getName()+"** Commands Categories:";
+ content = event.getClient().getSuccess()+" **"+event.getSelfUser().getName()+"** Commands Categories:";
}
else
{
@@ -272,29 +273,29 @@
return cmd.getCategory().getName().toLowerCase().startsWith(event.getArgs().toLowerCase());
}).collect(Collectors.toList());
if(commandsInCategory.isEmpty())
- content = Constants.WARNING+" No Category `"+event.getArgs()+"` found.";
+ content = event.getClient().getWarning()+" No Category `"+event.getArgs()+"` found.";
else
- content = Constants.SUCCESS+" **"+event.getSelfUser().getName()+"** "
+ content = event.getClient().getSuccess()+" **"+event.getSelfUser().getName()+"** "
+(commandsInCategory.get(0).getCategory()==null ? "General" : commandsInCategory.get(0).getCategory().getName())
+" Commands:";
}
if(commandsInCategory.isEmpty())
{
- builder.addField(CMD_EMOJI+" General Commands", "[**"+Constants.PREFIX+"help general**]("+Constants.Wiki.COMMANDS+"#-general-commands)\n\u200B", false);
+ builder.addField(CMD_EMOJI+" General Commands", "[**"+event.getClient().getPrefix()+"help general**]("+Constants.Wiki.COMMANDS+"#-general-commands)\n\u200B", false);
event.getClient().getCommands().stream().filter(cmd -> cmd.getCategory()!=null).map(cmd -> cmd.getCategory().getName()).distinct()
- .forEach(cat -> builder.addField(CMD_EMOJI+" "+cat+" Commands", "[**"+Constants.PREFIX+"help "+cat.toLowerCase()+"**]("
+ .forEach(cat -> builder.addField(CMD_EMOJI+" "+cat+" Commands", "[**"+event.getClient().getPrefix()+"help "+cat.toLowerCase()+"**]("
+Constants.Wiki.COMMANDS+"#-"+cat.toLowerCase()+"-commands)\n\u200B", false));
}
else
{
- commandsInCategory.forEach(cmd -> builder.addField(Constants.PREFIX+cmd.getName()+(cmd.getArguments()==null ? "" : " "+cmd.getArguments()),
+ commandsInCategory.forEach(cmd -> builder.addField(event.getClient().getPrefix()+cmd.getName()+(cmd.getArguments()==null ? "" : " "+cmd.getArguments()),
"[**"+cmd.getHelp()+"**]("+Constants.Wiki.COMMANDS+"#-"+(cmd.getCategory()==null?"general":cmd.getCategory().getName().toLowerCase())+"-commands)\n\u200B", false));
}
builder.addField("Additional Help", helpLinks(event), false);
- return new MessageBuilder().append(content).setEmbed(builder.build()).build();
+ return new MessageBuilder().append(filterEveryone(content)).setEmbed(builder.build()).build();
}
public static String helpLinks(CommandEvent event)
diff --git a/src/main/java/com/jagrosh/vortex/utils/Usage.java b/src/main/java/com/jagrosh/vortex/utils/Usage.java
new file mode 100644
index 0000000..b0803a6
--- /dev/null
+++ b/src/main/java/com/jagrosh/vortex/utils/Usage.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2020 John Grosh (john.a.grosh@gmail.com).
+ *
+ * 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.utils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author John Grosh (john.a.grosh@gmail.com)
+ */
+public class Usage
+{
+ private final HashMap map = new HashMap<>();
+
+ public void increment(long key)
+ {
+ map.put(key, map.getOrDefault(key, 0) + 1);
+ }
+
+ public Map getMap()
+ {
+ return map;
+ }
+
+ public List> higher(int val)
+ {
+ return map.entrySet().stream().filter(e -> e.getValue() >= val).collect(Collectors.toList());
+ }
+}
diff --git a/src/test/java/com/jagrosh/vortex/FilterTest.java b/src/test/java/com/jagrosh/vortex/FilterTest.java
new file mode 100644
index 0000000..24bc007
--- /dev/null
+++ b/src/test/java/com/jagrosh/vortex/FilterTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2019 John Grosh (john.a.grosh@gmail.com).
+ *
+ * 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;
+
+import com.jagrosh.vortex.automod.Filter.Glob;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author John Grosh (john.a.grosh@gmail.com)
+ */
+public class FilterTest
+{
+ @Test
+ public void globTest()
+ {
+ Glob glob;
+
+ assertTrue('0' < '9');
+
+ glob = new Glob("get");
+ assertFalse(glob.test("go together now"));
+ assertFalse(glob.test("go to gether now"));
+ assertFalse(glob.test("go toget her now"));
+ assertTrue(glob.test("go to get her now"));
+
+ glob = new Glob("*get");
+ assertFalse(glob.test("go together now"));
+ assertFalse(glob.test("go to gether now"));
+ assertTrue(glob.test("go toget her now"));
+ assertTrue(glob.test("go to get her now"));
+
+ glob = new Glob("get*");
+ assertFalse(glob.test("go together now"));
+ assertTrue(glob.test("go to gether now"));
+ assertFalse(glob.test("go toget her now"));
+ assertTrue(glob.test("go to get her now"));
+
+ glob = new Glob("*get*");
+ assertTrue(glob.test("go together now"));
+ assertTrue(glob.test("go to gether now"));
+ assertTrue(glob.test("go toget her now"));
+ assertTrue(glob.test("go to get her now"));
+
+ glob = new Glob("get");
+ assertTrue(glob.test("I for get"));
+ assertFalse(glob.test("I forget"));
+
+ glob = new Glob("get");
+ assertTrue(glob.test("get the food"));
+ assertFalse(glob.test("getthe food"));
+ }
+}