Compare commits

..

No commits in common. "80007fec197fe2908cde91e437b0273480bd7cf3" and "74180dcd20861a8f7b40fb330ba196ce16d59938" have entirely different histories.

8 changed files with 92 additions and 51 deletions

View File

@ -1,16 +0,0 @@
name: "Build and test program"
on: push
jobs:
build:
name: "Build and test"
runs-on: java-bookworm
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Compile
run: gradle --build-cache compileJava
- name: Test
run: gradle --build-cache check
- name: Package
run: gradle --build-cache assemble

77
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,77 @@
image: docker:latest
services:
- docker:dind
stages:
- build
- test
- package
- release
# Disable the Gradle daemon for Continuous Integration servers as correctness
# is usually a priority over speed in CI environments. Using a fresh
# runtime for each build is more reliable since the runtime is completely
# isolated from any previous builds.
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
# Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
CONTAINER_BRANCH_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
build:
image: gradle:jdk15
stage: build
script: gradle --build-cache compileJava
cache:
key: "$CI_COMMIT_REF_NAME"
policy: push
paths:
- build
- .gradle
test:
image: gradle:jdk15
stage: test
script: gradle --build-cache check
cache:
key: "$CI_COMMIT_REF_NAME"
policy: pull
paths:
- build
- .gradle
package:
image: gradle:jdk15
stage: package
script: gradle --build-cache assemble
cache:
key: "$CI_COMMIT_REF_NAME"
policy: push
paths:
- build
- .gradle
artifacts:
paths:
- app/build/libs/app.jar
release:
stage: release
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build . -t $CONTAINER_BRANCH_IMAGE
- docker push $CONTAINER_BRANCH_IMAGE
release-master:
stage: release
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build . -t $CONTAINER_RELEASE_IMAGE
- docker push $CONTAINER_RELEASE_IMAGE
only:
- master

View File

@ -35,7 +35,7 @@ jar {
} }
dependencies { dependencies {
implementation 'com.discord4j:discord4j-core:3.1.5' implementation 'com.discord4j:discord4j-core:3.1.1'
implementation 'ch.qos.logback:logback-classic:1.2.3' implementation 'ch.qos.logback:logback-classic:1.2.3'
implementation 'org.postgresql:postgresql:42.2.18.jre7' implementation 'org.postgresql:postgresql:42.2.18.jre7'
implementation 'org.apache.commons:commons-lang3:3.11' implementation 'org.apache.commons:commons-lang3:3.11'

View File

@ -8,10 +8,10 @@ import xyz.vallat.louis.timer.TimerManager;
public class App { public class App {
public static final String PREFIX = "+"; public static final String PREFIX = ";";
public static final String NAME = "PrésencEirb"; public static final String NAME = "PrésencEirb";
public static final String DESCRIPTION = "Tu as pensé à pointer ?"; public static final String DESCRIPTION = "Tu as pensé à pointer ?";
public static final String VERSION = "0.4.0"; public static final String VERSION = "0.3.3";
private static final Logger logger = LoggerFactory.getLogger(App.class.getCanonicalName()); private static final Logger logger = LoggerFactory.getLogger(App.class.getCanonicalName());
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -50,4 +50,8 @@ public abstract class Command {
.addField("IDENTIFIER", errorCode, false).setTimestamp(Instant.now()); .addField("IDENTIFIER", errorCode, false).setTimestamp(Instant.now());
})).then(); })).then();
} }
protected String[] getArgArray(MessageCreateEvent event) {
return event.getMessage().getContent().substring(name.length()).split(" ");
}
} }

View File

@ -14,7 +14,7 @@ import java.util.List;
public class Edt extends Command { public class Edt extends Command {
public Edt(String name) { public Edt(String name) {
super(name, "Récupère (au maximum) tes 5 prochaines cours.", name); super(name, "Récupère tes 5 prochaines cours (si tu en as 5 ou plus).", name);
} }
@Override @Override
@ -27,10 +27,10 @@ public class Edt extends Command {
return messageChannel.createMessage("On dirait que tu n'es pas dans ma base de données ! Es tu inscrit ?"); return messageChannel.createMessage("On dirait que tu n'es pas dans ma base de données ! Es tu inscrit ?");
return messageChannel.createEmbed(e -> { return messageChannel.createEmbed(e -> {
List<Event> events = EventManager.getNextEventsFromStudent(s); List<Event> events = EventManager.getNextEventsFromStudent(s);
if (events.size() > 5) events = events.subList(0, 5); if (events.size() >= 5) events = events.subList(0, 5);
e.setTitle("Prochains cours") e.setTitle("Prochains cours")
.setFooter("Liste des " + events.size() + " prochains cours", null) .setFooter("Liste des 5 prochains cours", null)
.setDescription("Voici tes " + events.size() + " prochains cours, <@!" + s.getSnowflake() + "> :") .setDescription("Voici tes 5 prochains cours, <@!" + s.getSnowflake() + "> :")
.setColor(Color.GREEN); .setColor(Color.GREEN);
events.forEach(ev -> e.addField(ev.getStartEvent().toString(), ev.getSummary(), false)); events.forEach(ev -> e.addField(ev.getStartEvent().toString(), ev.getSummary(), false));
e.setTimestamp(Instant.now()); e.setTimestamp(Instant.now());

View File

@ -36,10 +36,10 @@ public final class EventManager {
connection.rollback(); connection.rollback();
} else { } else {
try { try {
logger.debug("'{}' events re-imported, committing.", importedEvents); logger.debug("'{}' events reimported, commiting.", importedEvents);
connection.commit(); connection.commit();
} catch (SQLException e) { } catch (SQLException e) {
logger.error("An SQLException occurred, rolling back.", e); logger.error("An SQLExcetpion occured, rolling back.", e);
connection.rollback(); connection.rollback();
} }
} }

View File

@ -5,18 +5,17 @@ import discord4j.core.DiscordClientBuilder;
import discord4j.core.GatewayDiscordClient; import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.lifecycle.ReadyEvent; import discord4j.core.event.domain.lifecycle.ReadyEvent;
import discord4j.core.event.domain.message.MessageCreateEvent; import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.event.domain.message.ReactionAddEvent;
import discord4j.core.object.entity.User; import discord4j.core.object.entity.User;
import discord4j.core.object.presence.Activity; import discord4j.core.object.presence.Activity;
import discord4j.core.object.presence.Presence; import discord4j.core.object.presence.Presence;
import discord4j.core.object.reaction.ReactionEmoji;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import xyz.vallat.louis.commands.*; import xyz.vallat.louis.commands.*;
import xyz.vallat.louis.environment.EnvironmentVariables; import xyz.vallat.louis.environment.EnvironmentVariables;
import java.util.*; import java.util.ArrayList;
import java.util.List;
import static xyz.vallat.louis.App.PREFIX; import static xyz.vallat.louis.App.PREFIX;
@ -24,16 +23,6 @@ public final class DiscordManager {
private static final List<Command> commands = new ArrayList<>(); private static final List<Command> commands = new ArrayList<>();
private static final Logger logger = LoggerFactory.getLogger(DiscordManager.class.getCanonicalName()); private static final Logger logger = LoggerFactory.getLogger(DiscordManager.class.getCanonicalName());
private static final ReactionEmoji[] reactionAnswers = {
ReactionEmoji.unicode("\uD83E\uDD16"), // robot head
ReactionEmoji.unicode("\uD83D\uDE0B"), // smile with tongue out
ReactionEmoji.unicode("\uD83E\uDD70"), // smile with hearts
ReactionEmoji.unicode("\uD83E\uDD29"), // smile with stars in eyes
ReactionEmoji.unicode("\uD83D\uDE01"), // smile
ReactionEmoji.unicode("\uD83D\uDE07"), // innocent
ReactionEmoji.unicode("\uD83D\uDCAF"), // 1OO
ReactionEmoji.unicode("\uD83E\uDDBE") // robot arm
};
private static GatewayDiscordClient discordClient; private static GatewayDiscordClient discordClient;
static { static {
@ -61,18 +50,6 @@ public final class DiscordManager {
.subscribe(); .subscribe();
} }
private static void registerReactionEvents() {
discordClient.getEventDispatcher().on(ReactionAddEvent.class)
.flatMap(ReactionAddEvent::getMessage)
.filter(message -> message.getAuthor().isPresent()
&& message.getAuthor().get().equals(discordClient.getSelf().block()))
.filter(message -> message.getReactions().stream()
.noneMatch(r -> message.getReactors(r.getEmoji()).toStream()
.anyMatch(u -> u.equals(discordClient.getSelf().block()))))
.flatMap(message -> message.addReaction(reactionAnswers[new Random().nextInt(reactionAnswers.length)]).then())
.subscribe();
}
public static void login() { public static void login() {
discordClient = DiscordClientBuilder.create(System.getenv(EnvironmentVariables.DISCORD_TOKEN.getValue())) discordClient = DiscordClientBuilder.create(System.getenv(EnvironmentVariables.DISCORD_TOKEN.getValue()))
.build().login().retry(2) .build().login().retry(2)
@ -89,7 +66,6 @@ public final class DiscordManager {
logger.info("Logged in on Discord as {}#{}.", self.getUsername(), self.getDiscriminator()); logger.info("Logged in on Discord as {}#{}.", self.getUsername(), self.getDiscriminator());
}); });
registerDiscordCommands(); registerDiscordCommands();
registerReactionEvents();
} }
public static Mono<Void> sendPrivateMessageToUser(String snowflake, String message) { public static Mono<Void> sendPrivateMessageToUser(String snowflake, String message) {