Es baut... (Untested)

This commit is contained in:
2024-08-12 17:15:38 +02:00
parent f7ea08e6d0
commit 8b776ff33e
15 changed files with 116 additions and 115 deletions
@@ -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();
}
@@ -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;
@@ -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 {
@@ -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();
}
@@ -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();
@@ -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)
@@ -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<InteractionReply> consumer) {
public static void reply(IReplyCallback interaction, Consumer<InteractionReply> 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<String> messages = new ArrayList<>();
private InteractionReply(Interaction interaction) {
private InteractionReply(IReplyCallback interaction) {
super(interaction.getUser());
this.interaction = interaction;
}
@@ -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<MessageBuilder> supplier;
private final Supplier<MessageCreateBuilder> supplier;
private final Consumer<GenericComponentInteractionCreateEvent> interaction;
public StaticMessageChannel(String channel, Supplier<MessageBuilder> supplier) {
public StaticMessageChannel(String channel, Supplier<MessageCreateBuilder> supplier) {
this(channel, supplier, event -> {});
}
public StaticMessageChannel(String channel, Supplier<MessageBuilder> supplier, Consumer<GenericComponentInteractionCreateEvent> interaction) {
public StaticMessageChannel(String channel, Supplier<MessageCreateBuilder> supplier, Consumer<GenericComponentInteractionCreateEvent> 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();
}
}
@@ -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<MessageChannel, DiscordChannel> 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;
@@ -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<String> 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) {
@@ -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;
@@ -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<StringBuilder> 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("<t:").append(Instant.now().getEpochSecond()).append("> **").append(event.getUser().getName()).append("**: Ticket closed"));
LinkedList<StringBuilder> 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) {
@@ -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;
}
@@ -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);
});