Premier commit - Inclusion dans le système git

This commit is contained in:
Mysaa 2021-05-24 15:23:25 +02:00
commit eb4dfd6613
3 changed files with 223 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.classpath
.settings
.project
bin/

View File

@ -0,0 +1,34 @@
package com.bernard.juliateam;
import java.util.List;
import java.util.Set;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.VoiceChannel;
public class JuliaGame {
public String name;
public Guild g;
public List<String> teamsNames;
public List<Set<Member>> teams;
public List<VoiceChannel> teamsChannels;
public TextChannel channel;
public Set<Member> unAnswered;
public boolean started = false;
public JuliaGame(String name, Guild g, List<String> teamsNames, List<Set<Member>> teams) {
this.name = name;
this.g = g;
this.teamsNames = teamsNames;
this.teams = teams;
for(Set<Member> team : teams)
unAnswered.addAll(team);
}
}

View File

@ -0,0 +1,185 @@
package com.bernard.juliateam;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.Category;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.VoiceChannel;
import net.dv8tion.jda.core.managers.GuildController;
public class TeamManager {
public static final String DB_CONNECTION_FILEPATH = "/var/julia/juliateam.conn";
public static TeamManager instance = new TeamManager();
Connection connexion;
public TeamManager() {
try (BufferedReader bis = new BufferedReader(new FileReader(DB_CONNECTION_FILEPATH))){
String url = bis.readLine();
String name = bis.readLine();
String password = bis.readLine();
connexion = DriverManager.getConnection(url, name, password);
} catch (FileNotFoundException e) {
System.err.println("Cannot find the file "+DB_CONNECTION_FILEPATH+" for getting connection informations");
e.printStackTrace();
} catch (IOException e) {
System.err.println("Cannot read the file "+DB_CONNECTION_FILEPATH+" for getting connection informations");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("Cannot initiate the connexion with data inside "+DB_CONNECTION_FILEPATH);
e.printStackTrace();
}
}
public void requestGame(String name,Guild g,List<Set<Member>> teams,List<String> teamNames) {
initGameContext(name, g, teams, teamNames);
}
public void acceptGame(Member m) {
try {
PreparedStatement gameStatement = connexion.prepareStatement("UPDATE juliateam_players SET accepted=1 WHERE memberID=?");
gameStatement.setLong(1, m.getUser().getIdLong());
gameStatement.executeQuery();
} catch (SQLException e) {
System.err.println("Cannot execute query to make user accept game");
e.printStackTrace();
}
}
public void refuseGame(Member m) {
try {
PreparedStatement gameStatement = connexion.prepareStatement("UPDATE juliateam_players SET accepted=0 WHERE memberID=?");
gameStatement.setLong(1, m.getUser().getIdLong());
gameStatement.executeQuery();
} catch (SQLException e) {
System.err.println("Cannot execute query to make user refuse game");
e.printStackTrace();
}
}
public void endGame(TextChannel chan) {
Guild g = chan.getGuild();
try {
PreparedStatement gameNameStatement = connexion.prepareStatement("SELECT * FROM juliateam_games WHERE textChannelID=?");
gameNameStatement.setLong(1, chan.getIdLong());
ResultSet game = gameNameStatement.executeQuery();
PreparedStatement teamNameStatement = connexion.prepareStatement("SELECT * FROM juliateam_teams WHERE gameID=?");
teamNameStatement.setInt(1, game.getInt("ID"));
ResultSet team = teamNameStatement.executeQuery();
PreparedStatement playerNameStatement = connexion.prepareStatement("SELECT * FROM juliateam_player WHERE gameID=?");
playerNameStatement.setInt(1, game.getInt("ID"));
ResultSet player = playerNameStatement.executeQuery();
Role role = g.getRoleById(game.getLong("roleID"));
//Remove PLAYER
do {
g.getController().removeRolesFromMember(g.getMemberById(player.getLong("memberID")), role).complete();
}while(player.next());
PreparedStatement playersStatement = connexion.prepareStatement("DELETE FROM juliateam_players WHERE gameID=?");
playersStatement.setInt(1, game.getInt("ID"));
playersStatement.executeUpdate();
//Remove TEAM
do {
g.getVoiceChannelById(team.getLong("voiceChannelID")).delete().complete();
}while(team.next());
PreparedStatement teamsStatement = connexion.prepareStatement("DELETE FROM juliateam_teams WHERE gameID=?");
teamsStatement.setInt(1, game.getInt("ID"));
teamsStatement.executeUpdate();
//Remove GAME
TextChannel channel = g.getTextChannelById(game.getLong("textChannelID"));
Category category = chan.getParent();
channel.delete().complete();
category.delete().complete();
role.delete().complete();
PreparedStatement gameStatement = connexion.prepareStatement("DELETE FROM juliateam_games WHERE ID=?");
gameStatement.setInt(1, game.getInt("ID"));
gameStatement.executeUpdate();
} catch (SQLException e) {
System.err.println("Cannot remove the game : mysql error");
e.printStackTrace();
}
}
private void initGameContext(String name,Guild guild,List<Set<Member>> teams,List<String> teamNames) {
GuildController g = guild.getController();
try {
//Creating GAME
Role role = g.createRole().setName(name + " player").complete();
EnumSet<Permission> roleAllow = EnumSet.of(Permission.VOICE_CONNECT, Permission.VIEW_CHANNEL, Permission.MESSAGE_READ, Permission.MESSAGE_WRITE, Permission.VOICE_CONNECT, Permission.VOICE_SPEAK);
Category category = (Category) g.createCategory(name + " game")
.addPermissionOverride(role, roleAllow, null)
.addPermissionOverride(guild.getPublicRole(), null, Permission.getPermissions(Permission.ALL_PERMISSIONS))
.complete();
TextChannel channel = (TextChannel) g.createTextChannel(name).setParent(category).complete();
PreparedStatement gameStatement = connexion.prepareStatement("INSERT INTO juliateam_games (name,guildID,textChannelID,roleID) VALUES (?,?,?,?);SELECT LAST_INSERT_ID();");
gameStatement.setString(1, name);
gameStatement.setLong(2, guild.getIdLong());
gameStatement.setLong(3, channel.getIdLong());
gameStatement.setLong(4, role.getIdLong());
int gameID = gameStatement.executeQuery().getInt(1);
//Creating TEAMS
for(int i = 0;i < teamNames.size();i++) {
VoiceChannel chan = (VoiceChannel) g.createVoiceChannel("Team "+teamNames.get(i)).setParent(category).complete();
PreparedStatement teamStatement = connexion.prepareStatement("INSERT INTO juliateam_teams (gameID,teamName,voiceChannelID) VALUES (?,?,?);SELECT LAST_INSERT_ID();");
teamStatement.setInt(1, gameID);
teamStatement.setString(2, teamNames.get(i));
teamStatement.setLong(3, chan.getIdLong());
int teamID = teamStatement.executeQuery().getInt(1);
//Creating PLAYERS
for(Member m : teams.get(i)) {
g.addRolesToMember(m, role);
PreparedStatement playerStatement = connexion.prepareStatement("INSERT INTO juliateam_players (memberID,gameID,teamID) VALUES (?,?,?);SELECT LAST_INSERT_ID();");
playerStatement.setLong(1, m.getUser().getIdLong());
playerStatement.setInt(2, gameID);
playerStatement.setInt(3, teamID);
playerStatement.executeQuery();
}
}
} catch (SQLException e) {
System.err.println("Cannot create game : SQL problem");
e.printStackTrace();
}
}
}