Skip to content

Commit e7a999f

Browse files
committed
1.2.5 Release
2 parents 7e4e7fe + 76b7769 commit e7a999f

36 files changed

+475
-269
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# DiscordSRVUtils
22

3-
Here is the source code! feel free to make pull requests!
3+
DiscordSRVUtils is a plugin that adds more features to the DiscordSRV bot
44

5-
Download: https://www.spigotmc.org/resources/discordsrvutils.85958/
5+
[Spigot Page](https://www.spigotmc.org/resources/discordsrvutils.85958/)
66

77
# API
88

@@ -40,7 +40,11 @@ For gradle
4040

4141
You also need to add DiscordSRV's dependecy and repository, which you can find here:
4242
https://github.com/DiscordSRV/DiscordSRV/wiki#developers
43+
44+
45+
# Contributing
4346

47+
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.
4448

4549

4650

build.gradle

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ shadowJar {
3939
relocate 'com.squareup.okhttp3', "tk.bluetree242.discordsrvutils.dependencies.okhttp"
4040
relocate 'org.flywaydb', "tk.bluetree242.discordsrvutils.dependencies.flywaydb"
4141
relocate 'org.bstats', "tk.bluetree242.discordsrvutils.dependencies.bstats"
42-
relocate 'com.github.ben-manes.caffeine', 'tk.bluetree242.discordsrvutils.dependencies.caffeine'
42+
relocate 'com.github.benmanes.caffeine', 'tk.bluetree242.discordsrvutils.dependencies.caffeine'
4343
}
4444
build.finalizedBy shadowJar
4545
repositories {
@@ -92,7 +92,18 @@ repositories {
9292
maven { url "https://mvn-repo.arim.space/gpl3" }
9393
maven { url "https://mvn-repo.arim.space/lesser-gpl3" }
9494
}
95-
95+
def urlFile = { url, name ->
96+
File file = new File("$buildDir/download/${name}.jar")
97+
file.parentFile.mkdirs()
98+
if (!file.exists()) {
99+
new URL(url).withInputStream { downloadStream ->
100+
file.withOutputStream { fileOut ->
101+
fileOut << downloadStream
102+
}
103+
}
104+
}
105+
files(file.absolutePath)
106+
}
96107
dependencies {
97108
implementation 'com.vdurmont:emoji-java:5.1.1'
98109
implementation 'org.yaml:snakeyaml:1.27'
@@ -111,10 +122,11 @@ dependencies {
111122
implementation group: 'org.json', name: 'json', version: '20210307'
112123
implementation 'com.github.ben-manes.caffeine:caffeine:3.0.4'
113124
compileOnly 'space.arim.libertybans:bans-api:0.8.0'
125+
compileOnly urlFile("https://github.com/Zrips/CMI-API/releases/download/8.7.8.2/CMIAPI8.7.8.2.jar", "CMI-API")
114126
}
115127

116128
group = 'me.bluetree.discordsrvutils'
117-
version = '1.2.4'
129+
version = '1.2.5'
118130

119131
description = 'DiscordSRVUtils'
120132
compileJava.options.encoding 'UTF-8'
@@ -133,3 +145,5 @@ processResources {
133145
filter ReplaceTokens, tokens: [version: version]
134146
}
135147
}
148+
149+

src/main/java/tk/bluetree242/discordsrvutils/DiscordSRVUtils.java

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import tk.bluetree242.discordsrvutils.commandmanagement.CommandManager;
5757
import tk.bluetree242.discordsrvutils.commands.bukkit.DiscordSRVUtilsCommand;
5858
import tk.bluetree242.discordsrvutils.commands.bukkit.tabcompleters.DiscordSRVUtilsTabCompleter;
59-
import tk.bluetree242.discordsrvutils.commands.discord.*;
59+
import tk.bluetree242.discordsrvutils.commands.discord.HelpCommand;
6060
import tk.bluetree242.discordsrvutils.commands.discord.admin.TestMessageCommand;
6161
import tk.bluetree242.discordsrvutils.commands.discord.leveling.LeaderboardCommand;
6262
import tk.bluetree242.discordsrvutils.commands.discord.leveling.LevelCommand;
@@ -72,6 +72,7 @@
7272
import tk.bluetree242.discordsrvutils.leveling.LevelingManager;
7373
import tk.bluetree242.discordsrvutils.leveling.listeners.bukkit.BukkitLevelingListener;
7474
import tk.bluetree242.discordsrvutils.leveling.listeners.jda.DiscordLevelingListener;
75+
import tk.bluetree242.discordsrvutils.listeners.afk.CMIAfkListener;
7576
import tk.bluetree242.discordsrvutils.listeners.afk.EssentialsAFKListener;
7677
import tk.bluetree242.discordsrvutils.listeners.bukkit.JoinUpdateChecker;
7778
import tk.bluetree242.discordsrvutils.listeners.discordsrv.DiscordSRVListener;
@@ -151,6 +152,7 @@ public class DiscordSRVUtils extends JavaPlugin {
151152
private ConfManager<SuggestionsConfig> suggestionsConfigManager = ConfManager.create(getDataFolder().toPath(), "suggestions.yml", SuggestionsConfig.class);
152153
private SuggestionsConfig suggestionsConfig;
153154

155+
154156
//Thread Pool
155157
private ThreadPoolExecutor pool;
156158
//Our DiscordSRV Listener
@@ -159,6 +161,7 @@ public class DiscordSRVUtils extends JavaPlugin {
159161
private HikariDataSource sql;
160162
//listeners that should be registered
161163
private List<ListenerAdapter> listeners = new ArrayList<>();
164+
private long lastErrorTime = 0;
162165

163166
public static DiscordSRVUtils get() {
164167
return instance;
@@ -210,6 +213,11 @@ public void onLoad() {
210213
init();
211214
//require intents and cacheflags
212215
if (getServer().getPluginManager().getPlugin("DiscordSRV") != null) {
216+
if (DiscordSRV.isReady) {
217+
//Oh no, they are using a plugin manager to reload the plugin, give them a warn
218+
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");
219+
return;
220+
}
213221
DiscordSRV.api.requireIntent(GatewayIntent.GUILD_MESSAGE_REACTIONS);
214222
DiscordSRV.api.requireCacheFlag(CacheFlag.EMOTE);
215223
}
@@ -301,7 +309,7 @@ public void onEnable() {
301309
return;
302310
}
303311
//initialize pool
304-
pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(config.pool_size(), new ThreadFactory() {
312+
pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(config.pool_size(), new ThreadFactory() {
305313
@Override
306314
public Thread newThread(@NotNull Runnable r) {
307315

@@ -355,7 +363,7 @@ public void registerBukkitCommands() {
355363
getCommand("discordsrvutils").setTabCompleter(new DiscordSRVUtilsTabCompleter());
356364
}
357365

358-
private void startupError(Throwable ex,@NotNull String msg) {
366+
private void startupError(Throwable ex, @NotNull String msg) {
359367
setEnabled(false);
360368
logger.warning(msg);
361369
try {
@@ -365,7 +373,7 @@ private void startupError(Throwable ex,@NotNull String msg) {
365373
e.printStackTrace();
366374
}
367375
//tell them where to report
368-
logger.severe( "Send this to support at https://discordsrvutils.xyz/support");
376+
logger.severe("Send this to support at https://discordsrvutils.xyz/support");
369377
ex.printStackTrace();
370378
}
371379

@@ -442,13 +450,13 @@ private void initDefaultMessages() {
442450
}
443451
}
444452

445-
446453
public void onDisable() {
447454
if (dsrvlistener != null) DiscordSRV.api.unsubscribe(dsrvlistener);
448455
if (isReady()) {
449456
getJDA().removeEventListener(listeners.toArray(new Object[0]));
450457
}
451-
pool.shutdown();
458+
if (pool != null)
459+
pool.shutdown();
452460
if (WaiterManager.get() != null) WaiterManager.get().timer.cancel();
453461
if (sql != null) sql.close();
454462
}
@@ -474,7 +482,7 @@ private void whenStarted() {
474482
if (!levelingRoles.exists()) {
475483
levelingRoles.createNewFile();
476484
FileWriter writer = new FileWriter(levelingRoles);
477-
writer.write("{}");
485+
writer.write("{\n\n}");
478486
writer.close();
479487
levelingRolesRaw = new JSONObject();
480488
} else {
@@ -486,14 +494,14 @@ private void whenStarted() {
486494
logger.severe("Error creating leveling-roles.json");
487495
}
488496

497+
//Register Expansion
489498
if (getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) {
490499
new PAPIExpansion().register();
491500
}
492501

493502

494503
}
495504

496-
497505
public void registerListeners() {
498506
getJDA().addEventListener(listeners.toArray(new Object[0]));
499507
Bukkit.getServer().getPluginManager().registerEvents(new BukkitLevelingListener(), this);
@@ -517,9 +525,7 @@ public void registerCommands() {
517525
CommandManager.get().registerCommand(new DenySuggestionCommand());
518526
}
519527

520-
521528
/**
522-
*
523529
* @return `DiscordSRV.isReady`. This may change any time soon
524530
*/
525531
public boolean isReady() {
@@ -544,7 +550,7 @@ public void reloadConfigs() throws IOException, InvalidConfigException {
544550
if (!levelingRoles.exists()) {
545551
levelingRoles.createNewFile();
546552
FileWriter writer = new FileWriter(levelingRoles);
547-
writer.write("{/n/n}");
553+
writer.write("{\n\n}");
548554
writer.close();
549555
levelingRolesRaw = new JSONObject();
550556
} else {
@@ -591,6 +597,10 @@ public void whenReady() {
591597
getServer().getPluginManager().registerEvents(new EssentialsAFKListener(), this);
592598
hookedPlugins.add(getServer().getPluginManager().getPlugin("Essentials"));
593599
}
600+
if (getServer().getPluginManager().isPluginEnabled("CMI")) {
601+
getServer().getPluginManager().registerEvents(new CMIAfkListener(), this);
602+
hookedPlugins.add(getServer().getPluginManager().getPlugin("CMI"));
603+
}
594604
if (getServer().getPluginManager().isPluginEnabled("AdvancedBan")) {
595605
getServer().getPluginManager().registerEvents(new AdvancedBanPunishmentListener(), this);
596606
hookedPlugins.add(getServer().getPluginManager().getPlugin("AdvancedBan"));
@@ -708,7 +718,6 @@ private void doSuggestions() {
708718
}
709719
}
710720

711-
712721
public void setSettings() {
713722
if (!isReady()) return;
714723
OnlineStatus onlineStatus = getMainConfig().onlinestatus().equalsIgnoreCase("DND") ? OnlineStatus.DO_NOT_DISTURB : OnlineStatus.valueOf(getMainConfig().onlinestatus().toUpperCase());
@@ -805,7 +814,6 @@ public <U> void handleCF(CompletableFuture<U> cf, Consumer<U> success, Consumer<
805814
});
806815
}
807816

808-
809817
/**
810818
* For doing a cf inside another one
811819
*/
@@ -826,7 +834,6 @@ public void defaultHandle(Throwable ex, MessageChannel channel) {
826834
ex.printStackTrace();
827835
}
828836

829-
private long lastErrorTime = 0;
830837
public void defaultHandle(Throwable ex) {
831838
//handle error on thread pool
832839
if (!config.minimize_errors()) {
@@ -836,15 +843,15 @@ public void defaultHandle(Throwable ex) {
836843
logger.warning("Read the note above the error Please.");
837844
//don't spam errors
838845
if ((System.currentTimeMillis() - lastErrorTime) >= 180000)
839-
for (Player p : Bukkit.getOnlinePlayers()) {
840-
if (p.hasPermission("discordsrvutils.errornotifications")) {
841-
//tell admins that something was wrong
842-
TextComponent msg = new TextComponent(Utils.colors("&7[&eDSU&7] Plugin had an error. Check console for details."));
843-
msg.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://discordsrvutils.xyz/support"));
844-
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()));
845-
p.spigot().sendMessage(msg);
846+
for (Player p : Bukkit.getOnlinePlayers()) {
847+
if (p.hasPermission("discordsrvutils.errornotifications")) {
848+
//tell admins that something was wrong
849+
TextComponent msg = new TextComponent(Utils.colors("&7[&eDSU&7] Plugin had an error. Check console for details."));
850+
msg.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://discordsrvutils.xyz/support"));
851+
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()));
852+
p.spigot().sendMessage(msg);
853+
}
846854
}
847-
}
848855
lastErrorTime = System.currentTimeMillis();
849856

850857
} else {

src/main/java/tk/bluetree242/discordsrvutils/PAPIExpansion.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import org.bukkit.entity.Player;
2727
import tk.bluetree242.discordsrvutils.leveling.LevelingManager;
2828

29+
import java.util.List;
30+
2931
public class PAPIExpansion extends PlaceholderExpansion {
3032
private DiscordSRVUtils core = DiscordSRVUtils.get();
3133

@@ -49,6 +51,16 @@ public String getVersion() {
4951
return core.getDescription().getVersion();
5052
}
5153

54+
@Override
55+
public List<String> getPlaceholders() {
56+
return List.of("level", "rank", "xp");
57+
}
58+
59+
@Override
60+
public String getRequiredPlugin() {
61+
return "DiscordSRVUtils";
62+
}
63+
5264
@Override
5365
public String onPlaceholderRequest(Player p, String identifier) {
5466
identifier = identifier.toLowerCase();

src/main/java/tk/bluetree242/discordsrvutils/commandmanagement/BukkitCommand.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ public abstract class BukkitCommand implements CommandExecutor {
3535

3636
@Override
3737
public final boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
38-
Bukkit.getScheduler().runTaskAsynchronously(DiscordSRVUtils.get(), () -> {
39-
try {
40-
onRunAsync(sender, command, label, args);
41-
} catch (Throwable ex) {
42-
ex.printStackTrace();
43-
sender.sendMessage(Utils.colors("&cAn internal error occurred while executing this command"));
44-
}
45-
});
38+
Bukkit.getScheduler().runTaskAsynchronously(DiscordSRVUtils.get(), () -> {
39+
try {
40+
onRunAsync(sender, command, label, args);
41+
} catch (Throwable ex) {
42+
ex.printStackTrace();
43+
sender.sendMessage(Utils.colors("&cAn internal error occurred while executing this command"));
44+
}
45+
});
4646
return true;
4747
}
4848

src/main/java/tk/bluetree242/discordsrvutils/leveling/LevelingManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,16 @@ public int compare(String o1, String o2) {
178178
return null;
179179
}
180180

181-
public List<Role> getRolesToRemove() {
181+
public List<Role> getRolesToRemove(Integer level) {
182182
List<Role> roles = new ArrayList<>();
183183
Map<String, Object> map = core.levelingRolesRaw.toMap();
184184
List<Object> values = new ArrayList<>(map.values());
185185
for (Object value : values) {
186186
Long id = (Long) value;
187187
roles.add(core.getGuild().getRoleById(id));
188188
}
189+
if (level != null)
190+
roles.remove(getRoleForLevel(level));
189191
return roles;
190192
}
191193
}

src/main/java/tk/bluetree242/discordsrvutils/leveling/PlayerStats.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,15 @@
2525
import github.scarsz.discordsrv.DiscordSRV;
2626
import github.scarsz.discordsrv.dependencies.jda.api.entities.Member;
2727
import github.scarsz.discordsrv.dependencies.jda.api.entities.Role;
28+
import github.scarsz.discordsrv.dependencies.jda.api.requests.RestAction;
2829
import tk.bluetree242.discordsrvutils.DiscordSRVUtils;
2930
import tk.bluetree242.discordsrvutils.exceptions.UnCheckedSQLException;
3031

3132
import java.sql.Connection;
3233
import java.sql.PreparedStatement;
3334
import java.sql.SQLException;
35+
import java.util.ArrayList;
36+
import java.util.Collection;
3437
import java.util.UUID;
3538
import java.util.concurrent.CompletableFuture;
3639

@@ -103,14 +106,16 @@ public CompletableFuture<Boolean> setXP(int xp) {
103106
LevelingManager manager = LevelingManager.get();
104107
Member member = core.getGuild().retrieveMemberById(id).complete();
105108
if (member == null) return true;
106-
for (Role role : manager.getRolesToRemove()) {
109+
Collection actions = new ArrayList<>();
110+
for (Role role : manager.getRolesToRemove(level)) {
107111
if (member.getRoles().contains(role))
108-
core.getGuild().removeRoleFromMember(member, role).queue();
112+
actions.add(core.getGuild().removeRoleFromMember(member, role).reason("User Leveled Up"));
109113
}
110114
Role toAdd = manager.getRoleForLevel(level);
111115
if (toAdd != null) {
112-
core.getGuild().addRoleToMember(member, toAdd).queue();
116+
actions.add(core.getGuild().addRoleToMember(member, toAdd).reason("User Leveled Up"));
113117
}
118+
RestAction.allOf(actions).queue();
114119
return true;
115120
}
116121
PreparedStatement p1 = conn.prepareStatement("UPDATE leveling SET XP=? WHERE UUID=?");

0 commit comments

Comments
 (0)