[Bonus] Discord integration

This commit is contained in:
jeffcheasey88 2023-04-12 20:03:46 +02:00
parent 2f9d604ccf
commit 8923c331c4
6 changed files with 100 additions and 3 deletions

View file

@ -15,5 +15,6 @@
</attributes>
</classpathentry>
<classpathentry kind="lib" path="Treasure.jar"/>
<classpathentry exported="true" kind="lib" path="JDA-5.0.0-beta.8-withDependencies.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Binary file not shown.

View file

@ -25,6 +25,8 @@ public class Configuration {
private String token_issuer;
private int token_expiration;
private String token_discord;
private File _file;
public Configuration(String path) {
@ -156,4 +158,8 @@ public class Configuration {
users_files = "/tmp/users_files";
return users_files;
}
public String getDiscordToken(){
return this.token_discord;
}
}

View file

@ -10,14 +10,17 @@ import java.util.regex.Matcher;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import be.jeffcheasey88.peeratcode.bonus.discord.Bot;
import be.jeffcheasey88.peeratcode.framework.Client;
import be.jeffcheasey88.peeratcode.framework.HttpReader;
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
import be.jeffcheasey88.peeratcode.framework.Locker;
import be.jeffcheasey88.peeratcode.framework.Response;
import be.jeffcheasey88.peeratcode.framework.Route;
import be.jeffcheasey88.peeratcode.framework.Router;
import be.jeffcheasey88.peeratcode.framework.User;
import be.jeffcheasey88.peeratcode.model.Group;
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
import be.jeffcheasey88.peeratcode.routes.BadgeDetails;
import be.jeffcheasey88.peeratcode.routes.ChapterElement;
@ -81,14 +84,19 @@ public class Main{
router.register(new BadgeDetails(router.getDataBase()));
router.register(new GroupList(router.getDataBase()));
router.register(new GroupCreate(router.getDataBase()));
router.register(new GroupJoin(router.getDataBase()));
router.register(new GroupQuit(router.getDataBase()));
Locker<Group> groupLock = new Locker<>();
router.register(new GroupCreate(router.getDataBase(), groupLock));
DynamicLeaderboard dlb = new DynamicLeaderboard(router.getDataBase());
router.register(dlb);
router.register(new PuzzleResponse(router.getDataBase(), config.getUsersFiles(), dlb.getLocker()));
Bot bot = new Bot(config, router.getDataBase(), groupLock);
bot.start();
}
private static void startWebServer(Configuration config, Router router) throws IOException {

View file

@ -0,0 +1,76 @@
package be.jeffcheasey88.peeratcode.bonus.discord;
import java.util.List;
import be.jeffcheasey88.peeratcode.Configuration;
import be.jeffcheasey88.peeratcode.framework.Locker;
import be.jeffcheasey88.peeratcode.framework.Locker.Key;
import be.jeffcheasey88.peeratcode.model.Group;
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.channel.concrete.Category;
import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel;
public class Bot extends Thread{
private String token;
private DatabaseRepository repo;
private Locker<Group> locker;
public Bot(Configuration config, DatabaseRepository repo, Locker<Group> locker){
this.token = config.getDiscordToken();
this.repo = repo;
this.locker = locker;
}
@Override
public void run(){
try{
JDA jda = JDABuilder.createDefault(token).build();
jda.awaitReady();
Guild guild = jda.getGuildById(1068824613603262464L);
Category event = guild.getCategoryById(1095761356017373284L);
Key key = new Key();
locker.init(key);
List<Group> groups = this.repo.getAllGroups();
for(Group group : groups){
Integer chapter = group.getLinkToChapter();
Integer puzzle = group.getLinkToPuzzle();
if((chapter == null || chapter == 0) && (puzzle == null || puzzle == 0)) continue;
boolean contains = false;
for(VoiceChannel channel : event.getVoiceChannels()){
if(channel.getName().equalsIgnoreCase(group.getName())){
contains = true;
break;
}
}
if(contains) continue;
event.createVoiceChannel(group.getName()).complete();
}
while(true){
locker.lock(key);
Group group = locker.getValue(key);
Integer chapter = group.getLinkToChapter();
Integer puzzle = group.getLinkToPuzzle();
if((chapter == null || chapter == 0) && (puzzle == null || puzzle == 0)) continue;
boolean contains = false;
for(VoiceChannel channel : event.getVoiceChannels()){
if(channel.getName().equalsIgnoreCase(group.getName())){
contains = true;
break;
}
}
if(contains) continue;
event.createVoiceChannel(group.getName()).complete();
}
}catch(Exception e){
e.printStackTrace();
}
}
}

View file

@ -9,18 +9,22 @@ import org.json.simple.JSONObject;
import be.jeffcheasey88.peeratcode.framework.HttpReader;
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
import be.jeffcheasey88.peeratcode.framework.Locker;
import be.jeffcheasey88.peeratcode.framework.Response;
import be.jeffcheasey88.peeratcode.framework.Route;
import be.jeffcheasey88.peeratcode.framework.User;
import be.jeffcheasey88.peeratcode.model.Completion;
import be.jeffcheasey88.peeratcode.model.Group;
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
public class GroupCreate implements Response {
private Locker<Group> locker;
private DatabaseRepository repo;
public GroupCreate(DatabaseRepository repo) {
public GroupCreate(DatabaseRepository repo, Locker<Group> locker){
this.repo = repo;
this.locker = locker;
}
@Route(path = "^\\/groupCreate$", type = POST, needLogin = true)
@ -35,6 +39,8 @@ public class GroupCreate implements Response {
if (this.repo.insertGroup(group, user)) {
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
locker.setValue(group);
} else {
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
}