parent
7866ddbe06
commit
4d234cf832
2 changed files with 29 additions and 5 deletions
|
@ -48,6 +48,7 @@ public class DiscordPlugin extends ButtonPlugin {
|
||||||
public static boolean SafeMode = true;
|
public static boolean SafeMode = true;
|
||||||
@Getter
|
@Getter
|
||||||
private Command2DC manager;
|
private Command2DC manager;
|
||||||
|
private boolean starting;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The prefix to use with Discord commands like /role. It only works in the bot channel.
|
* The prefix to use with Discord commands like /role. It only works in the bot channel.
|
||||||
|
@ -130,21 +131,30 @@ public class DiscordPlugin extends ButtonPlugin {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
starting = true;
|
||||||
val cb = DiscordClientBuilder.create(token).build().gateway();
|
val cb = DiscordClientBuilder.create(token).build().gateway();
|
||||||
cb.setInitialStatus(si -> Presence.doNotDisturb(Activity.playing("booting")));
|
cb.setInitialStatus(si -> Presence.doNotDisturb(Activity.playing("booting")));
|
||||||
cb.setStoreService(new JdkStoreService()); //The default doesn't work for some reason - it's waaay faster now
|
cb.setStoreService(new JdkStoreService()); //The default doesn't work for some reason - it's waaay faster now
|
||||||
cb.login().subscribe(dc -> {
|
cb.login().doOnError(t -> stopStarting()).subscribe(dc -> {
|
||||||
DiscordPlugin.dc = dc; //Set to gateway client
|
DiscordPlugin.dc = dc; //Set to gateway client
|
||||||
dc.on(ReadyEvent.class) // Listen for ReadyEvent(s)
|
dc.on(ReadyEvent.class) // Listen for ReadyEvent(s)
|
||||||
.map(event -> event.getGuilds().size()) // Get how many guilds the bot is in
|
.map(event -> event.getGuilds().size()) // Get how many guilds the bot is in
|
||||||
.flatMap(size -> dc
|
.flatMap(size -> dc
|
||||||
.on(GuildCreateEvent.class) // Listen for GuildCreateEvent(s)
|
.on(GuildCreateEvent.class) // Listen for GuildCreateEvent(s)
|
||||||
.take(size) // Take only the first `size` GuildCreateEvent(s) to be received
|
.take(size) // Take only the first `size` GuildCreateEvent(s) to be received
|
||||||
.collectList()).subscribe(this::handleReady); // Take all received GuildCreateEvents and make it a List
|
.collectList()).doOnError(t -> stopStarting()).subscribe(this::handleReady); // Take all received GuildCreateEvents and make it a List
|
||||||
}); /* All guilds have been received, client is fully connected */
|
}); /* All guilds have been received, client is fully connected */
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
TBMCCoreAPI.SendException("Failed to enable the Discord plugin!", e, this);
|
TBMCCoreAPI.SendException("Failed to enable the Discord plugin!", e, this);
|
||||||
getLogger().severe("You may be able to restart the plugin using /discord restart");
|
getLogger().severe("You may be able to restart the plugin using /discord restart");
|
||||||
|
stopStarting();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopStarting() {
|
||||||
|
synchronized (this) {
|
||||||
|
starting = false;
|
||||||
|
notifyAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,6 +185,10 @@ public class DiscordPlugin extends ButtonPlugin {
|
||||||
DPUtils.disableIfConfigErrorRes(null, commandChannel, DPUtils.getMessageChannel(commandChannel));
|
DPUtils.disableIfConfigErrorRes(null, commandChannel, DPUtils.getMessageChannel(commandChannel));
|
||||||
//Won't disable, just prints the warning here
|
//Won't disable, just prints the warning here
|
||||||
|
|
||||||
|
if (MinecraftChatModule.state == DPState.STOPPING_SERVER) {
|
||||||
|
stopStarting();
|
||||||
|
return; //Reusing that field to check if stopping while still initializing
|
||||||
|
}
|
||||||
CommonListeners.register(dc.getEventDispatcher());
|
CommonListeners.register(dc.getEventDispatcher());
|
||||||
TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(), this);
|
TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(), this);
|
||||||
TBMCCoreAPI.RegisterUserClass(DiscordPlayer.class, DiscordPlayer::new);
|
TBMCCoreAPI.RegisterUserClass(DiscordPlayer.class, DiscordPlayer::new);
|
||||||
|
@ -210,18 +224,28 @@ public class DiscordPlugin extends ButtonPlugin {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
TBMCCoreAPI.SendException("An error occurred while enabling DiscordPlugin!", e, this);
|
TBMCCoreAPI.SendException("An error occurred while enabling DiscordPlugin!", e, this);
|
||||||
}
|
}
|
||||||
|
stopStarting();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pluginPreDisable() {
|
public void pluginPreDisable() {
|
||||||
|
if (MinecraftChatModule.state == DPState.RUNNING)
|
||||||
|
MinecraftChatModule.state = DPState.STOPPING_SERVER;
|
||||||
|
synchronized (this) {
|
||||||
|
if (starting) {
|
||||||
|
try {
|
||||||
|
wait(10000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ChromaBot.getInstance() == null) return; //Failed to load
|
if (ChromaBot.getInstance() == null) return; //Failed to load
|
||||||
Timings timings = new Timings();
|
Timings timings = new Timings();
|
||||||
timings.printElapsed("Disable start");
|
timings.printElapsed("Disable start");
|
||||||
timings.printElapsed("Updating player list");
|
timings.printElapsed("Updating player list");
|
||||||
ChromaBot.getInstance().updatePlayerList();
|
ChromaBot.getInstance().updatePlayerList();
|
||||||
timings.printElapsed("Done");
|
timings.printElapsed("Done");
|
||||||
if (MinecraftChatModule.state == DPState.RUNNING)
|
|
||||||
MinecraftChatModule.state = DPState.STOPPING_SERVER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -405,7 +405,7 @@ public class MCChatListener implements Listener {
|
||||||
private boolean runCustomCommand(DiscordSenderBase dsender, String cmdlowercased) {
|
private boolean runCustomCommand(DiscordSenderBase dsender, String cmdlowercased) {
|
||||||
if (cmdlowercased.startsWith("list")) {
|
if (cmdlowercased.startsWith("list")) {
|
||||||
var players = Bukkit.getOnlinePlayers();
|
var players = Bukkit.getOnlinePlayers();
|
||||||
dsender.sendMessage("There are " + players.size() + " out of " + Bukkit.getMaxPlayers() + " players online.");
|
dsender.sendMessage("There are " + players.stream().filter(MCChatUtils::checkEssentials).count() + " out of " + Bukkit.getMaxPlayers() + " players online.");
|
||||||
dsender.sendMessage("Players: " + players.stream().filter(MCChatUtils::checkEssentials)
|
dsender.sendMessage("Players: " + players.stream().filter(MCChatUtils::checkEssentials)
|
||||||
.map(Player::getDisplayName).collect(Collectors.joining(", ")));
|
.map(Player::getDisplayName).collect(Collectors.joining(", ")));
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in a new issue