From 0d5b23211a7adb7eb0f5ff335a5c719292d00c61 Mon Sep 17 00:00:00 2001 From: thmsdy Date: Sat, 27 Jun 2026 01:44:53 -0500 Subject: [PATCH] Fix null guild and shutdown message --- .../fpghoti/biscuit/guild/BiscuitGuild.java | 4 +- .../biscuit/plugin/PluginController.java | 124 ++++++++++-------- .../java/com/fpghoti/biscuit/rss/YTEntry.java | 1 + .../java/com/fpghoti/biscuit/rss/YTFeed.java | 16 +-- 4 files changed, 83 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/fpghoti/biscuit/guild/BiscuitGuild.java b/src/main/java/com/fpghoti/biscuit/guild/BiscuitGuild.java index b3def21..959b04c 100644 --- a/src/main/java/com/fpghoti/biscuit/guild/BiscuitGuild.java +++ b/src/main/java/com/fpghoti/biscuit/guild/BiscuitGuild.java @@ -240,7 +240,7 @@ public class BiscuitGuild { logger.error("Error retrieving Text Channel from YouTube feed file."); return null; } - YTFeed feed = new YTFeed(alias, textChannel, youTubeChannelURL, message); + YTFeed feed = new YTFeed(this, alias, textChannel, youTubeChannelURL, message); feed.setLastVideo(lastVideo); feed.setLastVideoTimestamp(lastVideoTimestamp); return new YTFeedConfig(this, feed); @@ -260,7 +260,7 @@ public class BiscuitGuild { if(guild == null || ytfeeds.containsKey(alias)) { return false; } - YTFeed feed = new YTFeed(alias, channel, channelURL, message); + YTFeed feed = new YTFeed(this, alias, channel, channelURL, message); String lastURL =feed.getEntries().getLast().getURL(); feed.setLastVideo(lastURL); diff --git a/src/main/java/com/fpghoti/biscuit/plugin/PluginController.java b/src/main/java/com/fpghoti/biscuit/plugin/PluginController.java index ceb237e..8372665 100644 --- a/src/main/java/com/fpghoti/biscuit/plugin/PluginController.java +++ b/src/main/java/com/fpghoti/biscuit/plugin/PluginController.java @@ -2,60 +2,80 @@ package com.fpghoti.biscuit.plugin; import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import org.pf4j.DefaultPluginManager; import org.pf4j.PluginManager; +import org.pf4j.PluginWrapper; -public class PluginController implements Iterable{ +public class PluginController implements Iterable { - private PluginManager pluginManager; - private ArrayList plugins; - - public PluginController() { - pluginManager = new DefaultPluginManager(); - plugins = new ArrayList(); - } - - @Override - public Iterator iterator() { - return new ArrayList(plugins).iterator(); - } - - public void registerPlugin(BiscuitPlugin plugin) { - if(!contains(plugin)) { - plugins.add(plugin); - } - } - - public void loadPlugins() { - pluginManager.loadPlugins(); - } - - public void startPlugins() { - pluginManager.startPlugins(); - } - - public void stopPlugins() { - pluginManager.stopPlugins(); - } - - public void unloadPlugins() { - pluginManager.unloadPlugins(); - } - - public void shutdownPlugins() { - stopPlugins(); - unloadPlugins(); - plugins.clear(); - } - - public boolean contains(BiscuitPlugin plugin) { - for(BiscuitPlugin pl : plugins) { - if(plugin.getID().equals(pl.getID())) { - return true; - } - } - return false; - } - -} + private PluginManager pluginManager; + private ArrayList plugins; + + public PluginController() { + pluginManager = new DefaultPluginManager(); + plugins = new ArrayList<>(); + } + + @Override + public Iterator iterator() { + return new ArrayList<>(plugins).iterator(); + } + + public void registerPlugin(BiscuitPlugin plugin) { + if (!contains(plugin)) { + plugins.add(plugin); + } + } + + public void loadPlugins() { + pluginManager.loadPlugins(); + } + + public void startPlugins() { + pluginManager.startPlugins(); + } + + public void stopPlugins() { + List startedPlugins = new ArrayList<>(pluginManager.getStartedPlugins()); + + for (PluginWrapper plugin : startedPlugins) { + try { + pluginManager.stopPlugin(plugin.getPluginId()); + } catch (Exception e) { + System.err.println("Failed to stop plugin: " + plugin.getPluginId()); + e.printStackTrace(); + } + } + } + + public void unloadPlugins() { + List loadedPlugins = new ArrayList<>(pluginManager.getPlugins()); + + for (PluginWrapper plugin : loadedPlugins) { + try { + pluginManager.unloadPlugin(plugin.getPluginId()); + } catch (Exception e) { + System.err.println("Failed to unload plugin: " + plugin.getPluginId()); + e.printStackTrace(); + } + } + } + + public void shutdownPlugins() { + stopPlugins(); + unloadPlugins(); + + plugins.clear(); + } + + public boolean contains(BiscuitPlugin plugin) { + for (BiscuitPlugin pl : plugins) { + if (plugin.getID().equals(pl.getID())) { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/fpghoti/biscuit/rss/YTEntry.java b/src/main/java/com/fpghoti/biscuit/rss/YTEntry.java index add162f..6a8e8b0 100644 --- a/src/main/java/com/fpghoti/biscuit/rss/YTEntry.java +++ b/src/main/java/com/fpghoti/biscuit/rss/YTEntry.java @@ -21,6 +21,7 @@ public class YTEntry { this.id = id; this.title = title; this.author = author; + this.timestamp = timestamp; this.description = description; this.thumbnail = thumbnail; } diff --git a/src/main/java/com/fpghoti/biscuit/rss/YTFeed.java b/src/main/java/com/fpghoti/biscuit/rss/YTFeed.java index 2b791ee..e6f1360 100644 --- a/src/main/java/com/fpghoti/biscuit/rss/YTFeed.java +++ b/src/main/java/com/fpghoti/biscuit/rss/YTFeed.java @@ -28,14 +28,14 @@ public class YTFeed { private String lastVideo; private String lastVideoTimestamp; - public YTFeed(String alias, TextChannel channel, String channelURL, String message) { - this.guild = BiscuitGuild.getBiscuitGuild(channel.getGuild()); - this.alias = alias; - this.channel = channel; - this.channelURL = channelURL; - this.message = message; - lastVideo = ""; - lastVideoTimestamp = ""; + public YTFeed(BiscuitGuild guild, String alias, TextChannel channel, String channelURL, String message) { + this.guild = guild; + this.alias = alias; + this.channel = channel; + this.channelURL = channelURL; + this.message = message; + lastVideo = ""; + lastVideoTimestamp = ""; } public String getAlias() {