diff --git a/src/main/java/wtf/triplapeeck/oatmeal/commands/Command.java b/src/main/java/wtf/triplapeeck/oatmeal/commands/Command.java index 66cd792..f106121 100644 --- a/src/main/java/wtf/triplapeeck/oatmeal/commands/Command.java +++ b/src/main/java/wtf/triplapeeck/oatmeal/commands/Command.java @@ -2,6 +2,7 @@ import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -263,8 +264,18 @@ public boolean ensureTableIsEmpty(@NotNull DataCarriage carriage) { } - - + public boolean isThreadable(@NotNull DataCarriage carriage) { + ChannelType type = carriage.channel.getType(); + return type == ChannelType.TEXT; + } + public boolean ensureThreadable(@NotNull DataCarriage carriage) { + if (isThreadable(carriage)) { + return true; + } else { + carriage.channel.sendMessage("You cannot use this command unless threads are available, such as within normal guild channels!").queue(); + return false; + } + } public boolean isFirstArgument(@NotNull DataCarriage carriage) { try { return (carriage.args[1] != "" && carriage.args[1] != null); diff --git a/src/main/java/wtf/triplapeeck/oatmeal/commands/CommandHandler.java b/src/main/java/wtf/triplapeeck/oatmeal/commands/CommandHandler.java index da1e1de..aedad2e 100644 --- a/src/main/java/wtf/triplapeeck/oatmeal/commands/CommandHandler.java +++ b/src/main/java/wtf/triplapeeck/oatmeal/commands/CommandHandler.java @@ -32,9 +32,18 @@ public void addCommand(@NotNull Command command) { public void handle(@NotNull MessageReceivedEvent event, @NotNull JDA api, ThreadManager listener) { DataCarriage carriage; carriage = new DataCarriage(); - if ( event.getAuthor().getIdLong()==564635010917859332L) return; + if ( event.getAuthor().getIdLong()==api.getSelfUser().getIdLong()) return; Logger.customLog("Listener", "Prepare"); Prepare(event, api, carriage); + if (carriage.channelStorable.getAutoThread()) { + String name; + if (carriage.message.getContentRaw().length()>50) { + name=carriage.message.getContentRaw().substring(1, 50); + } else { + name=carriage.message.getContentRaw(); + } + carriage.message.createThreadChannel(name).queue(); + } Logger.customLog("Listener", "HandleMessage"); HandleMessage(event, carriage); Logger.customLog("Listener", "Main"); diff --git a/src/main/java/wtf/triplapeeck/oatmeal/commands/essential/SetAutoThread.java b/src/main/java/wtf/triplapeeck/oatmeal/commands/essential/SetAutoThread.java new file mode 100644 index 0000000..ca5d2df --- /dev/null +++ b/src/main/java/wtf/triplapeeck/oatmeal/commands/essential/SetAutoThread.java @@ -0,0 +1,44 @@ +package wtf.triplapeeck.oatmeal.commands.essential; + +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import org.jetbrains.annotations.NotNull; +import wtf.triplapeeck.oatmeal.DataCarriage; +import wtf.triplapeeck.oatmeal.commands.Command; +import wtf.triplapeeck.oatmeal.listeners.ThreadManager; + +public class SetAutoThread extends Command { + @Override + public void handler(MessageReceivedEvent event, DataCarriage carriage, ThreadManager listener) { + if (ensureAdministrator(carriage) && ensureFirstArgument(carriage) && ensureThreadable(carriage)) { + String preference = carriage.args[1]; + if (preference.equalsIgnoreCase("enable") || preference.equalsIgnoreCase("disable")) { + carriage.channelStorable.setAutoThread(preference.equalsIgnoreCase("enable")); + carriage.channel.sendMessage("Messages in this channel now have auto-threading " + preference.toLowerCase() + "d.").queue(); + } else { + carriage.channel.sendMessage("You have to choose either enable or disable auto-threading.").queue(); + } + } + } + @NotNull + @Override + public CommandCategory getCategory() { return CommandCategory.ESSENTIAL;} + + @NotNull + @Override + public String getDocumentation() { + return "Used to enable or disable auto-threading for your server" + + "\nAuto threading causes a thread to be made for any message sent within this channel" + + "\nUsage s!autothread [enable/disable]" + + "\nUpdates the channel setting for currency" + + "\nExample: s!autothread enable"; + } + + @Override + public @NotNull String getName() { return "autothread"; } + + @Override + public @NotNull boolean hasPermission(DataCarriage carriage, User user) { + return isAdministrator(carriage) && isThreadable(carriage); + } +} diff --git a/src/main/java/wtf/triplapeeck/oatmeal/entities/ChannelData.java b/src/main/java/wtf/triplapeeck/oatmeal/entities/ChannelData.java index e865699..5517e77 100644 --- a/src/main/java/wtf/triplapeeck/oatmeal/entities/ChannelData.java +++ b/src/main/java/wtf/triplapeeck/oatmeal/entities/ChannelData.java @@ -49,5 +49,7 @@ public synchronized Integer tableCount() { public abstract void setTable(Table tbl) throws ValidTableException; public abstract void removeTable() throws UsedTableException; public abstract void releaseTable(); + public abstract void setAutoThread(boolean enabled); + public abstract boolean getAutoThread(); public abstract void load(); } diff --git a/src/main/java/wtf/triplapeeck/oatmeal/entities/mariadb/MariaChannel.java b/src/main/java/wtf/triplapeeck/oatmeal/entities/mariadb/MariaChannel.java index 64dd9d8..2ff064e 100644 --- a/src/main/java/wtf/triplapeeck/oatmeal/entities/mariadb/MariaChannel.java +++ b/src/main/java/wtf/triplapeeck/oatmeal/entities/mariadb/MariaChannel.java @@ -16,7 +16,8 @@ public class MariaChannel extends ChannelData { @DatabaseField(id=true) public @NotNull String id; - + @DatabaseField(canBeNull=false) + public boolean autoThread=false; @DatabaseField(canBeNull = true) public @Nullable String tableJson; @@ -77,4 +78,12 @@ public synchronized void load() { public String getID() { return null; } + @Override + public synchronized boolean getAutoThread() { + return autoThread; + } + @Override + public synchronized void setAutoThread(boolean enabled) { + this.autoThread=enabled; + } } diff --git a/src/main/java/wtf/triplapeeck/oatmeal/util/ORMLiteDatabaseUtil.java b/src/main/java/wtf/triplapeeck/oatmeal/util/ORMLiteDatabaseUtil.java index 63c9219..dc17c79 100644 --- a/src/main/java/wtf/triplapeeck/oatmeal/util/ORMLiteDatabaseUtil.java +++ b/src/main/java/wtf/triplapeeck/oatmeal/util/ORMLiteDatabaseUtil.java @@ -53,7 +53,7 @@ public ORMLiteDatabaseUtil() throws SQLException { upgrade(); } - private static final int VERSION=3; + private static final int VERSION=4; public static int getVersion() { return VERSION; @@ -89,6 +89,14 @@ public static void upgrade() { } case 3: Logger.basicLog(Logger.Level.INFO, "Database now ORM Version 3"); + try { + userDao.executeRaw("ALTER TABLE oatmeal_channels ADD COLUMN autoThread TINYINT(1);"); + userDao.executeRaw("ALTER TABLE oatmeal_channels MODIFY COLUMN autoThread TINYINT(1) NOT NULL;"); + } catch (SQLException e) { + throw new RuntimeException(e); + } + case 4: + Logger.basicLog(Logger.Level.INFO, "Database now ORM Version 4"); } config.version=VERSION; Config.saveConfig();