diff --git a/Dockerfile b/Dockerfile index f2d311f..ea352ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ FROM eclipse-temurin:21-jre WORKDIR /app -COPY build/libs/ClicBot-1.0-SNAPSHOT.jar app.jar +COPY build/libs/ClicBot-1.0-SNAPSHOT-all.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile index 1e0423c..f887227 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,7 +5,7 @@ pipeline { stage('Build') { steps { sh 'chmod +x ./gradlew' - sh './gradlew build' + sh './gradlew shadowJar' } } @@ -22,9 +22,9 @@ pipeline { } steps { sh ''' - docker stop bot-preprod || true - docker rm bot-preprod || true - docker run -d --name bot-preprod \ + docker stop ares-preprod || true + docker rm ares-preprod || true + docker run -d --name ares-preprod \ -e BOT_TOKEN=$DISCORD_TOKEN \ ares-bot:develop ''' @@ -38,8 +38,8 @@ pipeline { } steps { sh ''' - docker stop bot-prod || true - docker rm bot-prod || true + docker stop ares-prod || true + docker rm ares-prod || true docker run -d --name bot-prod \ -e BOT_TOKEN=$DISCORD_TOKEN \ ares-bot:master @@ -47,4 +47,4 @@ pipeline { } } } -} +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 5803241..4d38196 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,14 @@ plugins { - id("java") + java + id("com.gradleup.shadow") version "8.3.5" +} + +tasks { + jar { + manifest { + attributes["Main-Class"] = "org.ares.Main" // remplace par ton vrai chemin de classe + } + } } group = "org.ares" @@ -13,6 +22,7 @@ dependencies { implementation("com.discord4j:discord4j-core:3.3.2") implementation("org.apache.logging.log4j:log4j:2.17.1") implementation("org.apache.logging.log4j:log4j-api:2.17.1") + implementation("ch.qos.logback:logback-classic:1.5.6") } tasks.test { diff --git a/src/main/java/org/ares/Main.java b/src/main/java/org/ares/Main.java index 0f2a6b0..54977f2 100644 --- a/src/main/java/org/ares/Main.java +++ b/src/main/java/org/ares/Main.java @@ -3,24 +3,41 @@ import discord4j.core.DiscordClient; import discord4j.core.GatewayDiscordClient; import discord4j.core.event.domain.channel.TextChannelCreateEvent; +import discord4j.core.event.domain.command.ApplicationCommandEvent; import discord4j.core.event.domain.interaction.ButtonInteractionEvent; +import discord4j.core.event.domain.lifecycle.ReadyEvent; +import discord4j.core.object.entity.User; import discord4j.core.object.presence.ClientActivity; import discord4j.core.object.presence.ClientPresence; import discord4j.rest.RestClient; -import io.netty.handler.ssl.ClientAuth; + import org.ares.commands.CommandRegistry; import org.ares.listeners.ListenerRegistry; import org.ares.listeners.tickets.TicketCloseListener; import org.ares.listeners.tickets.TicketListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.ares.listeners.tickets.TicketListener.createTicketSalon; public class Main { + private static final Logger logger = LoggerFactory.getLogger(Main.class); + public static void main(String[] args) { DiscordClient client = DiscordClient.create(System.getenv("BOT_TOKEN")); // Créez une variable d'environement au lancement appelé "BOT_TOKEN". GatewayDiscordClient gateway = client.login().block(); - ClientPresence.online(ClientActivity.streaming("Regarde ClicDroit", "https://twitch.tv/")); + + + gateway.getEventDispatcher().on(ReadyEvent.class) + .subscribe(readyEvent -> { + User self = readyEvent.getSelf(); + logger.info("%s connecté !" + self.getUsername()); + self.getClient().updatePresence(ClientPresence.online( + ClientActivity.streaming("Regarde ClicDroit", "https://twitch.tv/") + )); + }); + // Listeners des events bouton et autres. gateway.on(ButtonInteractionEvent.class, event -> @@ -37,7 +54,7 @@ public static void main(String[] args) { // Registery des commandes slash. CommandRegistry registry = new CommandRegistry(); - registry.registerToDiscord(RestClient.create(client.getCoreResources().getToken()), 1396773019690729524L); + registry.registerToDiscord(RestClient.create(client.getCoreResources().getToken())); registry.listenTo(gateway); // Registery des différente écoute, MemberJoin etc. diff --git a/src/main/java/org/ares/commands/CommandRegistry.java b/src/main/java/org/ares/commands/CommandRegistry.java index 25f576c..74ca256 100644 --- a/src/main/java/org/ares/commands/CommandRegistry.java +++ b/src/main/java/org/ares/commands/CommandRegistry.java @@ -25,7 +25,7 @@ public ISlashCommand getCommand(String name) { return commands.get(name); } - public void registerToDiscord(RestClient restClient, long guildId) { + public void registerToDiscord(RestClient restClient) { long applicationId = restClient.getApplicationId().block(); List requests = commands.values() @@ -34,7 +34,7 @@ public void registerToDiscord(RestClient restClient, long guildId) { .toList(); restClient.getApplicationService() - .bulkOverwriteGuildApplicationCommand(applicationId, guildId, requests) + .bulkOverwriteGlobalApplicationCommand(applicationId, requests) .subscribe(); } diff --git a/src/main/java/org/ares/listeners/tickets/TicketListener.java b/src/main/java/org/ares/listeners/tickets/TicketListener.java index 2c03c91..e0356c5 100644 --- a/src/main/java/org/ares/listeners/tickets/TicketListener.java +++ b/src/main/java/org/ares/listeners/tickets/TicketListener.java @@ -6,6 +6,7 @@ import discord4j.core.object.PermissionOverwrite; import discord4j.core.object.component.*; import discord4j.core.object.entity.Guild; +import discord4j.core.object.entity.channel.Category; import discord4j.core.spec.EmbedCreateSpec; import discord4j.core.spec.MessageCreateSpec; import discord4j.core.spec.TextChannelCreateSpec; @@ -23,14 +24,20 @@ public class TicketListener { public static Mono createTicketSalon(ButtonInteractionEvent event) { Guild guild = event.getInteraction().getGuild().block(); - var categoryId = 1534193855363289159L; - assert guild != null; + Category category = guild.getChannels() + .ofType(Category.class) + .filter(cat -> cat.getName().equalsIgnoreCase("\uD83C\uDFAB Tickets")) + .next() + .block(); + if (category == null) { + return event.reply("La catégorie 'Ticket' n'existe pas sur ce serveur !").withEphemeral(true); + } if (tickets.containsValue(event.getUser().getUsername())) { return event.reply("Vous avez déja un ticket d'ouvert !").withEphemeral(true); } else { return guild.createTextChannel(TextChannelCreateSpec.builder() .name("ticket-" + event.getUser().getUsername()) - .parentId(Snowflake.of(categoryId)) + .parentId(category.getId()) .permissionOverwrites(Set.of( PermissionOverwrite.forRole( guild.getId(),