diff --git a/README.md b/README.md index 59551b1f..c7c6a07e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # DiscordSRVUtils -Here is the source code! feel free to make pull requests! +DiscordSRVUtils is a plugin that adds more features to the DiscordSRV bot -Download: https://www.spigotmc.org/resources/discordsrvutils.85958/ +[Spigot Page](https://www.spigotmc.org/resources/discordsrvutils.85958/) # API @@ -40,7 +40,11 @@ For gradle You also need to add DiscordSRV's dependecy and repository, which you can find here: https://github.com/DiscordSRV/DiscordSRV/wiki#developers + + +# Contributing +To contribute you can fork this repo and make changes on the `develop` branch. And you can Pull Request to the `develop` branch. Pull requests on `master` will be denied and closed. diff --git a/build.gradle b/build.gradle index f1a0ddbc..eb813244 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ shadowJar { relocate 'com.squareup.okhttp3', "tk.bluetree242.discordsrvutils.dependencies.okhttp" relocate 'org.flywaydb', "tk.bluetree242.discordsrvutils.dependencies.flywaydb" relocate 'org.bstats', "tk.bluetree242.discordsrvutils.dependencies.bstats" - relocate 'com.github.ben-manes.caffeine', 'tk.bluetree242.discordsrvutils.dependencies.caffeine' + relocate 'com.github.benmanes.caffeine', 'tk.bluetree242.discordsrvutils.dependencies.caffeine' } build.finalizedBy shadowJar repositories { @@ -92,7 +92,18 @@ repositories { maven { url "https://mvn-repo.arim.space/gpl3" } maven { url "https://mvn-repo.arim.space/lesser-gpl3" } } - +def urlFile = { url, name -> + File file = new File("$buildDir/download/${name}.jar") + file.parentFile.mkdirs() + if (!file.exists()) { + new URL(url).withInputStream { downloadStream -> + file.withOutputStream { fileOut -> + fileOut << downloadStream + } + } + } + files(file.absolutePath) +} dependencies { implementation 'com.vdurmont:emoji-java:5.1.1' implementation 'org.yaml:snakeyaml:1.27' @@ -111,10 +122,11 @@ dependencies { implementation group: 'org.json', name: 'json', version: '20210307' implementation 'com.github.ben-manes.caffeine:caffeine:3.0.4' compileOnly 'space.arim.libertybans:bans-api:0.8.0' + compileOnly urlFile("https://github.com/Zrips/CMI-API/releases/download/8.7.8.2/CMIAPI8.7.8.2.jar", "CMI-API") } group = 'me.bluetree.discordsrvutils' -version = '1.2.4' +version = '1.2.5' description = 'DiscordSRVUtils' compileJava.options.encoding 'UTF-8' @@ -133,3 +145,5 @@ processResources { filter ReplaceTokens, tokens: [version: version] } } + + diff --git a/src/main/java/tk/bluetree242/discordsrvutils/DiscordSRVUtils.java b/src/main/java/tk/bluetree242/discordsrvutils/DiscordSRVUtils.java index dd424731..8e9b0e98 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/DiscordSRVUtils.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/DiscordSRVUtils.java @@ -56,7 +56,7 @@ import tk.bluetree242.discordsrvutils.commandmanagement.CommandManager; import tk.bluetree242.discordsrvutils.commands.bukkit.DiscordSRVUtilsCommand; import tk.bluetree242.discordsrvutils.commands.bukkit.tabcompleters.DiscordSRVUtilsTabCompleter; -import tk.bluetree242.discordsrvutils.commands.discord.*; +import tk.bluetree242.discordsrvutils.commands.discord.HelpCommand; import tk.bluetree242.discordsrvutils.commands.discord.admin.TestMessageCommand; import tk.bluetree242.discordsrvutils.commands.discord.leveling.LeaderboardCommand; import tk.bluetree242.discordsrvutils.commands.discord.leveling.LevelCommand; @@ -72,6 +72,7 @@ import tk.bluetree242.discordsrvutils.leveling.LevelingManager; import tk.bluetree242.discordsrvutils.leveling.listeners.bukkit.BukkitLevelingListener; import tk.bluetree242.discordsrvutils.leveling.listeners.jda.DiscordLevelingListener; +import tk.bluetree242.discordsrvutils.listeners.afk.CMIAfkListener; import tk.bluetree242.discordsrvutils.listeners.afk.EssentialsAFKListener; import tk.bluetree242.discordsrvutils.listeners.bukkit.JoinUpdateChecker; import tk.bluetree242.discordsrvutils.listeners.discordsrv.DiscordSRVListener; @@ -151,6 +152,7 @@ public class DiscordSRVUtils extends JavaPlugin { private ConfManager suggestionsConfigManager = ConfManager.create(getDataFolder().toPath(), "suggestions.yml", SuggestionsConfig.class); private SuggestionsConfig suggestionsConfig; + //Thread Pool private ThreadPoolExecutor pool; //Our DiscordSRV Listener @@ -159,6 +161,7 @@ public class DiscordSRVUtils extends JavaPlugin { private HikariDataSource sql; //listeners that should be registered private List listeners = new ArrayList<>(); + private long lastErrorTime = 0; public static DiscordSRVUtils get() { return instance; @@ -210,6 +213,11 @@ public void onLoad() { init(); //require intents and cacheflags if (getServer().getPluginManager().getPlugin("DiscordSRV") != null) { + if (DiscordSRV.isReady) { + //Oh no, they are using a plugin manager to reload the plugin, give them a warn + logger.warning("It seems like you are using a Plugin Manager to reload the plugin. This is not a good practice. If you see problems. Please restart"); + return; + } DiscordSRV.api.requireIntent(GatewayIntent.GUILD_MESSAGE_REACTIONS); DiscordSRV.api.requireCacheFlag(CacheFlag.EMOTE); } @@ -301,7 +309,7 @@ public void onEnable() { return; } //initialize pool - pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(config.pool_size(), new ThreadFactory() { + pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(config.pool_size(), new ThreadFactory() { @Override public Thread newThread(@NotNull Runnable r) { @@ -355,7 +363,7 @@ public void registerBukkitCommands() { getCommand("discordsrvutils").setTabCompleter(new DiscordSRVUtilsTabCompleter()); } - private void startupError(Throwable ex,@NotNull String msg) { + private void startupError(Throwable ex, @NotNull String msg) { setEnabled(false); logger.warning(msg); try { @@ -365,7 +373,7 @@ private void startupError(Throwable ex,@NotNull String msg) { e.printStackTrace(); } //tell them where to report - logger.severe( "Send this to support at https://discordsrvutils.xyz/support"); + logger.severe("Send this to support at https://discordsrvutils.xyz/support"); ex.printStackTrace(); } @@ -442,13 +450,13 @@ private void initDefaultMessages() { } } - public void onDisable() { if (dsrvlistener != null) DiscordSRV.api.unsubscribe(dsrvlistener); if (isReady()) { getJDA().removeEventListener(listeners.toArray(new Object[0])); } - pool.shutdown(); + if (pool != null) + pool.shutdown(); if (WaiterManager.get() != null) WaiterManager.get().timer.cancel(); if (sql != null) sql.close(); } @@ -474,7 +482,7 @@ private void whenStarted() { if (!levelingRoles.exists()) { levelingRoles.createNewFile(); FileWriter writer = new FileWriter(levelingRoles); - writer.write("{}"); + writer.write("{\n\n}"); writer.close(); levelingRolesRaw = new JSONObject(); } else { @@ -486,6 +494,7 @@ private void whenStarted() { logger.severe("Error creating leveling-roles.json"); } + //Register Expansion if (getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { new PAPIExpansion().register(); } @@ -493,7 +502,6 @@ private void whenStarted() { } - public void registerListeners() { getJDA().addEventListener(listeners.toArray(new Object[0])); Bukkit.getServer().getPluginManager().registerEvents(new BukkitLevelingListener(), this); @@ -517,9 +525,7 @@ public void registerCommands() { CommandManager.get().registerCommand(new DenySuggestionCommand()); } - /** - * * @return `DiscordSRV.isReady`. This may change any time soon */ public boolean isReady() { @@ -544,7 +550,7 @@ public void reloadConfigs() throws IOException, InvalidConfigException { if (!levelingRoles.exists()) { levelingRoles.createNewFile(); FileWriter writer = new FileWriter(levelingRoles); - writer.write("{/n/n}"); + writer.write("{\n\n}"); writer.close(); levelingRolesRaw = new JSONObject(); } else { @@ -591,6 +597,10 @@ public void whenReady() { getServer().getPluginManager().registerEvents(new EssentialsAFKListener(), this); hookedPlugins.add(getServer().getPluginManager().getPlugin("Essentials")); } + if (getServer().getPluginManager().isPluginEnabled("CMI")) { + getServer().getPluginManager().registerEvents(new CMIAfkListener(), this); + hookedPlugins.add(getServer().getPluginManager().getPlugin("CMI")); + } if (getServer().getPluginManager().isPluginEnabled("AdvancedBan")) { getServer().getPluginManager().registerEvents(new AdvancedBanPunishmentListener(), this); hookedPlugins.add(getServer().getPluginManager().getPlugin("AdvancedBan")); @@ -708,7 +718,6 @@ private void doSuggestions() { } } - public void setSettings() { if (!isReady()) return; OnlineStatus onlineStatus = getMainConfig().onlinestatus().equalsIgnoreCase("DND") ? OnlineStatus.DO_NOT_DISTURB : OnlineStatus.valueOf(getMainConfig().onlinestatus().toUpperCase()); @@ -805,7 +814,6 @@ public void handleCF(CompletableFuture cf, Consumer success, Consumer< }); } - /** * For doing a cf inside another one */ @@ -826,7 +834,6 @@ public void defaultHandle(Throwable ex, MessageChannel channel) { ex.printStackTrace(); } - private long lastErrorTime = 0; public void defaultHandle(Throwable ex) { //handle error on thread pool if (!config.minimize_errors()) { @@ -836,15 +843,15 @@ public void defaultHandle(Throwable ex) { logger.warning("Read the note above the error Please."); //don't spam errors if ((System.currentTimeMillis() - lastErrorTime) >= 180000) - for (Player p : Bukkit.getOnlinePlayers()) { - if (p.hasPermission("discordsrvutils.errornotifications")) { - //tell admins that something was wrong - TextComponent msg = new TextComponent(Utils.colors("&7[&eDSU&7] Plugin had an error. Check console for details.")); - msg.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://discordsrvutils.xyz/support")); - msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(net.md_5.bungee.api.ChatColor.GREEN + "" + net.md_5.bungee.api.ChatColor.BOLD + "Join Support Discord").create())); - p.spigot().sendMessage(msg); + for (Player p : Bukkit.getOnlinePlayers()) { + if (p.hasPermission("discordsrvutils.errornotifications")) { + //tell admins that something was wrong + TextComponent msg = new TextComponent(Utils.colors("&7[&eDSU&7] Plugin had an error. Check console for details.")); + msg.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://discordsrvutils.xyz/support")); + msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(net.md_5.bungee.api.ChatColor.GREEN + "" + net.md_5.bungee.api.ChatColor.BOLD + "Join Support Discord").create())); + p.spigot().sendMessage(msg); + } } - } lastErrorTime = System.currentTimeMillis(); } else { diff --git a/src/main/java/tk/bluetree242/discordsrvutils/PAPIExpansion.java b/src/main/java/tk/bluetree242/discordsrvutils/PAPIExpansion.java index f5e872a3..e5598161 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/PAPIExpansion.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/PAPIExpansion.java @@ -26,6 +26,8 @@ import org.bukkit.entity.Player; import tk.bluetree242.discordsrvutils.leveling.LevelingManager; +import java.util.List; + public class PAPIExpansion extends PlaceholderExpansion { private DiscordSRVUtils core = DiscordSRVUtils.get(); @@ -49,6 +51,16 @@ public String getVersion() { return core.getDescription().getVersion(); } + @Override + public List getPlaceholders() { + return List.of("level", "rank", "xp"); + } + + @Override + public String getRequiredPlugin() { + return "DiscordSRVUtils"; + } + @Override public String onPlaceholderRequest(Player p, String identifier) { identifier = identifier.toLowerCase(); diff --git a/src/main/java/tk/bluetree242/discordsrvutils/commandmanagement/BukkitCommand.java b/src/main/java/tk/bluetree242/discordsrvutils/commandmanagement/BukkitCommand.java index 901fa9c8..a000d051 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/commandmanagement/BukkitCommand.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/commandmanagement/BukkitCommand.java @@ -35,14 +35,14 @@ public abstract class BukkitCommand implements CommandExecutor { @Override public final boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - Bukkit.getScheduler().runTaskAsynchronously(DiscordSRVUtils.get(), () -> { - try { - onRunAsync(sender, command, label, args); - } catch (Throwable ex) { - ex.printStackTrace(); - sender.sendMessage(Utils.colors("&cAn internal error occurred while executing this command")); - } - }); + Bukkit.getScheduler().runTaskAsynchronously(DiscordSRVUtils.get(), () -> { + try { + onRunAsync(sender, command, label, args); + } catch (Throwable ex) { + ex.printStackTrace(); + sender.sendMessage(Utils.colors("&cAn internal error occurred while executing this command")); + } + }); return true; } diff --git a/src/main/java/tk/bluetree242/discordsrvutils/leveling/LevelingManager.java b/src/main/java/tk/bluetree242/discordsrvutils/leveling/LevelingManager.java index 3e588975..4d0f236d 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/leveling/LevelingManager.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/leveling/LevelingManager.java @@ -178,7 +178,7 @@ public int compare(String o1, String o2) { return null; } - public List getRolesToRemove() { + public List getRolesToRemove(Integer level) { List roles = new ArrayList<>(); Map map = core.levelingRolesRaw.toMap(); List values = new ArrayList<>(map.values()); @@ -186,6 +186,8 @@ public List getRolesToRemove() { Long id = (Long) value; roles.add(core.getGuild().getRoleById(id)); } + if (level != null) + roles.remove(getRoleForLevel(level)); return roles; } } diff --git a/src/main/java/tk/bluetree242/discordsrvutils/leveling/PlayerStats.java b/src/main/java/tk/bluetree242/discordsrvutils/leveling/PlayerStats.java index 24b1b021..f6f12fbd 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/leveling/PlayerStats.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/leveling/PlayerStats.java @@ -25,12 +25,15 @@ import github.scarsz.discordsrv.DiscordSRV; import github.scarsz.discordsrv.dependencies.jda.api.entities.Member; import github.scarsz.discordsrv.dependencies.jda.api.entities.Role; +import github.scarsz.discordsrv.dependencies.jda.api.requests.RestAction; import tk.bluetree242.discordsrvutils.DiscordSRVUtils; import tk.bluetree242.discordsrvutils.exceptions.UnCheckedSQLException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -103,14 +106,16 @@ public CompletableFuture setXP(int xp) { LevelingManager manager = LevelingManager.get(); Member member = core.getGuild().retrieveMemberById(id).complete(); if (member == null) return true; - for (Role role : manager.getRolesToRemove()) { + Collection actions = new ArrayList<>(); + for (Role role : manager.getRolesToRemove(level)) { if (member.getRoles().contains(role)) - core.getGuild().removeRoleFromMember(member, role).queue(); + actions.add(core.getGuild().removeRoleFromMember(member, role).reason("User Leveled Up")); } Role toAdd = manager.getRoleForLevel(level); if (toAdd != null) { - core.getGuild().addRoleToMember(member, toAdd).queue(); + actions.add(core.getGuild().addRoleToMember(member, toAdd).reason("User Leveled Up")); } + RestAction.allOf(actions).queue(); return true; } PreparedStatement p1 = conn.prepareStatement("UPDATE leveling SET XP=? WHERE UUID=?"); diff --git a/src/main/java/tk/bluetree242/discordsrvutils/leveling/listeners/jda/DiscordLevelingListener.java b/src/main/java/tk/bluetree242/discordsrvutils/leveling/listeners/jda/DiscordLevelingListener.java index f23e3ea4..e370f4dc 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/leveling/listeners/jda/DiscordLevelingListener.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/leveling/listeners/jda/DiscordLevelingListener.java @@ -24,12 +24,15 @@ import github.scarsz.discordsrv.DiscordSRV; +import github.scarsz.discordsrv.dependencies.jda.api.entities.Role; +import github.scarsz.discordsrv.dependencies.jda.api.events.guild.member.GuildMemberJoinEvent; import github.scarsz.discordsrv.dependencies.jda.api.events.message.guild.GuildMessageReceivedEvent; import github.scarsz.discordsrv.dependencies.jda.api.hooks.ListenerAdapter; import tk.bluetree242.discordsrvutils.DiscordSRVUtils; import tk.bluetree242.discordsrvutils.events.DiscordLevelupEvent; import tk.bluetree242.discordsrvutils.leveling.LevelingManager; import tk.bluetree242.discordsrvutils.leveling.MessageType; +import tk.bluetree242.discordsrvutils.leveling.PlayerStats; import tk.bluetree242.discordsrvutils.messages.MessageManager; import tk.bluetree242.discordsrvutils.placeholder.PlaceholdObject; import tk.bluetree242.discordsrvutils.placeholder.PlaceholdObjectList; @@ -80,4 +83,19 @@ public void onGuildMessageReceived(GuildMessageReceivedEvent e) { } }); } + + + //give leveling roles when they rejoin the discord server + public void onGuildMemberJoin(GuildMemberJoinEvent e) { + core.executeAsync(() -> { + if (DiscordSRV.getPlugin().getAccountLinkManager().getUuid(e.getUser().getId()) != null) { + PlayerStats stats = core.handleCFOnAnother(LevelingManager.get().getPlayerStats(e.getUser().getIdLong())); + if (stats == null) return; + Role role = LevelingManager.get().getRoleForLevel(stats.getLevel()); + if (role != null) { + e.getGuild().addRoleToMember(e.getMember(), role).queue(); + } + } + }); + } } \ No newline at end of file diff --git a/src/main/java/tk/bluetree242/discordsrvutils/listeners/afk/CMIAfkListener.java b/src/main/java/tk/bluetree242/discordsrvutils/listeners/afk/CMIAfkListener.java new file mode 100644 index 00000000..0cfce5b0 --- /dev/null +++ b/src/main/java/tk/bluetree242/discordsrvutils/listeners/afk/CMIAfkListener.java @@ -0,0 +1,75 @@ +/* + * LICENSE + * DiscordSRVUtils + * ------------- + * Copyright (C) 2020 - 2021 BlueTree242 + * ------------- + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * END + */ + +package tk.bluetree242.discordsrvutils.listeners.afk; + +import com.Zrips.CMI.events.CMIAfkEnterEvent; +import com.Zrips.CMI.events.CMIAfkLeaveEvent; +import github.scarsz.discordsrv.dependencies.jda.api.entities.Message; +import github.scarsz.discordsrv.dependencies.jda.api.entities.TextChannel; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import tk.bluetree242.discordsrvutils.DiscordSRVUtils; +import tk.bluetree242.discordsrvutils.messages.MessageManager; +import tk.bluetree242.discordsrvutils.placeholder.PlaceholdObject; +import tk.bluetree242.discordsrvutils.placeholder.PlaceholdObjectList; + +public class CMIAfkListener implements Listener { + private final DiscordSRVUtils core = DiscordSRVUtils.get(); + + @EventHandler + public void onAfk(CMIAfkEnterEvent e) { + core.executeAsync(() -> { + Player player = e.getPlayer(); + if (core.getMainConfig().afk_message_enabled()) { + PlaceholdObjectList holders = new PlaceholdObjectList(); + holders.add(new PlaceholdObject(player, "player")); + TextChannel channel = core.getChannel(core.getMainConfig().afk_channel()); + if (channel == null) { + core.severe("No Channel was found with ID " + core.getMainConfig().afk_channel() + ". Afk/NoLonger message was not sent for " + player.getName()); + return; + } + Message msg = MessageManager.get().getMessage(core.getMainConfig().afk_message(), holders, player).build(); + core.queueMsg(msg, channel).queue(); + } + }); + } + + @EventHandler + public void onNoLongerAfk(CMIAfkLeaveEvent e) { + core.executeAsync(() -> { + Player player = e.getPlayer(); + if (core.getMainConfig().afk_message_enabled()) { + PlaceholdObjectList holders = new PlaceholdObjectList(); + holders.add(new PlaceholdObject(player, "player")); + TextChannel channel = core.getChannel(core.getMainConfig().afk_channel()); + if (channel == null) { + core.severe("No Channel was found with ID " + core.getMainConfig().afk_channel() + ". Afk/NoLonger message was not sent for " + player.getName()); + return; + } + Message msg = MessageManager.get().getMessage(core.getMainConfig().no_longer_afk_message(), holders, player).build(); + core.queueMsg(msg, channel).queue(); + } + }); + } +} diff --git a/src/main/java/tk/bluetree242/discordsrvutils/listeners/afk/EssentialsAFKListener.java b/src/main/java/tk/bluetree242/discordsrvutils/listeners/afk/EssentialsAFKListener.java index 2752c05c..782f7bc2 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/listeners/afk/EssentialsAFKListener.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/listeners/afk/EssentialsAFKListener.java @@ -40,6 +40,7 @@ public class EssentialsAFKListener implements Listener { @EventHandler public void onAfk(AfkStatusChangeEvent e) { core.executeAsync(() -> { + if (e.getAffected().isHidden()) return; boolean afk = e.getAffected().isAfk(); Player player = e.getAffected().getBase(); if (core.getMainConfig().afk_message_enabled()) { diff --git a/src/main/java/tk/bluetree242/discordsrvutils/listeners/bukkit/JoinUpdateChecker.java b/src/main/java/tk/bluetree242/discordsrvutils/listeners/bukkit/JoinUpdateChecker.java index a5e63c2e..78061b0b 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/listeners/bukkit/JoinUpdateChecker.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/listeners/bukkit/JoinUpdateChecker.java @@ -28,7 +28,6 @@ import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/tk/bluetree242/discordsrvutils/listeners/discordsrv/DiscordSRVListener.java b/src/main/java/tk/bluetree242/discordsrvutils/listeners/discordsrv/DiscordSRVListener.java index da282649..99825e41 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/listeners/discordsrv/DiscordSRVListener.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/listeners/discordsrv/DiscordSRVListener.java @@ -30,11 +30,16 @@ import github.scarsz.discordsrv.api.events.DiscordReadyEvent; import github.scarsz.discordsrv.dependencies.jda.api.entities.Member; import github.scarsz.discordsrv.dependencies.jda.api.entities.Role; +import github.scarsz.discordsrv.dependencies.jda.api.requests.RestAction; import org.bukkit.Bukkit; import tk.bluetree242.discordsrvutils.DiscordSRVUtils; import tk.bluetree242.discordsrvutils.exceptions.StartupException; import tk.bluetree242.discordsrvutils.leveling.LevelingManager; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + public class DiscordSRVListener { private final DiscordSRVUtils core = DiscordSRVUtils.get(); @@ -59,14 +64,16 @@ public void onLink(AccountLinkedEvent e) { if (id == null) return; Member member = core.getGuild().retrieveMemberById(id).complete(); if (member == null) return; - for (Role role : manager.getRolesToRemove()) { + Collection actions = new ArrayList<>(); + for (Role role : manager.getRolesToRemove(stats.getLevel())) { if (member.getRoles().contains(role)) - core.getGuild().removeRoleFromMember(member, role).queue(); + actions.add(core.getGuild().removeRoleFromMember(member, role).reason("User should not have this role")); } Role toAdd = manager.getRoleForLevel(level); - if (toAdd != null) { - core.getGuild().addRoleToMember(member, toAdd).queue(); + if (toAdd != null && !member.getRoles().contains(toAdd)) { + actions.add(core.getGuild().addRoleToMember(member, toAdd).reason("Account Linked")); } + RestAction.allOf(actions).queue(); }); } @@ -79,9 +86,9 @@ public void onUnlink(AccountUnlinkedEvent e) { core.executeAsync(() -> { Member member = core.getGuild().retrieveMemberById(e.getDiscordId()).complete(); if (member != null) { - for (Role role : manager.getRolesToRemove()) { + for (Role role : manager.getRolesToRemove(null)) { if (member.getRoles().contains(role)) - core.getGuild().removeRoleFromMember(member, role).queue(); + core.getGuild().removeRoleFromMember(member, role).reason("Account Unlinked").queue(); } } }); diff --git a/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertyBansPunishment.java b/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertyBansPunishment.java index d567eaa9..a506d56a 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertyBansPunishment.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertyBansPunishment.java @@ -32,9 +32,11 @@ public class LibertyBansPunishment implements Punishment { private space.arim.libertybans.api.punish.Punishment punishment; + private Operator operator; - public LibertyBansPunishment(space.arim.libertybans.api.punish.Punishment punishment) { + public LibertyBansPunishment(space.arim.libertybans.api.punish.Punishment punishment, Operator operator) { this.punishment = punishment; + this.operator = operator; } @Override @@ -45,11 +47,11 @@ public String getDuration() { @Override public String getOperator() { - if (punishment.getOperator().getType() == Operator.OperatorType.CONSOLE) { + if (operator.getType() == Operator.OperatorType.CONSOLE) { return "CONSOLE"; } else { - PlayerOperator operator = (PlayerOperator) punishment.getOperator(); - String name = Bukkit.getOfflinePlayer(operator.getUUID()).getName(); + PlayerOperator operatorplayer = (PlayerOperator) operator; + String name = Bukkit.getOfflinePlayer(operatorplayer.getUUID()).getName(); return name == null ? "Unknown" : name; } } diff --git a/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertybansListener.java b/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertybansListener.java index 41abe3be..984c76fd 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertybansListener.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/listeners/punishments/libertybans/LibertybansListener.java @@ -103,7 +103,7 @@ public class PunishmentListener implements EventConsumer { @Override public void accept(PostPunishEvent e) { core.executeAsync(() -> { - LibertyBansPunishment punishment = new LibertyBansPunishment(e.getPunishment()); + LibertyBansPunishment punishment = new LibertyBansPunishment(e.getPunishment(), e.getPunishment().getOperator()); Message msg = null; switch (e.getPunishment().getType()) { @@ -151,7 +151,8 @@ public class PardonListener implements EventConsumer { @Override public void accept(PostPardonEvent e) { core.executeAsync(() -> { - LibertyBansPunishment punishment = new LibertyBansPunishment(e.getPunishment()); + + LibertyBansPunishment punishment = new LibertyBansPunishment(e.getPunishment(), e.getOperator()); Message msg = null; switch (e.getPunishment().getType()) { diff --git a/src/main/java/tk/bluetree242/discordsrvutils/suggestions/Suggestion.java b/src/main/java/tk/bluetree242/discordsrvutils/suggestions/Suggestion.java index ca0f8bac..22bb0137 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/suggestions/Suggestion.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/suggestions/Suggestion.java @@ -23,7 +23,6 @@ package tk.bluetree242.discordsrvutils.suggestions; import github.scarsz.discordsrv.dependencies.jda.api.entities.Message; -import github.scarsz.discordsrv.dependencies.jda.api.interactions.components.ActionRow; import tk.bluetree242.discordsrvutils.DiscordSRVUtils; import tk.bluetree242.discordsrvutils.exceptions.UnCheckedSQLException; import tk.bluetree242.discordsrvutils.messages.MessageManager; diff --git a/src/main/java/tk/bluetree242/discordsrvutils/tickets/listeners/PanelOpenListener.java b/src/main/java/tk/bluetree242/discordsrvutils/tickets/listeners/PanelOpenListener.java index 059bd78c..646b8d8c 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/tickets/listeners/PanelOpenListener.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/tickets/listeners/PanelOpenListener.java @@ -68,7 +68,7 @@ public void onButtonClick(ButtonClickEvent e) { new PlaceholdObject(e.getUser(), "user"), new PlaceholdObject(t, "ticket"), new PlaceholdObject(panel, "panel") - ); + ); MessageManager.get().messageToReplyAction(action, MessageManager.get().getMessage(core.getTicketsConfig().ticket_open_ephemeral_msg(), holders, null).build()).queue(); }), null, er -> { core.defaultHandle(er); diff --git a/src/main/java/tk/bluetree242/discordsrvutils/utils/DebugUtil.java b/src/main/java/tk/bluetree242/discordsrvutils/utils/DebugUtil.java index c136843e..d8f12cc8 100644 --- a/src/main/java/tk/bluetree242/discordsrvutils/utils/DebugUtil.java +++ b/src/main/java/tk/bluetree242/discordsrvutils/utils/DebugUtil.java @@ -93,7 +93,7 @@ public static String run(String stacktrack) throws Exception { "\n server watchdog -> alive: " + (DiscordSRV.getPlugin().getServerWatchdog() != null && DiscordSRV.getPlugin().getServerWatchdog().isAlive()) + "\n nickname updater -> alive: " + (DiscordSRV.getPlugin().getNicknameUpdater() != null && DiscordSRV.getPlugin().getNicknameUpdater().isAlive()) ); - information.put("ExecutorService Status", (core.getPool().isShutdown() ? "Shutdown" : "Q:" + core.getPool().getQueue() + ", R:" + core.getPool().getActiveCount() + ", AV:" + core.getPool().getPoolSize())); + information.put("ExecutorService Status", core.getPool() == null ? "null" : (core.getPool().isShutdown() ? "Shutdown" : "Q:" + core.getPool().getQueue().size() + ", R:" + core.getPool().getActiveCount() + ", AV:" + core.getPool().getPoolSize())); information.put("DiscordSRV Hooked Plugins", DiscordSRV.getPlugin().getPluginHooks().stream().map(PluginHook::getPlugin).filter(Objects::nonNull).map(Object::toString).collect(Collectors.joining(", "))); information.put("Scripts", String.join(", ", SkriptHook.getSkripts())); data.put(new JSONObject().put("type", "key_value").put("name", "Information").put("data", MapToKeyValue(information))); diff --git a/src/main/resources/messages/afk.json b/src/main/resources/messages/afk.json index 0920bf82..a7daf186 100644 --- a/src/main/resources/messages/afk.json +++ b/src/main/resources/messages/afk.json @@ -1,7 +1,9 @@ -{"embed": { - "color": "green", - "author": { - "icon_url": "https://minotar.net/avatar/[player.name]", - "name": "[player.name] is now afk" - } -}} \ No newline at end of file +{ + "embed": { + "color": "green", + "author": { + "icon_url": "https://minotar.net/avatar/[player.name]", + "name": "[player.name] is now afk" + } + } +} \ No newline at end of file diff --git a/src/main/resources/messages/ban.json b/src/main/resources/messages/ban.json index 63f020be..bb00a9b1 100644 --- a/src/main/resources/messages/ban.json +++ b/src/main/resources/messages/ban.json @@ -1,8 +1,12 @@ -{"embed": { - "color": "red", - "footer": {"text": "[punishment.duration]"}, - "author": { - "icon_url": "https://minotar.net/avatar/[punishment.name]", - "name": "[punishment.name] was banned by [punishment.operator] For [punishment.reason]" - } -}} \ No newline at end of file +{ + "embed": { + "color": "red", + "footer": { + "text": "[punishment.duration]" + }, + "author": { + "icon_url": "https://minotar.net/avatar/[punishment.name]", + "name": "[punishment.name] was banned by [punishment.operator] For [punishment.reason]" + } + } +} \ No newline at end of file diff --git a/src/main/resources/messages/level.json b/src/main/resources/messages/level.json index 2afabebb..26c5956a 100644 --- a/src/main/resources/messages/level.json +++ b/src/main/resources/messages/level.json @@ -1,6 +1,10 @@ -{"embed": { - "thumbnail": {"url": "https://minotar.net/avatar/[stats.name]"}, - "color": "cyan", - "description": "**Level:** [stats.level]\n**XP:** [stats.xp]\n**Rank:**: #[stats.rank]", - "title": "Level for [stats.name]" -}} \ No newline at end of file +{ + "embed": { + "thumbnail": { + "url": "https://minotar.net/avatar/[stats.name]" + }, + "color": "cyan", + "description": "**Level:** [stats.level]\n**XP:** [stats.xp]\n**Rank:**: #[stats.rank]", + "title": "Level for [stats.name]" + } +} \ No newline at end of file diff --git a/src/main/resources/messages/mute.json b/src/main/resources/messages/mute.json index 8323e865..b48675a0 100644 --- a/src/main/resources/messages/mute.json +++ b/src/main/resources/messages/mute.json @@ -1,8 +1,12 @@ -{"embed": { - "color": "red", - "footer": {"text": "[punishment.duration]"}, - "author": { - "icon_url": "https://minotar.net/avatar/[punishment.name]", - "name": "[punishment.name] was muted by [punishment.operator] For [punishment.reason]" - } -}} \ No newline at end of file +{ + "embed": { + "color": "red", + "footer": { + "text": "[punishment.duration]" + }, + "author": { + "icon_url": "https://minotar.net/avatar/[punishment.name]", + "name": "[punishment.name] was muted by [punishment.operator] For [punishment.reason]" + } + } +} \ No newline at end of file diff --git a/src/main/resources/messages/no-longer-afk.json b/src/main/resources/messages/no-longer-afk.json index 234b62e5..5d8c6b30 100644 --- a/src/main/resources/messages/no-longer-afk.json +++ b/src/main/resources/messages/no-longer-afk.json @@ -1,7 +1,9 @@ -{"embed": { - "color": "green", - "author": { - "icon_url": "https://minotar.net/avatar/[player.name]", - "name": "[player.name] is no longer afk" - } -}} \ No newline at end of file +{ + "embed": { + "color": "green", + "author": { + "icon_url": "https://minotar.net/avatar/[player.name]", + "name": "[player.name] is no longer afk" + } + } +} \ No newline at end of file diff --git a/src/main/resources/messages/panel.json b/src/main/resources/messages/panel.json index 37500187..7831eeb9 100644 --- a/src/main/resources/messages/panel.json +++ b/src/main/resources/messages/panel.json @@ -1,5 +1,7 @@ -{"embed": { - "color": "cyan", - "description": "Click on The Button to open a ticket", - "title": "[panel.name]" -}} \ No newline at end of file +{ + "embed": { + "color": "cyan", + "description": "Click on The Button to open a ticket", + "title": "[panel.name]" + } +} \ No newline at end of file diff --git a/src/main/resources/messages/suggestion-approved.json b/src/main/resources/messages/suggestion-approved.json index 3dec8931..4506143b 100644 --- a/src/main/resources/messages/suggestion-approved.json +++ b/src/main/resources/messages/suggestion-approved.json @@ -1,23 +1,27 @@ -{"embed": { - "thumbnail": {"url": "[submitter.effectiveAvatarUrl]"}, - "color": "green", - "fields": [ - { - "name": "Vote Results", - "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" - }, - { - "name": "Submitter", - "value": "[submitter.asMention]" - }, - { - "name": "Suggestion", - "value": "[suggestion.text]" - }, - { - "name": "Approved By", - "value": "[approver.asMention]" +{ + "embed": { + "thumbnail": { + "url": "[submitter.effectiveAvatarUrl]" + }, + "color": "green", + "fields": [ + { + "name": "Vote Results", + "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" + }, + { + "name": "Submitter", + "value": "[submitter.asMention]" + }, + { + "name": "Suggestion", + "value": "[suggestion.text]" + }, + { + "name": "Approved By", + "value": "[approver.asMention]" + } + ], + "title": "Suggestion Number: [suggestion.number]" } - ], - "title": "Suggestion Number: [suggestion.number]" -}} \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/resources/messages/suggestion-denied.json b/src/main/resources/messages/suggestion-denied.json index e8043092..37b9b7a8 100644 --- a/src/main/resources/messages/suggestion-denied.json +++ b/src/main/resources/messages/suggestion-denied.json @@ -1,23 +1,27 @@ -{"embed": { - "thumbnail": {"url": "[submitter.effectiveAvatarUrl]"}, - "color": "red", - "fields": [ - { - "name": "Vote Results", - "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" - }, - { - "name": "Submitter", - "value": "[submitter.asMention]" - }, - { - "name": "Suggestion", - "value": "[suggestion.text]" - }, - { - "name": "Denied By", - "value": "[approver.asMention]" +{ + "embed": { + "thumbnail": { + "url": "[submitter.effectiveAvatarUrl]" + }, + "color": "red", + "fields": [ + { + "name": "Vote Results", + "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" + }, + { + "name": "Submitter", + "value": "[submitter.asMention]" + }, + { + "name": "Suggestion", + "value": "[suggestion.text]" + }, + { + "name": "Denied By", + "value": "[approver.asMention]" + } + ], + "title": "Suggestion Number: [suggestion.number]" } - ], - "title": "Suggestion Number: [suggestion.number]" -}} \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/resources/messages/suggestion-noted-approved.json b/src/main/resources/messages/suggestion-noted-approved.json index 0976d7ca..96129689 100644 --- a/src/main/resources/messages/suggestion-noted-approved.json +++ b/src/main/resources/messages/suggestion-noted-approved.json @@ -1,31 +1,35 @@ -{"embed": { - "thumbnail": {"url": "[submitter.effectiveAvatarUrl]"}, - "color": "green", - "fields": [ - { - "name": "Vote Results", - "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" - }, - { - "name": "Submitter", - "value": "[submitter.asMention]" - }, - { - "name": "Suggestion", - "value": "[suggestion.text]" - }, - { - "name": "Staff Note", - "value": "[note.text]" - }, - { - "name": "Staff Member", - "value": "[staff.asMention]" - }, - { - "name": "Approved By", - "value": "[approver.asMention]" +{ + "embed": { + "thumbnail": { + "url": "[submitter.effectiveAvatarUrl]" + }, + "color": "green", + "fields": [ + { + "name": "Vote Results", + "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" + }, + { + "name": "Submitter", + "value": "[submitter.asMention]" + }, + { + "name": "Suggestion", + "value": "[suggestion.text]" + }, + { + "name": "Staff Note", + "value": "[note.text]" + }, + { + "name": "Staff Member", + "value": "[staff.asMention]" + }, + { + "name": "Approved By", + "value": "[approver.asMention]" + } + ], + "title": "Suggestion Number: [suggestion.number]" } - ], - "title": "Suggestion Number: [suggestion.number]" -}} \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/resources/messages/suggestion-noted-denied.json b/src/main/resources/messages/suggestion-noted-denied.json index 49b0b714..cdc79a3e 100644 --- a/src/main/resources/messages/suggestion-noted-denied.json +++ b/src/main/resources/messages/suggestion-noted-denied.json @@ -1,31 +1,35 @@ -{"embed": { - "thumbnail": {"url": "[submitter.effectiveAvatarUrl]"}, - "color": "red", - "fields": [ - { - "name": "Vote Results", - "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" - }, - { - "name": "Submitter", - "value": "[submitter.asMention]" - }, - { - "name": "Suggestion", - "value": "[suggestion.text]" - }, - { - "name": "Staff Note", - "value": "[note.text]" - }, - { - "name": "Staff Member", - "value": "[staff.asMention]" - }, - { - "name": "Denied By", - "value": "[approver.asMention]" +{ + "embed": { + "thumbnail": { + "url": "[submitter.effectiveAvatarUrl]" + }, + "color": "red", + "fields": [ + { + "name": "Vote Results", + "value": ":white_check_mark: [suggestion.yesCount]\n:x: [suggestion.noCount]" + }, + { + "name": "Submitter", + "value": "[submitter.asMention]" + }, + { + "name": "Suggestion", + "value": "[suggestion.text]" + }, + { + "name": "Staff Note", + "value": "[note.text]" + }, + { + "name": "Staff Member", + "value": "[staff.asMention]" + }, + { + "name": "Denied By", + "value": "[approver.asMention]" + } + ], + "title": "Suggestion Number: [suggestion.number]" } - ], - "title": "Suggestion Number: [suggestion.number]" -}} \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/resources/messages/suggestion-noted.json b/src/main/resources/messages/suggestion-noted.json index fdb5032d..465ff589 100644 --- a/src/main/resources/messages/suggestion-noted.json +++ b/src/main/resources/messages/suggestion-noted.json @@ -1,23 +1,27 @@ -{"embed": { - "thumbnail": {"url": "[submitter.effectiveAvatarUrl]"}, - "color": "orange", - "fields": [ - { - "name": "Submitter", - "value": "[submitter.asMention]" - }, - { - "name": "Suggestion", - "value": "[suggestion.text]" - }, - { - "name": "Staff Note", - "value": "[note.text]" - }, - { - "name": "Staff Member", - "value": "[staff.asMention]" +{ + "embed": { + "thumbnail": { + "url": "[submitter.effectiveAvatarUrl]" + }, + "color": "orange", + "fields": [ + { + "name": "Submitter", + "value": "[submitter.asMention]" + }, + { + "name": "Suggestion", + "value": "[suggestion.text]" + }, + { + "name": "Staff Note", + "value": "[note.text]" + }, + { + "name": "Staff Member", + "value": "[staff.asMention]" + } + ], + "title": "Suggestion Number: [suggestion.number]" } - ], - "title": "Suggestion Number: [suggestion.number]" -}} \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/resources/messages/suggestion.json b/src/main/resources/messages/suggestion.json index 39ae65bf..5bcaae57 100644 --- a/src/main/resources/messages/suggestion.json +++ b/src/main/resources/messages/suggestion.json @@ -1,15 +1,19 @@ -{"embed": { - "thumbnail": {"url": "[submitter.effectiveAvatarUrl]"}, - "color": "orange", - "fields": [ - { - "name": "Submitter", - "value": "[submitter.asMention]" - }, - { - "name": "Suggestion", - "value": "[suggestion.text]" +{ + "embed": { + "thumbnail": { + "url": "[submitter.effectiveAvatarUrl]" + }, + "color": "orange", + "fields": [ + { + "name": "Submitter", + "value": "[submitter.asMention]" + }, + { + "name": "Suggestion", + "value": "[suggestion.text]" + } + ], + "title": "Suggestion Number: [suggestion.number]" } - ], - "title": "Suggestion Number: [suggestion.number]" -}} \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/resources/messages/ticket-close.json b/src/main/resources/messages/ticket-close.json index e23afc36..3539d097 100644 --- a/src/main/resources/messages/ticket-close.json +++ b/src/main/resources/messages/ticket-close.json @@ -1,4 +1,6 @@ -{"embed": { - "color": "red", - "description": "Ticket Closed by [user.asMention]" -}} \ No newline at end of file +{ + "embed": { + "color": "red", + "description": "Ticket Closed by [user.asMention]" + } +} \ No newline at end of file diff --git a/src/main/resources/messages/ticket-open.json b/src/main/resources/messages/ticket-open.json index c4fb1bd4..481b1ea9 100644 --- a/src/main/resources/messages/ticket-open.json +++ b/src/main/resources/messages/ticket-open.json @@ -1,7 +1,7 @@ { - "embed": { - "color": "green", - "description": "Staff will be here shortly\nClick `Close Ticket` to close this ticket\n**Panel Name: **[panel.name]" - }, - "content": "[user.asMention] Here is your ticket" + "embed": { + "color": "green", + "description": "Staff will be here shortly\nClick `Close Ticket` to close this ticket\n**Panel Name: **[panel.name]" + }, + "content": "[user.asMention] Here is your ticket" } \ No newline at end of file diff --git a/src/main/resources/messages/ticket-reopen.json b/src/main/resources/messages/ticket-reopen.json index cac025a7..7b297339 100644 --- a/src/main/resources/messages/ticket-reopen.json +++ b/src/main/resources/messages/ticket-reopen.json @@ -1,4 +1,6 @@ -{"embed": { - "color": "green", - "description": "Ticket reopened by [user.asMention]" -}} \ No newline at end of file +{ + "embed": { + "color": "green", + "description": "Ticket reopened by [user.asMention]" + } +} \ No newline at end of file diff --git a/src/main/resources/messages/unban.json b/src/main/resources/messages/unban.json index df5c9e01..68d0ff40 100644 --- a/src/main/resources/messages/unban.json +++ b/src/main/resources/messages/unban.json @@ -1,7 +1,9 @@ -{"embed": { - "color": "red", - "author": { - "icon_url": "https://minotar.net/avatar/[punishment.name]", - "name": "[punishment.name] was unbanned by [punishment.operator]" - } -}} \ No newline at end of file +{ + "embed": { + "color": "red", + "author": { + "icon_url": "https://minotar.net/avatar/[punishment.name]", + "name": "[punishment.name] was unbanned by [punishment.operator]" + } + } +} \ No newline at end of file diff --git a/src/main/resources/messages/unmute.json b/src/main/resources/messages/unmute.json index 31127fbb..e911b6e7 100644 --- a/src/main/resources/messages/unmute.json +++ b/src/main/resources/messages/unmute.json @@ -1,7 +1,9 @@ -{"embed": { - "color": "red", - "author": { - "icon_url": "https://minotar.net/avatar/[punishment.name]", - "name": "[punishment.name] was unmuted by [punishment.operator]" - } -}} \ No newline at end of file +{ + "embed": { + "color": "red", + "author": { + "icon_url": "https://minotar.net/avatar/[punishment.name]", + "name": "[punishment.name] was unmuted by [punishment.operator]" + } + } +} \ No newline at end of file diff --git a/src/main/resources/messages/welcome.json b/src/main/resources/messages/welcome.json index 4c841f76..c15b2a91 100644 --- a/src/main/resources/messages/welcome.json +++ b/src/main/resources/messages/welcome.json @@ -1,5 +1,9 @@ -{"embed": { - "thumbnail": {"url": "[user.effectiveAvatarUrl]"}, - "color": "cyan", - "description": "🔸 **Welcome [user.name] To The server!**\n\n\n🔸 **Server ip** | play.example.com\n\n\n🔸 **Store** | store.example.com" -}} \ No newline at end of file +{ + "embed": { + "thumbnail": { + "url": "[user.effectiveAvatarUrl]" + }, + "color": "cyan", + "description": "🔸 **Welcome [user.name] To The server!**\n\n\n🔸 **Server ip** | play.example.com\n\n\n🔸 **Store** | store.example.com" + } +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c311bbee..d6e88f5e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,21 +1,27 @@ name: DiscordSRVUtils +#Giving a more friendly error when DiscordSRV is not installed depend: - DiscordSRV +#We hook into those softdepend: - Essentials - Advancedban - PlaceholderAPI - Litebans - Libertybans + - CMI version: @version@ main: tk.bluetree242.discordsrvutils.DiscordSRVUtils author: BlueTree242 +#We use api version 1.13 but all versions are supported api-version: 1.13 +#Our main and only command commands: discordsrvutils: aliases: [ dsrvu, dsu, du, discordu, srvu ] +#Add the perms to the permission plugins without us having to check them permissions: discordsrvutils.reload: default: false @@ -25,6 +31,6 @@ permissions: description: Allow player to create a debug report discordsrvutils.errornotifications: default: false - description: Allow plugin to send errors to this user + description: Allow plugin to send errors to player