Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/context sensitivity #22

Open
wants to merge 5 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions bot/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ repositories {

dependencies {
// discord
implementation("net.dv8tion", "JDA", "5.0.0-alpha.9") {
implementation("net.dv8tion", "JDA", "5.0.0-alpha.11") {
exclude(module = "opus-java")
}

implementation("de.chojo", "cjda-util", "2.4.0+alpha.11")
implementation("io.javalin", "javalin-bundle", "4.4.0")
implementation("io.javalin", "javalin-bundle", "4.5.0")


// database
Expand Down
7 changes: 6 additions & 1 deletion bot/src/main/java/de/chojo/gamejam/Bot.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import de.chojo.gamejam.data.GuildData;
import de.chojo.gamejam.data.JamData;
import de.chojo.gamejam.data.TeamData;
import de.chojo.gamejam.listener.ReadyStateChangeListener;
import de.chojo.gamejam.util.LogNotify;
import de.chojo.jdautil.command.SimpleCommand;
import de.chojo.jdautil.command.dispatching.CommandHub;
Expand All @@ -30,6 +31,7 @@
import de.chojo.sqlutil.updater.SqlType;
import de.chojo.sqlutil.updater.SqlUpdater;
import de.chojo.sqlutil.wrapper.QueryBuilderConfig;
import net.dv8tion.jda.api.hooks.AnnotatedEventManager;
import net.dv8tion.jda.api.requests.GatewayIntent;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder;
Expand Down Expand Up @@ -106,6 +108,8 @@ public void start() throws IOException, SQLException, LoginException {

initBot();

shardManager.addEventListener(new ReadyStateChangeListener(shardManager));

buildLocale();

buildCommands();
Expand Down Expand Up @@ -142,7 +146,8 @@ private void initBot() throws LoginException {
GatewayIntent.GUILD_MEMBERS,
GatewayIntent.DIRECT_MESSAGES,
GatewayIntent.GUILD_MESSAGES)
.setMemberCachePolicy(MemberCachePolicy.DEFAULT)
.setMemberCachePolicy(MemberCachePolicy.ALL)
.setEventManagerProvider(id -> new AnnotatedEventManager())
.build();
RestAction.setDefaultFailure(throwable -> log.error("Unhandled exception occured: ", throwable));
}
Expand Down
9 changes: 3 additions & 6 deletions bot/src/main/java/de/chojo/gamejam/api/Api.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,11 @@
import de.chojo.gamejam.data.JamData;
import de.chojo.gamejam.data.TeamData;
import io.javalin.Javalin;
import io.javalin.apibuilder.ApiBuilder;
import io.javalin.http.Context;
import io.javalin.http.HttpCode;
import io.javalin.plugin.openapi.OpenApiOptions;
import io.javalin.plugin.openapi.OpenApiPlugin;
import io.javalin.plugin.openapi.ui.ReDocOptions;
import io.javalin.plugin.openapi.ui.SwaggerOptions;
import io.swagger.models.Info;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.dv8tion.jda.api.sharding.ShardManager;
import org.slf4j.Logger;

Expand Down Expand Up @@ -54,16 +50,17 @@ public Api(Configuration configuration, ShardManager shardManager, TeamData team

private void build() {
app = Javalin.create(config -> {
config.contextPath = configuration.api().contextPath();
config.registerPlugin(getConfiguredOpenApiPlugin());
config.accessManager((handler, ctx, routeRoles) -> {
if(ctx.path().startsWith("/swagger") || ctx.path().startsWith("/redoc")){
if(ctx.matchedPath().startsWith("/swagger") || ctx.matchedPath().startsWith("/redoc")){
handler.handle(ctx);
return;
}

var token = ctx.req.getHeader("authorization");
if (token == null) {
ctx.status(HttpServletResponse.SC_UNAUTHORIZED).result("Please provde a valid token in the authorization header.");
ctx.status(HttpServletResponse.SC_UNAUTHORIZED).result("Please provide a valid token in the authorization header.");
} else if (!token.equals(configuration.api().token())) {
ctx.status(HttpServletResponse.SC_UNAUTHORIZED).result("Unauthorized");
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,16 @@

@SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal"})
public class Api {

private String contextPath = "/";
private String host = "localhost";
private int port = 8888;
private String token = "letmein";

public String contextPath() {
return contextPath;
}

public String host() {
return host;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* SPDX-License-Identifier: AGPL-3.0-only
*
* Copyright (C) 2022 DevCord Team and Contributor
*/

package de.chojo.gamejam.listener;

import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.events.ReadyEvent;
import net.dv8tion.jda.api.events.ShutdownEvent;
import net.dv8tion.jda.api.hooks.SubscribeEvent;
import net.dv8tion.jda.api.sharding.ShardManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ReadyStateChangeListener {

private final ShardManager shardManager;
private static final Logger log = LoggerFactory.getLogger(ReadyStateChangeListener.class);

public ReadyStateChangeListener(ShardManager shardManager) {
this.shardManager = shardManager;
}

@SubscribeEvent
public void finishedLoading(ReadyEvent readyEvent){
log.warn("Available Guilds: {}",readyEvent.getGuildAvailableCount());
shardManager.setActivity(Activity.playing("Plugin-Jam-Bot"));
for (Guild guild : shardManager.getGuilds()) {
guild.loadMembers(member -> {
log.warn("Loaded member \"{}\" of guild \"{}\"", member.getEffectiveName(), guild.getName());
});
}
}

@SubscribeEvent
public void shutdown(ShutdownEvent shutdownEvent){
shardManager.setActivity(null);
}
}
1 change: 1 addition & 0 deletions conf/dev/temp.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"poolSize" : 5
},
"api" : {
"contextPath": "game-jam/",
"host" : "0.0.0.0",
"port" : 8888,
"token" : "letmein"
Expand Down
2 changes: 1 addition & 1 deletion docker/bot.DockerFile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM openjdk:18
FROM docker.io/openjdk:18

WORKDIR /app

Expand Down
11 changes: 11 additions & 0 deletions docker/kubernetes/database-persistence.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-data
namespace: plugin-jam-bot
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
13 changes: 2 additions & 11 deletions docker/kubernetes/database.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: database
namespace: plugin-jam-bot
spec:
template:
metadata:
Expand Down Expand Up @@ -33,21 +34,11 @@ apiVersion: v1
kind: Service
metadata:
name: database
namespace: plugin-jam-bot
spec:
selector:
app: database
ports:
- name: postgres
protocol: TCP
port: 5432
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
4 changes: 3 additions & 1 deletion docker/kubernetes/game-jam-bot.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: bot
namespace: plugin-jam-bot
spec:
template:
metadata:
Expand All @@ -18,7 +19,7 @@ spec:
initContainers:
- name: init-myservice
image: busybox:1.28
command: [ 'sh', '-c', "until nslookup database.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done" ]
command: [ 'sh', '-c', "until nslookup database.plugin-jam-bot.svc.cluster.local; do echo waiting for myservice; sleep 2; done" ]

selector:
matchLabels:
Expand All @@ -28,6 +29,7 @@ apiVersion: v1
kind: Service
metadata:
name: bot-01
namespace: plugin-jam-bot
spec:
ports:
- name: http
Expand Down
6 changes: 5 additions & 1 deletion docker/kubernetes/ingress.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: game-jam-bot-ingres
namespace: plugin-jam-bot
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router.middlewares: default-game-jam-strip-prefix@kubernetescrd
# Stripping the prefix and providing it as `X-Forwarded-Prefix` isn't supported by Javalin and the Swagger module
# Thus we deactivate the middleware for now
# traefik.ingress.kubernetes.io/router.middlewares: default-game-jam-strip-prefix@kubernetescrd
spec:
rules:
- http:
Expand All @@ -21,6 +24,7 @@ apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: game-jam-strip-prefix
namespace: plugin-jam-bot
spec:
stripPrefix:
prefixes:
Expand Down
6 changes: 6 additions & 0 deletions docker/kubernetes/namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: Namespace
apiVersion: v1
metadata:
name: plugin-jam-bot
labels:
app: bot