diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/ShowGalleriesCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/ShowGalleriesCommand.java new file mode 100644 index 0000000..07851ef --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/ShowGalleriesCommand.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.staff; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import org.javacord.api.entity.channel.ServerTextChannel; +import org.javacord.api.entity.message.embed.EmbedBuilder; +import org.javacord.api.entity.server.Server; + +import dev.salmonllama.fsbot.config.BotConfig; +import dev.salmonllama.fsbot.database.controllers.GalleryController; +import dev.salmonllama.fsbot.database.models.GalleryChannel; +import dev.salmonllama.fsbot.guthix.Command; +import dev.salmonllama.fsbot.guthix.CommandContext; +import dev.salmonllama.fsbot.guthix.CommandPermission; +import dev.salmonllama.fsbot.guthix.PermissionType; + +public class ShowGalleriesCommand extends Command { + @Override public String name() { return "Show Galleries"; } + @Override public String description() { return "Shows registered gallery channels in the current server"; } + @Override public String usage() { return "showgalleries"; } + @Override public String category() { return "Staff"; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.ROLE, BotConfig.STAFF_ROLE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("showgalleries", "listgalleries")); } + + @Override public void onCommand(CommandContext ctx) { + if (ctx.isPrivateMessage()) { + ctx.reply("This command can only be used within a server"); // TODO: Preset embeds again, yeah + return; + } + + ctx.getServer().ifPresent(server -> { + try { + Collection galleries = GalleryController.getGalleriesByServer(server.getIdAsString()); + ctx.reply(galleryEmbed(galleries, server)); + } catch (SQLException e) { + ctx.reply("An exception has occurred: " + e.getMessage()); + } + + }); + } + + EmbedBuilder galleryEmbed(Collection galleries, Server server) { // TODO: Base FSBot embed. + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Server Gallery Channels"); + + Collection mentionTags = galleries.stream().map( + galleryChannel -> server.getChannelById( + galleryChannel.getChannelId()).get() // Can call get safely -> The channel is not stored if it is not a valid ServerTextChannel + .asServerTextChannel().get()) // Same as above + .map(ServerTextChannel::getMentionTag).collect(Collectors.toList()); + + Collection tags = galleries.stream().map(GalleryChannel::getTag).collect(Collectors.toList()); + + embed.addField("Channels", String.join("\n", mentionTags), true); + embed.addField("Tags", String.join("\n", tags), true); + + return embed; + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/database/models/GalleryChannel.java b/src/main/java/dev/salmonllama/fsbot/database/models/GalleryChannel.java index cf736fd..dc6f4b5 100644 --- a/src/main/java/dev/salmonllama/fsbot/database/models/GalleryChannel.java +++ b/src/main/java/dev/salmonllama/fsbot/database/models/GalleryChannel.java @@ -18,6 +18,26 @@ public class GalleryChannel extends DatabaseModel { } + public String getServerId() { + return serverId; + } + + public String getServerName() { + return serverName; + } + + public String getChannelId() { + return channelId; + } + + public String getChannelName() { + return channelName; + } + + public String getTag() { + return tag; + } + public static String schema() { return "CREATE TABLE IF NOT EXISTS galleries (" + "server_id TEXT," + diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java index 7e7091a..cee76d9 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java @@ -68,6 +68,7 @@ public class Guthix implements MessageCreateListener { addCommand(new OutfitInfoCommand(db)); addCommand(new SetStatusCommand()); addCommand(new WelcomeMessageCommand()); + addCommand(new ShowGalleriesCommand()); // General Commands addCommand(new PingCommand());