diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordBot.java b/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordBot.java index 3928da7b..5f770366 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordBot.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordBot.java @@ -32,18 +32,20 @@ import de.steamwar.velocitycore.discord.util.AuthManager; import lombok.Getter; import net.dv8tion.jda.api.*; import net.dv8tion.jda.api.entities.*; -import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.entities.emoji.Emoji; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.exceptions.ErrorResponseException; import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.CommandData; +import net.dv8tion.jda.api.interactions.commands.build.Commands; import net.dv8tion.jda.api.interactions.commands.build.OptionData; import net.dv8tion.jda.api.interactions.components.ActionRow; -import net.dv8tion.jda.api.interactions.components.Button; +import net.dv8tion.jda.api.interactions.components.buttons.Button; import net.dv8tion.jda.api.requests.restaction.CommandListUpdateAction; import net.dv8tion.jda.api.utils.MemberCachePolicy; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; -import javax.security.auth.login.LoginException; import java.awt.*; import java.util.List; import java.util.*; @@ -87,15 +89,11 @@ public class DiscordBot { public DiscordBot(DiscordConfig config) { this.config = config; - try { - jda = JDABuilder - .createDefault(config.getToken()) - .setStatus(OnlineStatus.ONLINE) - .setMemberCachePolicy(MemberCachePolicy.ONLINE) - .build(); - } catch (LoginException e) { - throw new SecurityException("Could not login", e); - } + jda = JDABuilder + .createDefault(config.getToken()) + .setStatus(OnlineStatus.ONLINE) + .setMemberCachePolicy(MemberCachePolicy.ONLINE) + .build(); instance = this; VelocityCore.schedule(this::asyncInit).schedule(); @@ -109,9 +107,9 @@ public class DiscordBot { } activity(); - new StaticMessageChannel(config.channel("roles"), () -> new MessageBuilder() + new StaticMessageChannel(config.channel("roles"), () -> new MessageCreateBuilder() .setContent("**Rollenvergabe**\nKlicke um eine Rolle zu bekommen:") - .setActionRows(ActionRow.of(config.getRoles().values().stream().map(DiscordConfig.DiscordRole::toButton).toArray(Button[]::new))), event -> InteractionReply.reply(event, reply -> { + .setComponents(ActionRow.of(config.getRoles().values().stream().map(DiscordConfig.DiscordRole::toButton).toArray(Button[]::new))), event -> InteractionReply.reply(event, reply -> { Member member = event.getMember(); Guild guild = event.getGuild(); Role role = guild.getRoleById(event.getComponentId()); @@ -124,33 +122,35 @@ public class DiscordBot { reply.system("DC_ROLE_ADDED", role.getAsMention()); } })); - new StaticMessageChannel(config.channel("rules"), () -> new MessageBuilder() + new StaticMessageChannel(config.channel("rules"), () -> new MessageCreateBuilder() .setEmbeds(new EmbedBuilder() .setDescription(String.join("\n", config.getRules())) .setColor(Color.GRAY) .setAuthor("SteamWar", "https://steamwar.de") .setTitle("Regeln und Infos") .build()) - .setActionRows( + .setComponents( ActionRow.of(Button.link("https://steamwar.de", "Website"), Button.link("https://steamwar.de/youtube", "YouTube")), ActionRow.of(Button.primary("auth", Emoji.fromUnicode("U+2705")).withLabel("Minecraft verknüpfen")) ), event -> { if(event.getComponentId().equals("auth")) event.reply("Gebe innerhalb der nächsten 10 Minuten ``/verify " + AuthManager.createDiscordAuthToken(event.getUser()) + "`` auf dem Minecraft Server ein").setEphemeral(true).queue(); }); - new StaticMessageChannel(config.channel("ticket"), () -> new MessageBuilder() + new StaticMessageChannel(config.channel("ticket"), () -> new MessageCreateBuilder() .setEmbeds(new EmbedBuilder() .setDescription("Hier kannst du Tickets öffnen, welche nur von dir und Teammitgliedern eingesehen werden können.") .setTitle("SteamWar Tickets") .setColor(Color.RED) .build()) - .setActionRows(ActionRow.of(Arrays.stream(DiscordTicketType.values()).map(DiscordTicketType::toButton).toArray(Button[]::new))), DiscordTicketHandler::openTicket); + .setComponents(ActionRow.of(Arrays.stream(DiscordTicketType.values()).map(DiscordTicketType::toButton).toArray(Button[]::new))), DiscordTicketHandler::openTicket); eventChannel = new StaticMessageChannel(config.channel("events"), EventChannel::get); checklistChannel = new ChecklistChannel(config.channel("checklist")); announcementChannel = new DiscordChannel(config.channel("announcement")) { @Override - public void received(GuildMessageReceivedEvent event) { + public void received(MessageReceivedEvent event) { + if (!event.isFromGuild()) return; + Chatter.broadcast().system("ALERT", event.getMessage().getContentDisplay()); } }; @@ -198,7 +198,7 @@ public class DiscordBot { .keySet().stream() .filter(command -> !correctCommands.contains(command)) .filter(command -> command.matches("^[\\w-]+$")) - .map(command -> new CommandData(command, command).addOptions(commandArgument)) + .map(command -> Commands.slash(command, command).addOptions(commandArgument)) .toArray(CommandData[]::new)) .queue(); } diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordConfig.java b/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordConfig.java index 967d74a3..af930d77 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordConfig.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordConfig.java @@ -23,9 +23,9 @@ import de.steamwar.velocitycore.Config; import de.steamwar.velocitycore.VelocityCore; import lombok.Getter; import lombok.NoArgsConstructor; -import net.dv8tion.jda.api.entities.Emoji; -import net.dv8tion.jda.api.interactions.components.Button; -import net.dv8tion.jda.api.interactions.components.ButtonStyle; +import net.dv8tion.jda.api.entities.emoji.Emoji; +import net.dv8tion.jda.api.interactions.components.buttons.Button; +import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle; import java.io.File; import java.util.List; diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordTicketType.java b/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordTicketType.java index 5c6a2187..8cb67e6e 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordTicketType.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/DiscordTicketType.java @@ -20,9 +20,9 @@ package de.steamwar.velocitycore.discord; import lombok.AllArgsConstructor; -import net.dv8tion.jda.api.entities.Emoji; -import net.dv8tion.jda.api.interactions.components.Button; -import net.dv8tion.jda.api.interactions.components.ButtonStyle; +import net.dv8tion.jda.api.entities.emoji.Emoji; +import net.dv8tion.jda.api.interactions.components.buttons.Button; +import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle; @AllArgsConstructor public enum DiscordTicketType { diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChannel.java b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChannel.java index 304e2d0f..35e78714 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChannel.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChannel.java @@ -26,11 +26,12 @@ import de.steamwar.messages.Message; import de.steamwar.sql.SteamwarUser; import lombok.AllArgsConstructor; import lombok.Getter; -import net.dv8tion.jda.api.MessageBuilder; -import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.User; -import net.dv8tion.jda.api.events.interaction.GenericComponentInteractionCreateEvent; -import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; +import net.dv8tion.jda.api.events.interaction.component.GenericComponentInteractionCreateEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; +import net.dv8tion.jda.api.utils.messages.MessageCreateData; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -57,19 +58,19 @@ public class DiscordChannel extends Chatter.PlayerlessChatter { } public void send(String message) { - send(new MessageBuilder() - .append(message + send(new MessageCreateBuilder() + .setContent(message .replace("&", "") .replace("@everyone", "`@everyone`") .replace("@here", "`@here`") .replaceAll("<[@#]!?\\d+>", "`$0`"))); } - public void send(MessageBuilder builder) { + public void send(MessageCreateBuilder builder) { channel.sendMessage(builder.build()).queue(); } - public void received(GuildMessageReceivedEvent event) { + public void received(MessageReceivedEvent event) { event.getMessage().delete().queue(); } diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChatRoom.java b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChatRoom.java index 2d5f0fb2..7aec1362 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChatRoom.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/DiscordChatRoom.java @@ -24,7 +24,7 @@ import de.steamwar.messages.Chatter; import de.steamwar.messages.ChatterGroup; import de.steamwar.sql.Punishment; import de.steamwar.sql.SteamwarUser; -import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import java.util.function.Supplier; @@ -40,7 +40,9 @@ public class DiscordChatRoom extends DiscordChannel { } @Override - public void received(GuildMessageReceivedEvent event) { + public void received(MessageReceivedEvent event) { + if (!event.isFromGuild()) return; + SteamwarUser user = SteamwarUser.get(event.getAuthor().getIdLong()); if (user == null || event.getMessage().getContentRaw().length() > 250 || user.isPunished(Punishment.PunishmentType.Ban) || user.isPunished(Punishment.PunishmentType.Mute)) { event.getMessage().delete().queue(); diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java index b8d8b1bc..051b3883 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/EventChannel.java @@ -25,10 +25,10 @@ import de.steamwar.sql.Team; import de.steamwar.sql.TeamTeilnahme; import lombok.experimental.UtilityClass; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.MessageBuilder; -import net.dv8tion.jda.api.entities.Emoji; +import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.interactions.components.ActionRow; -import net.dv8tion.jda.api.interactions.components.selections.SelectionMenu; +import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; import java.awt.*; import java.sql.Timestamp; @@ -40,21 +40,21 @@ import java.util.stream.Collectors; @UtilityClass public class EventChannel { - public MessageBuilder get() { + public MessageCreateBuilder get() { if (Event.get() == null) return updateComing(); return updateCurrent(); } - private MessageBuilder updateComing() { + private MessageCreateBuilder updateComing() { EmbedBuilder embedBuilder = new EmbedBuilder() .setColor(Color.GRAY) .setTitle("Zukünftige Events") .setAuthor("SteamWar", "https://www.steamwar.de"); - SelectionMenu.Builder menuBuilder = SelectionMenu.create("eventName") + StringSelectMenu.Builder menuBuilder = StringSelectMenu.create("eventName") .setPlaceholder("Wähle ein Event aus!") .setMinValues(1) .setMaxValues(1); @@ -77,16 +77,16 @@ public class EventChannel { } }); - MessageBuilder messageBuilder = new MessageBuilder() + MessageCreateBuilder messageBuilder = new MessageCreateBuilder() .setEmbeds(embedBuilder.build()); if(events.stream().anyMatch(event -> event.getDeadline().after(Timestamp.from(Instant.now())))) { - messageBuilder.setActionRows(ActionRow.of(menuBuilder.build())); + messageBuilder.setComponents(ActionRow.of(menuBuilder.build())); } return messageBuilder; } - private MessageBuilder updateCurrent() { + private MessageCreateBuilder updateCurrent() { Event event = Event.get(); EmbedBuilder embedBuilder = new EmbedBuilder() .setColor(Color.GRAY) diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/InteractionReply.java b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/InteractionReply.java index cbacf536..7366ae96 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/InteractionReply.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/InteractionReply.java @@ -19,7 +19,8 @@ package de.steamwar.velocitycore.discord.channels; -import net.dv8tion.jda.api.interactions.Interaction; +import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback; +import net.dv8tion.jda.api.interactions.components.ComponentInteraction; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -29,18 +30,18 @@ import java.util.function.Consumer; public class InteractionReply extends DiscordChannel { - public static void reply(Interaction interaction, Consumer consumer) { + public static void reply(IReplyCallback interaction, Consumer consumer) { InteractionReply reply = new InteractionReply(interaction); consumer.accept(reply); reply.submit(); } - private final Interaction interaction; + private final IReplyCallback interaction; private boolean replied = false; private final List messages = new ArrayList<>(); - private InteractionReply(Interaction interaction) { + private InteractionReply(IReplyCallback interaction) { super(interaction.getUser()); this.interaction = interaction; } diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/StaticMessageChannel.java b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/StaticMessageChannel.java index 2041583f..3a165915 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/channels/StaticMessageChannel.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/channels/StaticMessageChannel.java @@ -20,35 +20,36 @@ package de.steamwar.velocitycore.discord.channels; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.MessageBuilder; import net.dv8tion.jda.api.entities.Message; -import net.dv8tion.jda.api.events.interaction.GenericComponentInteractionCreateEvent; +import net.dv8tion.jda.api.events.interaction.component.GenericComponentInteractionCreateEvent; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; +import net.dv8tion.jda.api.utils.messages.MessageEditData; import java.util.function.Consumer; import java.util.function.Supplier; public class StaticMessageChannel extends DiscordChannel { - public static MessageBuilder toMessageBuilder(EmbedBuilder embedBuilder) { - MessageBuilder messageBuilder = new MessageBuilder(); + public static MessageCreateBuilder toMessageBuilder(EmbedBuilder embedBuilder) { + MessageCreateBuilder messageBuilder = new MessageCreateBuilder(); messageBuilder.setEmbeds(embedBuilder.build()); return messageBuilder; } private Message message; - private final Supplier supplier; + private final Supplier supplier; private final Consumer interaction; - public StaticMessageChannel(String channel, Supplier supplier) { + public StaticMessageChannel(String channel, Supplier supplier) { this(channel, supplier, event -> {}); } - public StaticMessageChannel(String channel, Supplier supplier, Consumer interaction) { + public StaticMessageChannel(String channel, Supplier supplier, Consumer interaction) { super(channel); this.supplier = supplier; this.interaction = interaction; - if(getChannel().hasLatestMessage()) + if(getChannel().getLatestMessageIdLong() != 0) message = getChannel().getIterableHistory().complete().stream().filter(m -> m.getAuthor().isBot()).findFirst().orElse(null); update(); @@ -58,7 +59,7 @@ public class StaticMessageChannel extends DiscordChannel { if (message == null) { getChannel().sendMessage(supplier.get().build()).queue(m -> message = m); } else { - message.editMessage(supplier.get().build()).queue(); + message.editMessage(MessageEditData.fromCreateData(supplier.get().build())).queue(); } } diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/ChannelListener.java b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/ChannelListener.java index 7665c40f..fe8795e6 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/ChannelListener.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/ChannelListener.java @@ -25,11 +25,11 @@ import de.steamwar.velocitycore.discord.DiscordBot; import de.steamwar.velocitycore.discord.channels.DiscordChannel; import de.steamwar.velocitycore.discord.channels.InteractionReply; import lombok.Getter; -import net.dv8tion.jda.api.entities.ChannelType; -import net.dv8tion.jda.api.entities.MessageChannel; -import net.dv8tion.jda.api.events.interaction.GenericComponentInteractionCreateEvent; -import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; -import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.events.interaction.component.GenericComponentInteractionCreateEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.interactions.InteractionType; import net.dv8tion.jda.api.interactions.commands.OptionMapping; @@ -44,7 +44,7 @@ public class ChannelListener extends ListenerAdapter { private static final Map channels = new HashMap<>(); @Override - public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { + public void onMessageReceived(@NotNull MessageReceivedEvent event) { if(event.getAuthor().isBot()) return; @@ -69,7 +69,7 @@ public class ChannelListener extends ListenerAdapter { } @Override - public void onSlashCommand(@NotNull SlashCommandEvent event) { + public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) { InteractionReply.reply(event, sender -> { if(sender.user().getDiscordId() == null) return; diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordSchemUpload.java b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordSchemUpload.java index e8969a7c..037eadcd 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordSchemUpload.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordSchemUpload.java @@ -26,7 +26,7 @@ import de.steamwar.sql.Punishment; import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SteamwarUser; import net.dv8tion.jda.api.entities.Message; -import net.dv8tion.jda.api.events.message.priv.PrivateMessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import java.io.IOException; @@ -41,7 +41,9 @@ public class DiscordSchemUpload extends ListenerAdapter { private static final List SCHEM_FILE_ENDINGS = Arrays.asList(".schem", ".schematic"); @Override - public void onPrivateMessageReceived(PrivateMessageReceivedEvent event) { + public void onMessageReceived(MessageReceivedEvent event) { + if (event.isFromGuild()) return; + Message message = event.getMessage(); if(message.getAttachments().isEmpty()) return; @@ -76,7 +78,7 @@ public class DiscordSchemUpload extends ListenerAdapter { if(node == null) node = SchematicNode.createSchematic(user.getId(), name, null); - try (InputStream in = attachment.retrieveInputStream().get()) { + try (InputStream in = attachment.getProxy().download().get()) { NodeData.get(node).saveFromStream(in, fileName.substring(dot).equalsIgnoreCase(".schem")); sender.system("DC_SCHEMUPLOAD_SUCCESS", name); } catch (InterruptedException e) { diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTeamEvent.java b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTeamEvent.java index d18de226..8fd644a3 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTeamEvent.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTeamEvent.java @@ -23,7 +23,7 @@ import de.steamwar.velocitycore.VelocityCore; import de.steamwar.velocitycore.discord.DiscordBot; import de.steamwar.velocitycore.discord.channels.InteractionReply; import de.steamwar.sql.Event; -import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent; +import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.jetbrains.annotations.NotNull; @@ -32,7 +32,7 @@ public class DiscordTeamEvent extends ListenerAdapter { private final String eventsChannel = DiscordBot.getInstance().getConfig().channel("events"); @Override - public void onSelectionMenu(@NotNull SelectionMenuEvent event) { + public void onStringSelectInteraction(@NotNull StringSelectInteractionEvent event) { if(!event.getChannel().getId().equals(eventsChannel)) return; diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTicketHandler.java b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTicketHandler.java index 692d475a..e5cabd91 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTicketHandler.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/listeners/DiscordTicketHandler.java @@ -29,17 +29,18 @@ import de.steamwar.velocitycore.discord.DiscordTicketType; import de.steamwar.velocitycore.discord.channels.DiscordChannel; import de.steamwar.velocitycore.discord.channels.InteractionReply; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.MessageBuilder; import net.dv8tion.jda.api.Permission; -import net.dv8tion.jda.api.entities.Emoji; -import net.dv8tion.jda.api.entities.MessageChannel; -import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.User; -import net.dv8tion.jda.api.events.interaction.GenericComponentInteractionCreateEvent; -import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; +import net.dv8tion.jda.api.entities.emoji.Emoji; +import net.dv8tion.jda.api.events.interaction.component.GenericComponentInteractionCreateEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.interactions.components.ActionRow; -import net.dv8tion.jda.api.interactions.components.Button; +import net.dv8tion.jda.api.interactions.components.buttons.Button; +import net.dv8tion.jda.api.utils.SplitUtil; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; import net.kyori.adventure.text.event.ClickEvent; import org.jetbrains.annotations.NotNull; @@ -59,24 +60,23 @@ public class DiscordTicketHandler extends ListenerAdapter { SteamwarUser user = SteamwarUser.get(event.getUser().getIdLong()); TextChannel ticketChannel = event.getGuild().getCategoryById(TICKET_CATEGORY).createTextChannel((user == null ? event.getUser().getName() : user.getUserName()) + "-" + event.getComponentId() + "-" + System.currentTimeMillis() % 1000).complete(); - ticketChannel.createPermissionOverride(event.getMember()).setAllow( + ticketChannel.getPermissionContainer().upsertPermissionOverride(event.getMember()).setAllowed( Permission.VIEW_CHANNEL, - Permission.MESSAGE_WRITE, + Permission.MESSAGE_SEND, Permission.MESSAGE_ATTACH_FILES, Permission.MESSAGE_ADD_REACTION, - Permission.MESSAGE_READ, Permission.MESSAGE_EMBED_LINKS, Permission.MESSAGE_HISTORY).complete(); ticketChannel.getManager().setTopic(event.getUser().getId()).complete(); DiscordChannel channel = new DiscordChannel(DiscordChannel.userOrPublic(event.getUser()), ticketChannel); - channel.send(new MessageBuilder() + channel.send(new MessageCreateBuilder() .setEmbeds(new EmbedBuilder() .setTitle(channel.parseToPlain("DC_TICKET_TITLE")) .setDescription(channel.parseToPlain(ticketType.introduction())) .setColor(Color.GREEN) .build()) - .setActionRows(ActionRow.of(Button.danger("close-" + ticketChannel.getName(), channel.parseToPlain("DC_TICKET_CLOSE")).withEmoji(Emoji.fromUnicode("U+26A0"))))); + .setComponents(ActionRow.of(Button.danger("close-" + ticketChannel.getName(), channel.parseToPlain("DC_TICKET_CLOSE")).withEmoji(Emoji.fromUnicode("U+26A0"))))); InteractionReply.reply(event, reply -> reply.system("DC_TICKET_CREATED", ticketChannel.getAsMention())); Chatter.serverteam().prefixless("DISCORD_TICKET_NEW", ticketChannel.getName()); @@ -85,7 +85,7 @@ public class DiscordTicketHandler extends ListenerAdapter { @Override public void onGenericComponentInteractionCreate(@NotNull GenericComponentInteractionCreateEvent event) { MessageChannel messageChannel = event.getChannel(); - if(messageChannel instanceof TextChannel channel && channel.getParent() != null && channel.getParent().getId().equals(TICKET_CATEGORY) && event.getComponentId().startsWith("close-")) { + if(messageChannel instanceof TextChannel channel && channel.getParentCategoryIdLong() != 0 && channel.getParentCategoryId().equals(TICKET_CATEGORY) && event.getComponentId().startsWith("close-")) { LinkedList messages = channel.getIterableHistory().complete().stream() .filter(message -> !message.getAuthor().isSystem() && !message.getAuthor().isBot()) .map(message -> { @@ -106,24 +106,10 @@ public class DiscordTicketHandler extends ListenerAdapter { messages.addFirst(new StringBuilder().append(" **").append(event.getUser().getName()).append("**: Ticket closed")); - LinkedList messageBuilders = new LinkedList<>(); - messageBuilders.add(new StringBuilder()); - messages.descendingIterator() - .forEachRemaining(stringBuilder -> { - if(stringBuilder.length() >= 4096) { - messageBuilders.getLast().append(stringBuilder.substring(0, 4090)); - messageBuilders.add(new StringBuilder(stringBuilder.substring(4090, stringBuilder.length() - 1))); - } else if (stringBuilder.length() + messageBuilders.getLast().length() >= 4096) { - messageBuilders.add(new StringBuilder(stringBuilder.toString())); - } else { - messageBuilders.getLast().append(stringBuilder); - } - }); - EmbedBuilder embedBuilder = new EmbedBuilder() .setColor(Color.GREEN) .setTimestamp(Instant.now()) - .setTitle(event.getTextChannel().getName()); + .setTitle(event.getChannel().getName()); if(channel.getTopic() != null && !channel.getTopic().isEmpty()) { User user = event.getJDA().retrieveUserById(channel.getTopic()).complete(); @@ -131,7 +117,12 @@ public class DiscordTicketHandler extends ListenerAdapter { } TextChannel logChannel = event.getGuild().getTextChannelById(TICKET_LOG); - messageBuilders.forEach(stringBuilder -> logChannel.sendMessage(new MessageBuilder().setEmbeds(embedBuilder.setDescription(stringBuilder.toString()).build()).build()).queue()); + SplitUtil.split( + messages.stream().map(StringBuilder::toString).collect(Collectors.joining("\n")), + 2000, + SplitUtil.Strategy.NEWLINE, + SplitUtil.Strategy.ANYWHERE + ).stream().map(message -> new MessageCreateBuilder().setEmbeds(embedBuilder.setDescription(message).build())).forEach(builder -> logChannel.sendMessage(builder.build()).queue()); Chatter.serverteam().prefixless("DISCORD_TICKET_CLOSED", channel.getName()); channel.delete().reason("Closed").queue(); @@ -139,11 +130,14 @@ public class DiscordTicketHandler extends ListenerAdapter { } @Override - public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { - TextChannel channel = event.getChannel(); + public void onMessageReceived(@NotNull MessageReceivedEvent event) { + if (!event.isFromGuild()) return; + + MessageChannel channel = event.getChannel(); if( - channel.getParent() != null && - channel.getParent().getId().equals(TICKET_CATEGORY) && + channel instanceof TextChannel textChannel && + textChannel.getParentCategoryIdLong() != 0 && + textChannel.getParentCategoryId().equals(TICKET_CATEGORY) && !channel.getId().equals(TICKET_CHANNEL) && !channel.getId().equals(TICKET_LOG) ) { @@ -152,7 +146,7 @@ public class DiscordTicketHandler extends ListenerAdapter { ChatterGroup receivers = new ChatterGroup(Chatter.allStream().filter(player -> player.user().hasPerm(UserPerm.TICKET_LOG))); try { - SteamwarUser user = SteamwarUser.get(Long.parseLong(channel.getTopic())); + SteamwarUser user = SteamwarUser.get(Long.parseLong(textChannel.getTopic())); if(user != null && !user.perms().contains(UserPerm.TEAM)) receivers = new ChatterGroup(receivers, Chatter.of(user)); } catch(NumberFormatException e) { diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/util/AuthManager.java b/VelocityCore/src/de/steamwar/velocitycore/discord/util/AuthManager.java index 972f77f1..3da3971e 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/util/AuthManager.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/util/AuthManager.java @@ -23,11 +23,11 @@ import de.steamwar.velocitycore.VelocityCore; import de.steamwar.velocitycore.discord.channels.DiscordChannel; import de.steamwar.sql.SteamwarUser; import lombok.experimental.UtilityClass; -import net.dv8tion.jda.api.MessageBuilder; -import net.dv8tion.jda.api.entities.Emoji; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.interactions.components.ActionRow; -import net.dv8tion.jda.api.interactions.components.Button; +import net.dv8tion.jda.api.interactions.components.buttons.Button; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; import java.util.Base64; import java.util.HashMap; @@ -63,9 +63,9 @@ public class AuthManager { user.setDiscordId(dcUser.getIdLong()); DiscordChannel channel = new DiscordChannel(dcUser); - channel.send(new MessageBuilder() + channel.send(new MessageCreateBuilder() .setContent(channel.parseToPlain("DC_AUTH_SUCCESS", user)) - .setActionRows(ActionRow.of(Button.success("tada", Emoji.fromUnicode("U+1F389"))))); + .setComponents(ActionRow.of(Button.success("tada", Emoji.fromUnicode("U+1F389"))))); return dcUser; } diff --git a/VelocityCore/src/de/steamwar/velocitycore/discord/util/DiscordAlert.java b/VelocityCore/src/de/steamwar/velocitycore/discord/util/DiscordAlert.java index 0b115d41..6ba23149 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/discord/util/DiscordAlert.java +++ b/VelocityCore/src/de/steamwar/velocitycore/discord/util/DiscordAlert.java @@ -25,11 +25,11 @@ import de.steamwar.velocitycore.discord.DiscordBot; import de.steamwar.velocitycore.discord.channels.DiscordChannel; import lombok.experimental.UtilityClass; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.MessageBuilder; -import net.dv8tion.jda.api.entities.Emoji; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.interactions.components.ActionRow; -import net.dv8tion.jda.api.interactions.components.Button; +import net.dv8tion.jda.api.interactions.components.buttons.Button; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; import java.awt.*; import java.time.Instant; @@ -47,7 +47,7 @@ public class DiscordAlert { if(user == null) return; - MessageBuilder builder = new MessageBuilder() + MessageCreateBuilder builder = new MessageCreateBuilder() .setEmbeds(new EmbedBuilder() .setAuthor("SteamWar", "https://steamwar.de", "https://cdn.discordapp.com/app-icons/869606970099904562/60c884000407c02671d91d8e7182b8a1.png") .setColor(color) @@ -56,7 +56,7 @@ public class DiscordAlert { .setTimestamp(Instant.now()) .build()); if(success) - builder.setActionRows(ActionRow.of(Button.success("tada", Emoji.fromUnicode("U+1F389")))); + builder.setComponents(ActionRow.of(Button.success("tada", Emoji.fromUnicode("U+1F389")))); new DiscordChannel(user).send(builder); }); diff --git a/settings.gradle.kts b/settings.gradle.kts index 2fed98a6..072ee29a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -106,7 +106,7 @@ dependencyResolutionManagement { library("netty", "io.netty:netty-all:4.1.68.Final") library("junit", "junit:junit:4.13.2") library("hamcrest", "org.hamcrest:hamcrest:2.2") - library("jda", "net.dv8tion:JDA:4.4.0_352") + library("jda", "net.dv8tion:JDA:5.0.2") library("msgpack", "org.msgpack:msgpack-core:0.9.8") library("classindex", "org.atteo.classindex:classindex:3.13")