Compare commits
10 Commits
74180dcd20
...
80007fec19
Author | SHA1 | Date | |
---|---|---|---|
80007fec19 | |||
ffcdd46c95 | |||
f27b9cb4f6 | |||
42dd0e8dca | |||
09be3c9959 | |||
0375911c67 | |||
306e72403c | |||
23c842a2ac | |||
4fb6022524 | |||
cf135d9ff5 |
16
.gitea/workflows/build_and_test.yml
Normal file
16
.gitea/workflows/build_and_test.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
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
|
@ -1,77 +0,0 @@
|
|||||||
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
|
|
@ -35,7 +35,7 @@ jar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.discord4j:discord4j-core:3.1.1'
|
implementation 'com.discord4j:discord4j-core:3.1.5'
|
||||||
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'
|
||||||
|
@ -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.3.3";
|
public static final String VERSION = "0.4.0";
|
||||||
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) {
|
||||||
|
@ -50,8 +50,4 @@ 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(" ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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 tes 5 prochaines cours (si tu en as 5 ou plus).", name);
|
super(name, "Récupère (au maximum) tes 5 prochaines cours.", 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 5 prochains cours", null)
|
.setFooter("Liste des " + events.size() + " prochains cours", null)
|
||||||
.setDescription("Voici tes 5 prochains cours, <@!" + s.getSnowflake() + "> :")
|
.setDescription("Voici tes " + events.size() + " 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());
|
||||||
|
@ -36,10 +36,10 @@ public final class EventManager {
|
|||||||
connection.rollback();
|
connection.rollback();
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
logger.debug("'{}' events reimported, commiting.", importedEvents);
|
logger.debug("'{}' events re-imported, committing.", importedEvents);
|
||||||
connection.commit();
|
connection.commit();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
logger.error("An SQLExcetpion occured, rolling back.", e);
|
logger.error("An SQLException occurred, rolling back.", e);
|
||||||
connection.rollback();
|
connection.rollback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,18 @@ 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.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static xyz.vallat.louis.App.PREFIX;
|
import static xyz.vallat.louis.App.PREFIX;
|
||||||
|
|
||||||
@ -23,6 +24,16 @@ 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 {
|
||||||
@ -50,6 +61,18 @@ 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)
|
||||||
@ -66,6 +89,7 @@ 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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user