diff --git a/lists/referral_domains.txt b/lists/referral_domains.txt index 2ed804a..bdf2b44 100644 --- a/lists/referral_domains.txt +++ b/lists/referral_domains.txt @@ -89,9 +89,15 @@ makeprogress.ga pointsprizes.com selly.gg +shoppy.gg weeklyjob.online wn.nr +// NSFW Spam Sites +nakedphotos.club +privatepage.vip +viewc.site + // Coin Miners baymack.com btconline.io @@ -103,6 +109,8 @@ // Scams amazingsexdating.com easter-event.com +fortnite.cards +fortnite.events fortnite-christmas.com fortnite-gifts.com fortnite-giveaway.com diff --git a/pom.xml b/pom.xml index fe17719..4dcac6d 100644 --- a/pom.xml +++ b/pom.xml @@ -18,18 +18,13 @@ jcenter-bintray http://jcenter.bintray.com - - sonatype - sonatype-snapshots - https://oss.sonatype.org/content/repositories/snapshots/ - net.dv8tion JDA - 3.8.2_459 + 3.8.3_463 com.jagrosh @@ -40,7 +35,7 @@ com.jagrosh EasySQL - 0.2 + 0.3 ch.qos.logback @@ -48,9 +43,14 @@ 1.2.3 + com.typesafe + config + 1.3.2 + + com.jagrosh Vortex-Pro - 0.1 + 0.2 diff --git a/src/main/java/com/jagrosh/vortex/Vortex.java b/src/main/java/com/jagrosh/vortex/Vortex.java index 1fc0f2f..38591d1 100644 --- a/src/main/java/com/jagrosh/vortex/Vortex.java +++ b/src/main/java/com/jagrosh/vortex/Vortex.java @@ -42,6 +42,9 @@ import com.jagrosh.vortex.logging.TextUploader; import com.jagrosh.vortex.utils.BlockingSessionController; import com.jagrosh.vortex.utils.FormatUtil; +import com.jagrosh.vortex.utils.OtherUtil; +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; import java.util.EnumSet; import java.util.concurrent.TimeUnit; import net.dv8tion.jda.bot.sharding.DefaultShardManagerBuilder; @@ -72,36 +75,22 @@ public Vortex() throws Exception { - /** - * Tokens: - * 0 - bot token - * 1 - bots.discord.pw token - * 2 - other token 1 (unused) - * 3 - other token 2 (unused) - * 4 - database location - * 5 - database username - * 6 - database password - * 7 - log webhook url - * 8 - guild id : category id - * 9 - number of shards - * 10 - url resolver url - * 11 - url resolver secret - */ - List tokens = Files.readAllLines(Paths.get("config.txt")); + System.setProperty("config.file", System.getProperty("config.file", "application.conf")); + Config config = ConfigFactory.load(); waiter = new EventWaiter(Executors.newSingleThreadScheduledExecutor(), false); threadpool = Executors.newScheduledThreadPool(50); - database = new Database(tokens.get(4), tokens.get(5), tokens.get(6)); - String[] split = tokens.get(8).split(":"); - uploader = new TextUploader(this, Long.parseLong(split[0].trim()), Long.parseLong(split[1].trim())); + database = new Database(config.getString("database.host"), + config.getString("database.username"), + config.getString("database.password")); + uploader = new TextUploader(this, config.getLong("uploader.guild"), config.getLong("uploader.category")); modlog = new ModLogger(this); basiclog = new BasicLogger(this); messages = new MessageCache(); - logwebhook = new WebhookClientBuilder(tokens.get(7)).build(); - automod = new AutoMod(this, tokens); + logwebhook = new WebhookClientBuilder(config.getString("webhook-url")).build(); + automod = new AutoMod(this, config.getString("url-resolver.url"), config.getString("url-resolver.secret")); strikehandler = new StrikeHandler(this); CommandClient client = new CommandClientBuilder() .setPrefix(Constants.PREFIX) - //.setGame(Game.watching("Type "+Constants.PREFIX+"help")) .setGame(Game.playing(Constants.Wiki.SHORT_WIKI)) .setOwnerId(Constants.OWNER_ID) .setServerInvite(Constants.SERVER_INVITE) @@ -111,9 +100,8 @@ .setListener(new CommandExceptionListener()) .setScheduleExecutor(threadpool) .setShutdownAutomatically(false) - .addCommands(// General - //new AboutCommand(Color.CYAN, "and I'm here to keep your Discord server safe and make moderating easy!", - // new String[]{"Moderation commands","Configurable automoderation","Very easy setup"},Constants.PERMISSIONS), + .addCommands( + // General new AboutCmd(), new InviteCmd(), new PingCommand(), @@ -174,8 +162,8 @@ // Owner new EvalCmd(this), new DebugCmd(this), - new ReloadCmd(this), - new TransferCmd(this) + new ReloadCmd(this) + //new TransferCmd(this) ) .setHelpConsumer(event -> event.replyInDm(FormatUtil.formatHelp(event, this), m -> { @@ -185,13 +173,12 @@ event.getMessage().addReaction(Constants.HELP_REACTION).queue(s->{}, f->{}); } catch(PermissionException ignore) {} }, t -> event.replyWarning("Help cannot be sent because you are blocking Direct Messages."))) - .setDiscordBotsKey(tokens.get(1)) - //.setCarbonitexKey(tokens.get(2)) - //.setDiscordBotListKey(tokens.get(3)) + .setDiscordBotsKey(config.getString("listing.discord-bots")) + //.setCarbonitexKey(config.getString("listing.carbon")) .build(); shards = new DefaultShardManagerBuilder() - .setShardsTotal(Integer.parseInt(tokens.get(9))) - .setToken(tokens.get(0)) + .setShardsTotal(config.getInt("shards-total")) + .setToken(config.getString("bot-token")) .addEventListeners(new Listener(this), client, waiter) .setStatus(OnlineStatus.DO_NOT_DISTURB) .setGame(Game.playing("loading...")) @@ -208,6 +195,8 @@ threadpool.scheduleWithFixedDelay(() -> System.gc(), 12, 6, TimeUnit.HOURS); } + + // Getters public EventWaiter getEventWaiter() { return waiter; @@ -263,6 +252,8 @@ return strikehandler; } + + // Global methods public void cleanPremium() { database.premium.cleanPremiumList().forEach((gid) -> @@ -279,7 +270,7 @@ if(!g.isAvailable()) return false; int botcount = (int)g.getMemberCache().stream().filter(m -> m.getUser().isBot()).count(); - if(g.getMemberCache().size()-botcount<15 || (botcount>20 && ((double)botcount/g.getMemberCache().size())>0.65)) + if(g.getMemberCache().size()-botcount<15 || (botcount>20 && ((double)botcount/g.getMemberCache().size())>0.5)) { if(database.settings.hasSettings(g)) return false; @@ -288,9 +279,17 @@ return true; } return false; - }).forEach(g -> g.leave().queue()); + }).forEach(g -> + { + OtherUtil.safeDM(g.getOwner()==null ? null : g.getOwner().getUser(), Constants.ERROR + " Sorry, your server **" + + g.getName() + "** does not meet the minimum requirements for using Vortex. You can find the requirements " + + "here: <" + Constants.Wiki.START + ">. \n\n" + Constants.WARNING + "You may want to consider using a " + + "different bot that is designed for servers like yours. You can find a public list of bots here: " + + ".", true, () -> g.leave().queue()); + }); } + /** * @param args the command line arguments * @throws java.lang.Exception diff --git a/src/main/java/com/jagrosh/vortex/automod/AutoMod.java b/src/main/java/com/jagrosh/vortex/automod/AutoMod.java index be1d0ad..ad1154c 100644 --- a/src/main/java/com/jagrosh/vortex/automod/AutoMod.java +++ b/src/main/java/com/jagrosh/vortex/automod/AutoMod.java @@ -70,10 +70,10 @@ private final FixedCache spams = new FixedCache<>(3000); private final HashMap latestGuildJoin = new HashMap<>(); - public AutoMod(Vortex vortex, List config) + public AutoMod(Vortex vortex, String url, String secret) { this.vortex = vortex; - urlResolver = new URLResolver(config.get(10), config.get(11)); + urlResolver = new URLResolver(url, secret); loadCopypastas(); loadReferralDomains(); } 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 f7e2dad..a5ab372 100644 --- a/src/main/java/com/jagrosh/vortex/database/managers/GuildSettingsDataManager.java +++ b/src/main/java/com/jagrosh/vortex/database/managers/GuildSettingsDataManager.java @@ -26,6 +26,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.time.ZoneId; +import java.time.zone.ZoneRulesException; import java.util.Collection; import java.util.Collections; import net.dv8tion.jda.core.entities.Guild; @@ -99,7 +100,7 @@ + "\nVoice Log: "+(voicelog==null ? "None" : voicelog.getAsMention()) + "\nAvatar Log: "+(avylog==null ? "None" : avylog.getAsMention()) + "\nServer Log: "+(serverlog==null ? "None" : serverlog.getAsMention()) - + "\nTZone: **"+settings.timezone+"**\n\u200B", true); + + "\nTimezone: **"+settings.timezone+"**\n\u200B", true); } public boolean hasSettings(Guild guild) @@ -358,7 +359,18 @@ this.avatarlog = AVATARLOG_ID.getValue(rs); this.prefix = PREFIX.getValue(rs); String str = TIMEZONE.getValue(rs); - this.timezone = str==null ? DEFAULT_TIMEZONE : ZoneId.of(str); + ZoneId zid; + if(str == null) + zid = DEFAULT_TIMEZONE; + else try + { + zid = ZoneId.of(str); + } + catch(ZoneRulesException ex) + { + zid = DEFAULT_TIMEZONE; + } + this.timezone = zid; this.raidMode = RAIDMODE.getValue(rs); } diff --git a/src/main/java/com/jagrosh/vortex/logging/ModLogger.java b/src/main/java/com/jagrosh/vortex/logging/ModLogger.java index 1a7ddaa..7b1b794 100644 --- a/src/main/java/com/jagrosh/vortex/logging/ModLogger.java +++ b/src/main/java/com/jagrosh/vortex/logging/ModLogger.java @@ -25,7 +25,6 @@ import com.jagrosh.vortex.utils.LogUtil.ParsedAuditReason; import java.time.OffsetDateTime; import java.time.ZoneId; -import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -124,7 +123,7 @@ } if(m==null) return num==-1 ? -4 : -3; - m.editMessage(m.getContentRaw().replaceAll("(?is)\n`\\[ Reason \\]` .+", "\n`[ Reason ]` "+reason)).queue(); + m.editMessage(m.getContentRaw().replaceAll("(?is)\n`\\[ Reason \\]` .+", "\n`[ Reason ]` "+FormatUtil.filterEveryone(reason))).queue(); return thiscase; } diff --git a/src/main/java/com/jagrosh/vortex/utils/BlockingSessionController.java b/src/main/java/com/jagrosh/vortex/utils/BlockingSessionController.java index 332b30c..8fb5d9a 100644 --- a/src/main/java/com/jagrosh/vortex/utils/BlockingSessionController.java +++ b/src/main/java/com/jagrosh/vortex/utils/BlockingSessionController.java @@ -25,7 +25,7 @@ */ public class BlockingSessionController extends SessionControllerAdapter { - private final int MAX_DELAY = 30*1000; + private final int MAX_DELAY = 60*1000; // 1 minute @Override protected void runWorker() diff --git a/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java b/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java index f6230c8..e8344c0 100644 --- a/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java +++ b/src/main/java/com/jagrosh/vortex/utils/FormatUtil.java @@ -172,7 +172,7 @@ builder.append("**").append(years).append("** years, "); timeseconds = timeseconds % (60*60*24*365); } - int weeks = (int)(timeseconds / (60*60*24*365)); + int weeks = (int)(timeseconds / (60*60*24*7)); if(weeks>0) { builder.append("**").append(weeks).append("** weeks, "); @@ -215,7 +215,7 @@ builder.append("**").append(years).append("**y "); timeseconds = timeseconds % (60*60*24*365); } - int weeks = (int)(timeseconds / (60*60*24*365)); + int weeks = (int)(timeseconds / (60*60*24*7)); if(weeks>0) { builder.append("**").append(weeks).append("**w "); diff --git a/src/main/java/com/jagrosh/vortex/utils/OtherUtil.java b/src/main/java/com/jagrosh/vortex/utils/OtherUtil.java index 99a86ab..fb4ca14 100644 --- a/src/main/java/com/jagrosh/vortex/utils/OtherUtil.java +++ b/src/main/java/com/jagrosh/vortex/utils/OtherUtil.java @@ -38,7 +38,7 @@ public final static char[] DEHOIST_ORIGINAL = {'!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/'}; public final static char[] DEHOIST_REPLACEMENTS = {'\u01C3', '\u201C', '\u2D4C', '\uFF04', '\u2105', // visually - '\u214B', '\u2018', '\u2768', '\u2769', '\u2217', '\u2722', '\u201A', '\u2013', '\uFBB3', '\u2044'}; // similar + '\u214B', '\u2018', '\u2768', '\u2769', '\u2217', '\u2722', '\u201A', '\u2013', '\u2024', '\u2044'}; // similar public final static String DEHOIST_JOINED = "`"+FormatUtil.join("`, `", DEHOIST_ORIGINAL)+"`"; public final static boolean dehoist(Member m, char symbol) diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 4bc619a..0037198 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -14,20 +14,26 @@ * limitations under the License. --> - - - + + + + + logs/log.%d{yyyy-MM-dd}.txt + + + 30 + 1GB + - - + + %nopex[%d{HH:mm:ss}] [%level] [%logger{0}]: %msg%n%ex - + - diff --git a/src/main/resources/reference.conf b/src/main/resources/reference.conf new file mode 100644 index 0000000..fece72e --- /dev/null +++ b/src/main/resources/reference.conf @@ -0,0 +1,23 @@ +bot-token = "" +shards-total = 0 +webhook-url = "" + +database { + host = "" + username = "" + password = "" +} + +listing { + discord-bots = "" +} + +uploader { + guild = 0 + category = 0 +} + +url-resolver { + url = "" + secret = "" +} \ No newline at end of file