correctly do stop
This commit is contained in:
parent
5cac01b152
commit
031c592b33
5 changed files with 92 additions and 20 deletions
|
@ -264,6 +264,11 @@ public class Bot {
|
||||||
session.connect(false);
|
session.connect(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void stop () {
|
||||||
|
session.disconnect("Received stop signal");
|
||||||
|
Main.bots.remove(this);
|
||||||
|
}
|
||||||
|
|
||||||
public void addListener (Listener listener) {
|
public void addListener (Listener listener) {
|
||||||
listeners.add(listener);
|
listeners.add(listener);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||||
import land.chipmunk.chayapak.chomens_bot.plugins.ConsolePlugin;
|
import land.chipmunk.chayapak.chomens_bot.plugins.ConsolePlugin;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.LoggerUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.LoggerUtilities;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.util.PersistentDataUtilities;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.api.JDABuilder;
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
import net.dv8tion.jda.api.entities.Activity;
|
import net.dv8tion.jda.api.entities.Activity;
|
||||||
|
@ -44,6 +45,8 @@ public class Main {
|
||||||
|
|
||||||
private static final List<Thread> alreadyAddedThreads = new ArrayList<>();
|
private static final List<Thread> alreadyAddedThreads = new ArrayList<>();
|
||||||
|
|
||||||
|
private static JDA jda = null;
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
final Path configPath = Path.of("config.yml");
|
final Path configPath = Path.of("config.yml");
|
||||||
|
|
||||||
|
@ -125,17 +128,6 @@ public class Main {
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
}, 0, 1, TimeUnit.MINUTES);
|
}, 0, 1, TimeUnit.MINUTES);
|
||||||
|
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
|
||||||
try {
|
|
||||||
final boolean success = executorService.awaitTermination(3, TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
if (!success) System.exit(1);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initializeBots() {
|
public static void initializeBots() {
|
||||||
|
@ -145,7 +137,6 @@ public class Main {
|
||||||
Configuration.BotOption[] botsOptions = config.bots;
|
Configuration.BotOption[] botsOptions = config.bots;
|
||||||
|
|
||||||
// idk if these should be here lol, but it is just the discord stuff
|
// idk if these should be here lol, but it is just the discord stuff
|
||||||
JDA jda = null;
|
|
||||||
if (config.discord.enabled) {
|
if (config.discord.enabled) {
|
||||||
JDABuilder builder = JDABuilder.createDefault(config.discord.token);
|
JDABuilder builder = JDABuilder.createDefault(config.discord.token);
|
||||||
builder.enableIntents(GatewayIntent.MESSAGE_CONTENT);
|
builder.enableIntents(GatewayIntent.MESSAGE_CONTENT);
|
||||||
|
@ -193,4 +184,73 @@ public class Main {
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// most of these are stolen from HBot
|
||||||
|
public static void stop () {
|
||||||
|
executor.shutdownNow();
|
||||||
|
|
||||||
|
PersistentDataUtilities.stop();
|
||||||
|
|
||||||
|
executorService.shutdownNow();
|
||||||
|
|
||||||
|
try {
|
||||||
|
final boolean executorDone = executor.awaitTermination(5, TimeUnit.SECONDS);
|
||||||
|
final boolean executorServiceDone = executorService.awaitTermination(5, TimeUnit.SECONDS);
|
||||||
|
|
||||||
|
if (executorDone || executorServiceDone) {
|
||||||
|
System.out.println("Executors failed to shut down");
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<Bot> copiedList;
|
||||||
|
synchronized (bots) {
|
||||||
|
copiedList = new ArrayList<>(bots);
|
||||||
|
}
|
||||||
|
|
||||||
|
final boolean ircEnabled = config.irc.enabled;
|
||||||
|
final boolean discordEnabled = config.discord.enabled;
|
||||||
|
|
||||||
|
for (Bot bot : copiedList) {
|
||||||
|
if (discordEnabled) {
|
||||||
|
final String channelId = bot.discord.servers.get(bot.host + ":" + bot.port);
|
||||||
|
|
||||||
|
bot.discord.sendMessageInstantly("Stopping..", channelId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ircEnabled) {
|
||||||
|
bot.irc.quit("Stopping..");
|
||||||
|
}
|
||||||
|
|
||||||
|
bot.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
jda.shutdownNow();
|
||||||
|
|
||||||
|
if (discordEnabled) {
|
||||||
|
for (int i = 0; i < 150; i++) {
|
||||||
|
boolean stoppedDiscord = true;
|
||||||
|
|
||||||
|
for (Bot bot : bots) {
|
||||||
|
if (!bot.discord.shuttedDown) {
|
||||||
|
stoppedDiscord = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!stoppedDiscord) {
|
||||||
|
try {
|
||||||
|
Thread.sleep(50);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.exit(69); // nice
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package land.chipmunk.chayapak.chomens_bot.commands;
|
package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.Main;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
|
@ -26,7 +27,7 @@ public class StopCommand extends Command {
|
||||||
|
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
System.exit(0);
|
Main.stop();
|
||||||
|
|
||||||
return Component.text("Stopping").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
return Component.text("Stopping").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.api.events.session.ShutdownEvent;
|
||||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.JoinConfiguration;
|
import net.kyori.adventure.text.JoinConfiguration;
|
||||||
|
@ -44,6 +45,8 @@ public class DiscordPlugin {
|
||||||
|
|
||||||
public final String discordUrl;
|
public final String discordUrl;
|
||||||
|
|
||||||
|
public boolean shuttedDown = false;
|
||||||
|
|
||||||
public DiscordPlugin (Configuration config, JDA jda) {
|
public DiscordPlugin (Configuration config, JDA jda) {
|
||||||
final Configuration.Discord options = config.discord;
|
final Configuration.Discord options = config.discord;
|
||||||
this.prefix = options.prefix;
|
this.prefix = options.prefix;
|
||||||
|
@ -296,6 +299,11 @@ public class DiscordPlugin {
|
||||||
|
|
||||||
bot.chat.tellraw(component);
|
bot.chat.tellraw(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onShutdown(@NotNull ShutdownEvent event) {
|
||||||
|
shuttedDown = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
bot.discord = this;
|
bot.discord = this;
|
||||||
|
|
|
@ -51,13 +51,6 @@ public class PersistentDataUtilities {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}, 0, 100, TimeUnit.MILLISECONDS);
|
}, 0, 100, TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
future.cancel(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void init () {
|
private static void init () {
|
||||||
|
@ -92,6 +85,11 @@ public class PersistentDataUtilities {
|
||||||
} catch (IOException ignored) {}
|
} catch (IOException ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void stop () {
|
||||||
|
future.cancel(false);
|
||||||
|
write(jsonObject.toString());
|
||||||
|
}
|
||||||
|
|
||||||
public static void put (String property, JsonElement value) {
|
public static void put (String property, JsonElement value) {
|
||||||
Main.executorService.submit(() -> queue.put(property, value));
|
Main.executorService.submit(() -> queue.put(property, value));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue