diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8f0f12e..56f6656 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -7,21 +7,17 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Check out repository' - uses: actions/checkout@v2 - - - name: 'Download latest JDK 17' - run: wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz + uses: actions/checkout@v3 - name: 'Set up JDK' - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: '17' - distribution: 'jdkfile' - jdkFile: jdk-17_linux-x64_bin.tar.gz + distribution: 'temurin' cache: 'gradle' - name: 'Grant execute permission for gradlew' run: chmod +x gradlew - name: 'Build with Gradle' - run: ./gradlew build + run: ./gradlew build --no-daemon diff --git a/.gitignore b/.gitignore index 1171e99..a907d73 100644 --- a/.gitignore +++ b/.gitignore @@ -104,4 +104,6 @@ replay_pid* build/* .gradle/* -.idea/* \ No newline at end of file +.idea/* + +*.db \ No newline at end of file diff --git a/build.gradle b/build.gradle index 482cde1..2092f08 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java' id 'application' id 'org.springframework.boot' version '2.7.0' - id 'com.github.johnrengelman.shadow' version '7.1.2' + id 'com.github.johnrengelman.shadow' version '8.1.1' } group 'com.softwaii.capivara' @@ -33,12 +33,12 @@ dependencies { implementation 'com.h2database:h2:2.1.212' implementation 'org.postgresql:postgresql:42.3.6' - implementation("net.dv8tion:JDA:5.0.0-alpha.15") { + implementation("net.dv8tion:JDA:5.0.0-beta.16") { exclude module: 'opus-java' } - implementation("com.github.Softawii:curupira:v0.2.10") - implementation("com.github.Softawii:curupira:v0.2.10:all") + implementation("com.github.Softawii:curupira:1b05d58371") + implementation("com.github.Softawii:curupira:1b05d58371:all") implementation("com.github.minndevelopment:emoji-java:master-SNAPSHOT") } @@ -47,7 +47,7 @@ tasks.register('deploy') { enabled = false } shadowJar { - archiveName("CapivaraBot.jar") + archiveFileName = "CapivaraBot.jar" } dependsOn 'shadowJar' } @@ -57,7 +57,7 @@ tasks.register('homolog') { enabled = false } shadowJar { - archiveName("CapivaraBotHomolog.jar") + archiveFileName = "CapivaraBotHomolog.jar" } dependsOn 'shadowJar' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927..7f93135 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41dfb87..e411586 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..1aa94a4 100644 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/java/com/softawii/capivara/Main.java b/src/main/java/com/softawii/capivara/Main.java index 058ba14..bd0cec4 100644 --- a/src/main/java/com/softawii/capivara/Main.java +++ b/src/main/java/com/softawii/capivara/Main.java @@ -22,7 +22,7 @@ public class Main { public static void main(String[] args) { context = SpringApplication.run(Main.class, args); - JDA jda = context.getBean(JDA.class); + JDA jda = context.getBean(JDA.class); BuildProperties buildProperties = context.getBean(BuildProperties.class); jda.getPresence().setPresence(Activity.of(Activity.ActivityType.PLAYING, buildProperties.getVersion()), true); LOGGER.info(buildProperties.getVersion() + " Bot is ready as " + jda.getSelfUser().getName()); diff --git a/src/main/java/com/softawii/capivara/config/SpringConfig.java b/src/main/java/com/softawii/capivara/config/SpringConfig.java index 71092fc..21b60f1 100644 --- a/src/main/java/com/softawii/capivara/config/SpringConfig.java +++ b/src/main/java/com/softawii/capivara/config/SpringConfig.java @@ -25,7 +25,6 @@ import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; -import javax.security.auth.login.LoginException; import javax.sql.DataSource; import java.nio.file.Path; import java.util.Properties; @@ -74,7 +73,7 @@ public JDA jda(VoiceEvents voiceEvents) { ); jda = builder.build(); jda.awaitReady(); - } catch (LoginException | InterruptedException e) { + } catch (InterruptedException e) { throw new RuntimeException(e); } @@ -91,11 +90,11 @@ public Curupira curupira(JDA jda) { CapivaraExceptionHandler exceptionHandler = null; String logChannelId = env.getProperty("log.channel.id"); - String logDirectory = env.getProperty("log_directory"); + String logDirectory = env.getProperty("log_directory"); if (logChannelId != null) { - Path logPath = null; + Path logPath = null; if (logDirectory != null) { - logPath = Path.of(logDirectory); + logPath = Path.of(logDirectory); } exceptionHandler = new CapivaraExceptionHandler(logChannelId, logPath); } diff --git a/src/main/java/com/softawii/capivara/core/DroneManager.java b/src/main/java/com/softawii/capivara/core/DroneManager.java index ac0e7d8..2e773b4 100644 --- a/src/main/java/com/softawii/capivara/core/DroneManager.java +++ b/src/main/java/com/softawii/capivara/core/DroneManager.java @@ -14,13 +14,18 @@ import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.channel.concrete.Category; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion; import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; import net.dv8tion.jda.api.interactions.components.ActionRow; -import net.dv8tion.jda.api.interactions.components.Modal; import net.dv8tion.jda.api.interactions.components.buttons.Button; import net.dv8tion.jda.api.interactions.components.text.TextInput; import net.dv8tion.jda.api.interactions.components.text.TextInputStyle; +import net.dv8tion.jda.api.interactions.modals.Modal; import net.dv8tion.jda.api.requests.RestAction; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -30,7 +35,6 @@ import java.awt.*; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -219,9 +223,9 @@ public void checkToDeleteTemporary(VoiceChannel channel, Member member, boolean Message claimMessage; if (textChannel != null) { - claimMessage = textChannel.sendMessageEmbeds(embed).setActionRows(ActionRow.of(claim)).complete(); + claimMessage = textChannel.sendMessageEmbeds(embed).setActionRow(claim).complete(); } else { - claimMessage = channel.sendMessageEmbeds(embed).setActionRows(ActionRow.of(claim)).complete(); + claimMessage = channel.sendMessageEmbeds(embed).setActionRow(claim).complete(); } drone.setClaimMessage(claimMessage.getIdLong()); @@ -266,7 +270,7 @@ public void checkToCreateTemporary(VoiceChannel channel, Member member) { RestAction actions = guild.moveVoiceMember(member, voice) .and(voice.upsertPermissionOverride(member).grant(Permission.VOICE_CONNECT, Permission.VIEW_CHANNEL)); - if(text != null) { + if (text != null) { actions.and(text.upsertPermissionOverride(publicRole).deny(Permission.VIEW_CHANNEL)) .and(text.upsertPermissionOverride(member).grant(Permission.VIEW_CHANNEL)) .submit(); @@ -330,46 +334,49 @@ private void createControlPanel(VoiceChannel voiceChannel, GuildMessageChannel t // region Buttons // General Config - net.dv8tion.jda.api.interactions.components.buttons.Button config = net.dv8tion.jda.api.interactions.components.buttons.Button.primary(VoiceGroup.Dynamic.droneConfig, "🔧 Settings"); - net.dv8tion.jda.api.interactions.components.buttons.Button visibility = net.dv8tion.jda.api.interactions.components.buttons.Button.secondary(VoiceGroup.Dynamic.droneHideShow, isVisible(voiceChannel) ? "👻 Hide" : "👀 Visible"); - net.dv8tion.jda.api.interactions.components.buttons.Button connect = net.dv8tion.jda.api.interactions.components.buttons.Button.secondary(VoiceGroup.Dynamic.dronePublicPrivate, canConnect(voiceChannel) ? "📢 Public" : "🔒 Private"); - net.dv8tion.jda.api.interactions.components.buttons.Button permanent = Button.danger(VoiceGroup.Dynamic.dronePermTemp, drone.isPermanent() ? "⏳ Temporary" : "✨ Permanent"); - - ActionRow general = ActionRow.of(config, visibility, connect, permanent); + Button config = Button.primary(VoiceGroup.Dynamic.droneConfig, "🔧 Settings"); + Button visibility = Button.secondary(VoiceGroup.Dynamic.droneHideShow, isVisible(voiceChannel) ? "👻 Hide" : "👀 Visible"); + Button connect = Button.secondary(VoiceGroup.Dynamic.dronePublicPrivate, canConnect(voiceChannel) ? "📢 Public" : "🔒 Private"); + Button permanent = Button.danger(VoiceGroup.Dynamic.dronePermTemp, drone.isPermanent() ? "⏳ Temporary" : "✨ Permanent"); + ActionRow general = ActionRow.of(config, visibility, connect, permanent); // endregion // Send the message - sendControlPanel(textChannel, drone, builder, java.util.List.of(general)); + sendControlPanel(textChannel, drone, builder, general); } - private void sendControlPanel(GuildMessageChannel channel, VoiceDrone drone, EmbedBuilder builder, java.util.List actionRows) { + private void sendControlPanel(GuildMessageChannel channel, VoiceDrone drone, EmbedBuilder builder, ActionRow actionRow) { // We already have a message, so we need to update it if (drone.getControlPanel() != null) { Member owner = channel.getGuild().getMemberById(drone.getOwnerId()); channel.editMessageById(drone.getControlPanel(), "Hello!") .setEmbeds(builder.build()) - .setActionRows(actionRows) + .setComponents(actionRow) .queue(q -> { /* It's ok! */}, e -> { - LOGGER.error("Error updating control panel: {}", e.getMessage()); - // If error, we need to create a new one - sendNewControlPanel(channel, drone, builder, actionRows); - }); + LOGGER.error("Error updating control panel: {}", e.getMessage()); + // If error, we need to create a new one + sendNewControlPanel(channel, drone, builder, actionRow); + }); } else { - sendNewControlPanel(channel, drone, builder, actionRows); + sendNewControlPanel(channel, drone, builder, actionRow); } } - private void sendNewControlPanel(GuildMessageChannel channel, VoiceDrone drone, EmbedBuilder builder, List actionRows) { + private void sendNewControlPanel(GuildMessageChannel channel, VoiceDrone drone, EmbedBuilder builder, ActionRow actionRow) { Member owner = channel.getGuild().getMemberById(drone.getOwnerId()); - channel.sendMessage("Hello!").setEmbeds(builder.build()).setActionRows(actionRows).queue(q -> { - drone.setControlPanel(q.getIdLong()); - try { - voiceDroneService.update(drone); - } catch (KeyNotFoundException ex) { - // WTF???? - throw new RuntimeException(ex); - } - }, ee -> LOGGER.error("Error creating control panel: {}", ee.getMessage())); + channel.sendMessage("Hello!") + .setEmbeds(builder.build()) + .setComponents(actionRow) + .setSuppressedNotifications(true) + .queue(q -> { + drone.setControlPanel(q.getIdLong()); + try { + voiceDroneService.update(drone); + } catch (KeyNotFoundException ex) { + // WTF???? + throw new RuntimeException(ex); + } + }, ee -> LOGGER.error("Error creating control panel: {}", ee.getMessage())); } public void makePermanent(VoiceChannel channel, boolean permanent) throws KeyNotFoundException { @@ -385,7 +392,7 @@ private String getDroneName(Member member, VoiceHive hive) { Matcher menteMatcher = this.digdinRegex.matcher(username); - if(menteMatcher.find()) { + if (menteMatcher.find()) { digdin = menteMatcher.group("nome"); } diff --git a/src/main/java/com/softawii/capivara/core/EmbedManager.java b/src/main/java/com/softawii/capivara/core/EmbedManager.java index 9ce0abe..afcf9f3 100644 --- a/src/main/java/com/softawii/capivara/core/EmbedManager.java +++ b/src/main/java/com/softawii/capivara/core/EmbedManager.java @@ -4,8 +4,8 @@ import com.softawii.capivara.exceptions.KeyNotFoundException; import com.softawii.capivara.exceptions.UrlException; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.GuildChannel; import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; import net.dv8tion.jda.api.interactions.components.ActionRow; import org.springframework.stereotype.Component; @@ -15,6 +15,32 @@ @Component public class EmbedManager { + private Map embeds; + + public EmbedManager() { + this.embeds = new HashMap<>(); + } + + public Map.Entry init() { + EmbedHandler handler = new EmbedHandler(); + String uuid = UUID.randomUUID().toString(); + + // It's in the map? Reset that shit bro + while (this.embeds.containsKey(uuid)) uuid = UUID.randomUUID().toString(); + + this.embeds.put(uuid, handler); + return Map.entry(uuid, handler); + } + + public EmbedHandler get(String key) throws KeyNotFoundException { + if (!this.embeds.containsKey(key)) throw new KeyNotFoundException(); + return this.embeds.get(key); + } + + public void destroy(String key) { + if (this.embeds.containsKey(key)) this.embeds.remove(key); + } + public static class EmbedHandler { private EmbedBuilder builder; private String message; @@ -27,10 +53,6 @@ public EmbedHandler() { this.fields = new ArrayList<>(); } - public void setMessage(String message) { - this.message = message; - } - public void setTitle(String title) throws FieldLengthException { try { builder.setTitle(title); @@ -93,6 +115,10 @@ public String getMessage() { return this.message; } + public void setMessage(String message) { + this.message = message; + } + public MessageEmbed build() { EmbedBuilder builder = new EmbedBuilder(this.builder); @@ -103,30 +129,4 @@ public MessageEmbed build() { return builder.build(); } } - - private Map embeds; - - public EmbedManager() { - this.embeds = new HashMap<>(); - } - - public Map.Entry init() { - EmbedHandler handler = new EmbedHandler(); - String uuid = UUID.randomUUID().toString(); - - // It's in the map? Reset that shit bro - while (this.embeds.containsKey(uuid)) uuid = UUID.randomUUID().toString(); - - this.embeds.put(uuid, handler); - return Map.entry(uuid, handler); - } - - public EmbedHandler get(String key) throws KeyNotFoundException { - if (!this.embeds.containsKey(key)) throw new KeyNotFoundException(); - return this.embeds.get(key); - } - - public void destroy(String key) { - if (this.embeds.containsKey(key)) this.embeds.remove(key); - } } diff --git a/src/main/java/com/softawii/capivara/core/VoiceManager.java b/src/main/java/com/softawii/capivara/core/VoiceManager.java index 2508ed3..e439eb0 100644 --- a/src/main/java/com/softawii/capivara/core/VoiceManager.java +++ b/src/main/java/com/softawii/capivara/core/VoiceManager.java @@ -5,12 +5,12 @@ import com.softawii.capivara.exceptions.KeyNotFoundException; import com.softawii.capivara.services.VoiceHiveService; import com.softawii.capivara.utils.Utils; -import net.dv8tion.jda.api.entities.Category; -import net.dv8tion.jda.api.entities.VoiceChannel; +import net.dv8tion.jda.api.entities.channel.concrete.Category; +import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel; import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; -import net.dv8tion.jda.api.interactions.components.Modal; import net.dv8tion.jda.api.interactions.components.text.TextInput; import net.dv8tion.jda.api.interactions.components.text.TextInputStyle; +import net.dv8tion.jda.api.interactions.modals.Modal; import net.dv8tion.jda.api.interactions.modals.ModalMapping; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -22,18 +22,15 @@ @Component public class VoiceManager { - private final VoiceHiveService voiceHiveService; - private final Logger LOGGER = LogManager.getLogger(VoiceManager.class); - public static final String configModal_idle = "%OWNER% Channel"; public static final String configModal_playing = "\uD83C\uDFAE %PLAYING%"; public static final String configModal_streaming = "\uD83D\uDCFA %CHANNEL%"; - public static final String configModal_fieldIdle = "set-idle"; public static final String configModal_fieldPlaying = "set-playing"; public static final String configModal_fieldStreaming = "set-streaming"; - public static final String configModal_createText = "set-text"; + private final VoiceHiveService voiceHiveService; + private final Logger LOGGER = LogManager.getLogger(VoiceManager.class); public VoiceManager(VoiceHiveService voiceHiveService) { this.voiceHiveService = voiceHiveService; @@ -122,7 +119,7 @@ else if (mapping.getId().equals(configModal_fieldPlaying)) voiceHive.setPlaying(mapping.getAsString()); else if (mapping.getId().equals(configModal_fieldStreaming)) voiceHive.setStreaming(mapping.getAsString()); - else if(mapping.getId().equals(configModal_createText)) + else if (mapping.getId().equals(configModal_createText)) voiceHive.setCreateTextChannel(mapping.getAsString().equalsIgnoreCase("true")); } voiceHiveService.update(voiceHive); diff --git a/src/main/java/com/softawii/capivara/entity/VoiceDrone.java b/src/main/java/com/softawii/capivara/entity/VoiceDrone.java index 680388b..1c752c8 100644 --- a/src/main/java/com/softawii/capivara/entity/VoiceDrone.java +++ b/src/main/java/com/softawii/capivara/entity/VoiceDrone.java @@ -89,14 +89,14 @@ public Boolean getPermanent() { return permanent; } - public Boolean isPermanent() { - return permanent; - } - public void setPermanent(Boolean permanent) { this.permanent = permanent; } + public Boolean isPermanent() { + return permanent; + } + public Long getChatId() { return chatId; } diff --git a/src/main/java/com/softawii/capivara/listeners/EchoGroup.java b/src/main/java/com/softawii/capivara/listeners/EchoGroup.java index 1694787..1702ec8 100644 --- a/src/main/java/com/softawii/capivara/listeners/EchoGroup.java +++ b/src/main/java/com/softawii/capivara/listeners/EchoGroup.java @@ -10,20 +10,24 @@ import com.softawii.curupira.annotations.*; import com.softawii.curupira.core.Curupira; import net.dv8tion.jda.api.Permission; -import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.channel.concrete.NewsChannel; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; -import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent; +import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent; import net.dv8tion.jda.api.interactions.commands.OptionMapping; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.components.ActionRow; -import net.dv8tion.jda.api.interactions.components.Modal; import net.dv8tion.jda.api.interactions.components.buttons.Button; -import net.dv8tion.jda.api.interactions.components.selections.SelectMenu; import net.dv8tion.jda.api.interactions.components.selections.SelectOption; +import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu; import net.dv8tion.jda.api.interactions.components.text.TextInputStyle; -import net.dv8tion.jda.api.requests.restaction.MessageAction; +import net.dv8tion.jda.api.interactions.modals.Modal; +import net.dv8tion.jda.api.requests.restaction.MessageCreateAction; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -35,38 +39,33 @@ @IGroup(name = "echo", description = "Echo Group") public class EchoGroup { + public static final String buttonEditMessage = "echo-edit-message"; + public static final String modalEditMessage = "echo-edit-message-modal"; + //endregion + public static final String buttonRemoveMessage = "echo-remove-message"; //region Send/Cancel Constants private static final String buttonSend = "echo-send"; private static final String buttonDeny = "echo-deny"; - //endregion - //region Title/Description Constants private static final String buttonTitle = "echo-title"; + + //endregion private static final String modalTitle = "echo-title-modal"; private static final String buttonImage = "echo-image"; private static final String modalImage = "echo-image-modal"; - - //endregion - //region Fields Constants private static final String buttonNewField = "echo-new-field"; private static final String modalNewField = "echo-new-field-modal"; private static final String buttonRemoveField = "echo-remove-field"; private static final String menuRemoveField = "echo-remove-field-menu"; - private static final String buttonEditField = "echo-edit-field"; - private static final String menuEditField = "echo-edit-field-menu"; - private static final String modalEditField = "echo-edit-field-modal"; //endregion Constants //region Message Constants - - public static final String buttonEditMessage = "echo-edit-message"; - public static final String modalEditMessage = "echo-edit-message-modal"; - - public static final String buttonRemoveMessage = "echo-remove-message"; + private static final String buttonEditField = "echo-edit-field"; + private static final String menuEditField = "echo-edit-field-menu"; + private static final String modalEditField = "echo-edit-field-modal"; //endregion - private static final Logger LOGGER = LogManager.getLogger(EchoGroup.class); public static EmbedManager embedManager; @@ -98,12 +97,12 @@ public static void echo(SlashCommandInteractionEvent event) { if (message != null) { event.reply(message) .addEmbeds(init.getValue().build()) - .addActionRows(EchoGroup.embedEditor(init.getKey())) + .setComponents(EchoGroup.embedEditor(init.getKey())) .setEphemeral(true) .queue(); } else { event.replyEmbeds(init.getValue().build()) - .addActionRows(EchoGroup.embedEditor(init.getKey())) + .setComponents(EchoGroup.embedEditor(init.getKey())) .setEphemeral(true) .queue(); } @@ -128,7 +127,7 @@ public static void send(ButtonInteractionEvent event) { GuildChannel target = embedHandler.getTarget(); - MessageAction messageAction; + MessageCreateAction messageAction; if (target instanceof TextChannel textChannel) { if (embedHandler.getMessage() != null) messageAction = textChannel.sendMessage(embedHandler.getMessage()).setEmbeds(embedHandler.build()); @@ -144,12 +143,12 @@ public static void send(ButtonInteractionEvent event) { } if (embedHandler.getActiveRows() != null && !embedHandler.getActiveRows().isEmpty()) { - messageAction.setActionRows(embedHandler.getActiveRows()); + messageAction.setComponents(embedHandler.getActiveRows()); } messageAction.queue(); MessageEmbed embed = Utils.simpleEmbed("Embed enviado!", "Embed enviado com sucesso!", Color.GREEN); - event.editMessage("Tudo ok!").setEmbeds(embed).setActionRows().queue(); + event.editMessage("Tudo ok!").setEmbeds(embed).setComponents().queue(); } @IButton(id = buttonDeny) @@ -162,7 +161,7 @@ public static void deny(ButtonInteractionEvent event) { embedManager.destroy(id); MessageEmbed embed = Utils.simpleEmbed("Embed cancelado!", "Embed cancelado com sucesso!", Color.GREEN); - event.editMessage("Cancelei!!").setEmbeds(embed).setActionRows().queue(); + event.editMessage("Cancelei!!").setEmbeds(embed).setComponents().queue(); } //region Title / Description @@ -227,7 +226,7 @@ public static void modalTitle(ModalInteractionEvent event) { return; } - event.editMessageEmbeds(embedHandler.build()).setActionRows(EchoGroup.embedEditor(id)).queue(); + event.editMessageEmbeds(embedHandler.build()).setComponents(EchoGroup.embedEditor(id)).queue(); } //endregion @@ -284,7 +283,7 @@ public static void modalImagem(ModalInteractionEvent event) { event.replyEmbeds(embed).setEphemeral(true).queue(); return; } - event.editMessageEmbeds(embedHandler.build()).setActionRows(EchoGroup.embedEditor(id)).queue(); + event.editMessageEmbeds(embedHandler.build()).setComponents(EchoGroup.embedEditor(id)).queue(); } //endregion @@ -346,7 +345,7 @@ public static void modalNewField(ModalInteractionEvent event) { event.replyEmbeds(embed).setEphemeral(true).queue(); return; } - event.editMessageEmbeds(embedHandler.build()).setActionRows(EchoGroup.embedEditor(id)).queue(); + event.editMessageEmbeds(embedHandler.build()).setComponents(EchoGroup.embedEditor(id)).queue(); } //endregion @@ -357,7 +356,7 @@ public static void modalNewField(ModalInteractionEvent event) { public static void editField(ButtonInteractionEvent event) { String id = event.getComponentId().split(":")[1]; - SelectMenu.Builder builder; + StringSelectMenu.Builder builder; try { builder = EchoGroup.embedField(id, menuEditField); builder.setRequiredRange(1, 1); @@ -371,7 +370,7 @@ public static void editField(ButtonInteractionEvent event) { } @IMenu(id = menuEditField) - public static void editFieldMenu(SelectMenuInteractionEvent event) { + public static void editFieldMenu(StringSelectInteractionEvent event) { SelectOption selectOption = event.getSelectedOptions().get(0); String id = event.getComponentId().split(":")[1]; @@ -427,7 +426,7 @@ public static void modalEditField(ModalInteractionEvent event) { MessageEmbed.Field editedField = new MessageEmbed.Field(name, value, false); embedHandler.setField(editedField, index); - event.editMessageEmbeds(embedHandler.build()).setActionRows(EchoGroup.embedEditor(id)).queue(); + event.editMessageEmbeds(embedHandler.build()).setComponents(EchoGroup.embedEditor(id)).queue(); } //endregion @@ -438,7 +437,7 @@ public static void modalEditField(ModalInteractionEvent event) { public static void removeFieldButton(ButtonInteractionEvent event) { String id = event.getComponentId().split(":")[1]; - SelectMenu.Builder builder; + StringSelectMenu.Builder builder; try { builder = EchoGroup.embedField(id, menuRemoveField); builder.setRequiredRange(1, 1); @@ -452,7 +451,7 @@ public static void removeFieldButton(ButtonInteractionEvent event) { } @IMenu(id = menuRemoveField) - public static void removeFieldMenu(SelectMenuInteractionEvent event) { + public static void removeFieldMenu(StringSelectInteractionEvent event) { SelectOption selectOption = event.getSelectedOptions().get(0); String id = event.getComponentId().split(":")[1]; @@ -468,7 +467,7 @@ public static void removeFieldMenu(SelectMenuInteractionEvent event) { event.replyEmbeds(embed).setEphemeral(true).queue(); return; } - event.editMessageEmbeds(embedHandler.build()).setActionRows(EchoGroup.embedEditor(id)).queue(); + event.editMessageEmbeds(embedHandler.build()).setComponents(EchoGroup.embedEditor(id)).queue(); } else { event.editComponents(EchoGroup.embedEditor(id)).queue(); } @@ -561,8 +560,8 @@ public static List embedEditor(String id) { return actionRows; } - public static SelectMenu.Builder embedField(String id, String menuId) throws KeyNotFoundException { - SelectMenu.Builder builder = SelectMenu.create(menuId + ":" + id); + public static StringSelectMenu.Builder embedField(String id, String menuId) throws KeyNotFoundException { + StringSelectMenu.Builder builder = StringSelectMenu.create(menuId + ":" + id); EmbedManager.EmbedHandler embedHandler = embedManager.get(id); List options = embedHandler.getFieldNames().stream().map(name -> { diff --git a/src/main/java/com/softawii/capivara/listeners/VoiceGroup.java b/src/main/java/com/softawii/capivara/listeners/VoiceGroup.java index 5ae173c..23999c6 100644 --- a/src/main/java/com/softawii/capivara/listeners/VoiceGroup.java +++ b/src/main/java/com/softawii/capivara/listeners/VoiceGroup.java @@ -8,7 +8,13 @@ import com.softawii.curupira.annotations.*; import com.softawii.curupira.exceptions.MissingPermissionsException; import net.dv8tion.jda.api.Permission; -import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.channel.concrete.Category; +import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel; +import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel; import net.dv8tion.jda.api.entities.channel.unions.GuildChannelUnion; import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion; import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; @@ -16,8 +22,8 @@ import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.interactions.commands.OptionType; -import net.dv8tion.jda.api.interactions.components.Modal; import net.dv8tion.jda.api.interactions.components.buttons.Button; +import net.dv8tion.jda.api.interactions.modals.Modal; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; @@ -31,12 +37,110 @@ public class VoiceGroup { private static final Logger LOGGER = LogManager.getLogger(VoiceGroup.class); + @ICommand(name = "invite", description = "Invite user to your channel") + @IArgument(name = "user", + description = "User to invite", + required = true, type = OptionType.USER) + @SuppressWarnings({"unused"}) + public static void invite(SlashCommandInteractionEvent event) { + Member member = event.getMember(); + Member invited = event.getOption("user").getAsMember(); + + AudioChannel channel = Dynamic.validateRequest(event, member); + if (channel == null) return; + + VoiceChannel voice = (VoiceChannel) channel; + voice.createInvite().setUnique(true).deadline(System.currentTimeMillis() + Dynamic.inviteDeadline).queue(q -> { + voice.getManager().putPermissionOverride(invited, List.of(Permission.VIEW_CHANNEL, Permission.VOICE_CONNECT), Collections.emptyList()).queue(); + String name = member.getEffectiveName() + (member.getNickname() != null ? " (" + member.getNickname() + ")" : ""); + invited.getUser().openPrivateChannel().queue(chn -> chn.sendMessage(name + "invited you to join in a channel!\n" + q.getUrl()).queue()); + event.reply("Invite sent to " + invited.getAsMention()).setEphemeral(true).queue(); + }); + } + + // User Commands + + @ICommand(name = "kick", description = "Kick user from your channel, it will remove permissions too") + @IArgument(name = "user", + description = "User to kick", + required = true, type = OptionType.USER) + @SuppressWarnings({"unused"}) + public static void kick(SlashCommandInteractionEvent event) { + Member member = event.getMember(); + Member to_kick = event.getOption("user").getAsMember(); + + AudioChannel channel = Dynamic.validateRequest(event, member); + if (channel == null) return; + + VoiceChannel voice = (VoiceChannel) channel; + voice.getManager().removePermissionOverride(to_kick).submit(); + + if (to_kick.getVoiceState().getChannel() != null) { + AudioChannel to_kick_channel = to_kick.getVoiceState().getChannel(); + if (to_kick_channel.getIdLong() == channel.getIdLong()) { + event.getGuild().moveVoiceMember(to_kick, null).and( + event.reply("Kicked " + to_kick.getAsMention()).setEphemeral(true) + ).queue(); + } else { + event.reply("User is not in your channel!").setEphemeral(true).queue(); + return; + } + } else { + event.reply("User is not in a voice channel!").setEphemeral(true).queue(); + return; + } + } + + @ICommand(name = "ban", description = "Ban user from your channel") + @IArgument(name = "user", + description = "User to kick", + required = true, type = OptionType.USER) + public static void ban(SlashCommandInteractionEvent event) { + Member member = event.getMember(); + Member to_ban = event.getOption("user").getAsMember(); + + AudioChannel channel = Dynamic.validateRequest(event, member); + if (channel == null) return; + + if (to_ban.getVoiceState().getChannel() != null) { + AudioChannel to_ban_channel = to_ban.getVoiceState().getChannel(); + if (to_ban_channel.getIdLong() == channel.getIdLong()) { + event.getGuild().moveVoiceMember(to_ban, null).and( + event.reply("Banned " + to_ban.getAsMention()).setEphemeral(true) + ).queue(); + } + } else { + event.reply("Banned " + to_ban.getAsMention()).setEphemeral(true).queue(); + } + + VoiceChannel voice = (VoiceChannel) channel; + voice.getManager().putPermissionOverride(to_ban, Collections.emptyList(), List.of(Permission.VIEW_CHANNEL, Permission.VOICE_CONNECT)).queue(); + } + + @ICommand(name = "permanent", description = "Make channel permanent", permissions = {Permission.MANAGE_CHANNEL}) + @IArgument(name = "status", + description = "True to make permanent, False to make temporary", + required = true, type = OptionType.BOOLEAN) + public static void permanent(SlashCommandInteractionEvent event) { + Member member = event.getMember(); + + AudioChannel channel = Dynamic.validateRequest(event, member); + if (channel == null) return; + + VoiceChannel voice = (VoiceChannel) channel; + + try { + Dynamic.droneManager.makePermanent(voice, event.getOption("status").getAsBoolean()); + } catch (KeyNotFoundException e) { + event.reply("You need to be in a temporary voice channel to use this command!").setEphemeral(true).queue(); + return; + } + event.reply("Channel is now " + event.getOption("status").getAsBoolean()).setEphemeral(true).queue(); + } + @ISubGroup(name = "Dynamic", description = "Dynamic") public static class Dynamic extends ListenerAdapter { - public static VoiceManager voiceManager; - public static DroneManager droneManager; - public static final long inviteDeadline = 1000L * 10L * 60L; // 600000 ms = 10 minutes // region constants public static final String configModal = "voice-dynamic-config-modal"; @@ -46,6 +150,8 @@ public static class Dynamic extends ListenerAdapter { public static final String dronePublicPrivate = "voice-dynamic-drone-public-private"; public static final String dronePermTemp = "voice-dynamic-drone-permanent-temporary"; public static final String droneClaim = "voice-dynamic-drone-claim"; + public static VoiceManager voiceManager; + public static DroneManager droneManager; // endregion @@ -90,7 +196,10 @@ public static void set(SlashCommandInteractionEvent event) { MessageEmbed embed = Utils.simpleEmbed("Voice Hive Initialized", "Just click in " + hiveChannel.getAsMention() + " to create a dynamic channel!", Color.GREEN); - event.replyEmbeds(embed).addActionRow(Button.primary(generateConfigModal + ":" + hiveChannel.getParentCategoryIdLong(), "Open Settings")).setEphemeral(true).queue(); + event.replyEmbeds(embed) + .addActionRow(Button.primary(generateConfigModal + ":" + hiveChannel.getParentCategoryIdLong(), "Open Settings")) + .setEphemeral(true) + .queue(); } catch (ExistingDynamicCategoryException e) { LOGGER.debug(method + " : error : " + e.getMessage()); @@ -433,107 +542,6 @@ public static void droneClaim(ButtonInteractionEvent event) { //endregion } - // User Commands - - @ICommand(name = "invite", description = "Invite user to your channel") - @IArgument(name = "user", - description = "User to invite", - required = true, type = OptionType.USER) - @SuppressWarnings({"unused"}) - public static void invite(SlashCommandInteractionEvent event) { - Member member = event.getMember(); - Member invited = event.getOption("user").getAsMember(); - - AudioChannel channel = Dynamic.validateRequest(event, member); - if (channel == null) return; - - VoiceChannel voice = (VoiceChannel) channel; - voice.createInvite().setUnique(true).deadline(System.currentTimeMillis() + Dynamic.inviteDeadline).queue(q -> { - voice.getManager().putPermissionOverride(invited, List.of(Permission.VIEW_CHANNEL, Permission.VOICE_CONNECT), Collections.emptyList()).queue(); - String name = member.getEffectiveName() + (member.getNickname() != null ? " (" + member.getNickname() + ")" : ""); - invited.getUser().openPrivateChannel().queue(chn -> chn.sendMessage(name + "invited you to join in a channel!\n" + q.getUrl()).queue()); - event.reply("Invite sent to " + invited.getAsMention()).setEphemeral(true).queue(); - }); - } - - @ICommand(name = "kick", description = "Kick user from your channel, it will remove permissions too") - @IArgument(name = "user", - description = "User to kick", - required = true, type = OptionType.USER) - @SuppressWarnings({"unused"}) - public static void kick(SlashCommandInteractionEvent event) { - Member member = event.getMember(); - Member to_kick = event.getOption("user").getAsMember(); - - AudioChannel channel = Dynamic.validateRequest(event, member); - if (channel == null) return; - - VoiceChannel voice = (VoiceChannel) channel; - voice.getManager().removePermissionOverride(to_kick).submit(); - - if (to_kick.getVoiceState().getChannel() != null) { - AudioChannel to_kick_channel = to_kick.getVoiceState().getChannel(); - if (to_kick_channel.getIdLong() == channel.getIdLong()) { - event.getGuild().moveVoiceMember(to_kick, null).and( - event.reply("Kicked " + to_kick.getAsMention()).setEphemeral(true) - ).queue(); - } else { - event.reply("User is not in your channel!").setEphemeral(true).queue(); - return; - } - } else { - event.reply("User is not in a voice channel!").setEphemeral(true).queue(); - return; - } - } - - @ICommand(name = "ban", description = "Ban user from your channel") - @IArgument(name = "user", - description = "User to kick", - required = true, type = OptionType.USER) - public static void ban(SlashCommandInteractionEvent event) { - Member member = event.getMember(); - Member to_ban = event.getOption("user").getAsMember(); - - AudioChannel channel = Dynamic.validateRequest(event, member); - if (channel == null) return; - - if (to_ban.getVoiceState().getChannel() != null) { - AudioChannel to_ban_channel = to_ban.getVoiceState().getChannel(); - if (to_ban_channel.getIdLong() == channel.getIdLong()) { - event.getGuild().moveVoiceMember(to_ban, null).and( - event.reply("Banned " + to_ban.getAsMention()).setEphemeral(true) - ).queue(); - } - } else { - event.reply("Banned " + to_ban.getAsMention()).setEphemeral(true).queue(); - } - - VoiceChannel voice = (VoiceChannel) channel; - voice.getManager().putPermissionOverride(to_ban, Collections.emptyList(), List.of(Permission.VIEW_CHANNEL, Permission.VOICE_CONNECT)).queue(); - } - - @ICommand(name = "permanent", description = "Make channel permanent", permissions = {Permission.MANAGE_CHANNEL}) - @IArgument(name = "status", - description = "True to make permanent, False to make temporary", - required = true, type = OptionType.BOOLEAN) - public static void permanent(SlashCommandInteractionEvent event) { - Member member = event.getMember(); - - AudioChannel channel = Dynamic.validateRequest(event, member); - if (channel == null) return; - - VoiceChannel voice = (VoiceChannel) channel; - - try { - Dynamic.droneManager.makePermanent(voice, event.getOption("status").getAsBoolean()); - } catch (KeyNotFoundException e) { - event.reply("You need to be in a temporary voice channel to use this command!").setEphemeral(true).queue(); - return; - } - event.reply("Channel is now " + event.getOption("status").getAsBoolean()).setEphemeral(true).queue(); - } - // endregion } diff --git a/src/main/java/com/softawii/capivara/listeners/events/VoiceEvents.java b/src/main/java/com/softawii/capivara/listeners/events/VoiceEvents.java index 94d27e1..ca4465b 100644 --- a/src/main/java/com/softawii/capivara/listeners/events/VoiceEvents.java +++ b/src/main/java/com/softawii/capivara/listeners/events/VoiceEvents.java @@ -4,7 +4,11 @@ import com.softawii.capivara.core.VoiceManager; import com.softawii.capivara.entity.VoiceHive; import com.softawii.capivara.exceptions.KeyNotFoundException; -import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.channel.concrete.Category; +import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel; +import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.events.channel.ChannelDeleteEvent; import net.dv8tion.jda.api.events.channel.update.ChannelUpdateParentEvent; import net.dv8tion.jda.api.events.channel.update.GenericChannelUpdateEvent; diff --git a/src/main/java/com/softawii/capivara/utils/CapivaraExceptionHandler.java b/src/main/java/com/softawii/capivara/utils/CapivaraExceptionHandler.java index 992249d..72d753d 100644 --- a/src/main/java/com/softawii/capivara/utils/CapivaraExceptionHandler.java +++ b/src/main/java/com/softawii/capivara/utils/CapivaraExceptionHandler.java @@ -4,9 +4,10 @@ import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; import net.dv8tion.jda.api.interactions.Interaction; -import net.dv8tion.jda.api.requests.restaction.MessageAction; +import net.dv8tion.jda.api.requests.restaction.MessageCreateAction; +import net.dv8tion.jda.api.utils.FileUpload; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -55,9 +56,9 @@ public void handle(Throwable throwable, Interaction interaction) { String logFileName = String.format("capivara-log-%s.log", now); MessageEmbed interactionContext = getInteractionContext(interaction); try { - MessageAction messageAction = channel.sendFile(stackTrace.getBytes(StandardCharsets.UTF_8), stackTraceFileName).setEmbeds(interactionContext); + MessageCreateAction messageAction = channel.sendFiles(FileUpload.fromData(stackTrace.getBytes(StandardCharsets.UTF_8), stackTraceFileName)).setEmbeds(interactionContext); if (logFileBytes != null) { - messageAction = messageAction.addFile(logFileBytes, logFileName); + messageAction = messageAction.addFiles(FileUpload.fromData(logFileBytes, logFileName)); } messageAction.submit(); } catch (IllegalArgumentException e) { diff --git a/src/main/java/com/softawii/capivara/utils/Utils.java b/src/main/java/com/softawii/capivara/utils/Utils.java index 1da64ba..34ab88a 100644 --- a/src/main/java/com/softawii/capivara/utils/Utils.java +++ b/src/main/java/com/softawii/capivara/utils/Utils.java @@ -27,9 +27,8 @@ public static MessageEmbed simpleEmbed(String title, String description, Color c } /** - * @param text Text to be parsed + * @param text Text to be parsed * @param length Max length of the text to be returned - * * @return Text with max length or less */ public static String getProperString(String text, int length) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e08bf8e..84b44f6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,4 +4,5 @@ spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.datasource.username=sa spring.datasource.password=sa hibernate.hbm2ddl.auto=update -curupira.reset=false \ No newline at end of file +curupira.reset=false +logging.level.root=debug \ No newline at end of file