L'addon est maintenant fonctionnel, à peu près ^^
This commit is contained in:
parent
a63ee6d908
commit
8da5d0b037
@ -48,8 +48,6 @@ dependencies {
|
||||
|
||||
implementation group: 'org.postgresql', name: 'postgresql', version: '42.2.22'
|
||||
|
||||
implementation group: 'org.reflections', name: 'reflections', version: '0.9.11'
|
||||
|
||||
implementation name:'JuliabotAPI'
|
||||
//implementation name:'JuLSoundbox'
|
||||
|
||||
|
||||
@ -2,9 +2,12 @@ package com.bernard.julianatheme;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target(METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface EventReciever {
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,8 @@ package com.bernard.julianatheme;
|
||||
import java.awt.Color;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@ -11,13 +13,11 @@ import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.reflections.Reflections;
|
||||
import org.reflections.scanners.SubTypesScanner;
|
||||
|
||||
import com.bernard.juliabot.api.Command;
|
||||
import com.bernard.juliabot.api.Discord;
|
||||
import com.bernard.juliabot.api.DiscordCCommande;
|
||||
import com.bernard.juliabot.api.JuLIAddon;
|
||||
import com.bernard.juliabot.api.Trukilie;
|
||||
import com.bernard.julianatheme.JuLIAnatheme.InvalidAnathemDescriptionException;
|
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
@ -28,6 +28,7 @@ import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.events.Event;
|
||||
import net.dv8tion.jda.api.events.GenericEvent;
|
||||
|
||||
@JuLIAddon(name = "julianatheme",devs="Mysaa",version = "20w33a")
|
||||
public class JuliAnathemeManager {
|
||||
@ -36,28 +37,21 @@ public class JuliAnathemeManager {
|
||||
Map<Class<? extends JuLIAnatheme>,Set<JuLIAnatheme>> anathemes = new HashMap<>();
|
||||
|
||||
static Map<String,Class<? extends JuLIAnatheme>> registeredAnathemes = new HashMap<>();
|
||||
static Map<String,String> nomsDAffichage = new HashMap<>();
|
||||
static Map<Class<? extends Event>,Set<Method>> registeredEvents = new HashMap<>();
|
||||
|
||||
public static final String anathemeNamePattern = "^[a-zA-Z0-9_-]*$";
|
||||
|
||||
public JuliAnathemeManager() {
|
||||
System.out.println("Instanciation du manager");
|
||||
try {
|
||||
Class.forName("com.bernard.julianatheme.anathemes.StopTalkingAnatheme");
|
||||
} catch (ClassNotFoundException e) {
|
||||
System.err.println("La classe n'a pas été trouvée.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
//registerAnatheme(StopTalkingAnatheme.NAME, StopTalkingAnatheme.class);
|
||||
reloadAnathemes(); // La commande ne sert à rien
|
||||
}
|
||||
|
||||
@Discord(description="Lance les évents de toutes les malédictions chagées")
|
||||
public void anathemeEvent(Event e){
|
||||
System.out.println("Alors l'event "+e.toString());
|
||||
Set<Method> callList = registeredEvents.getOrDefault(e.getClass(), new HashSet<>()) ;
|
||||
public void anathemeEvent(GenericEvent e){
|
||||
Set<Method> callList = registeredEvents.getOrDefault(e.getClass(), Set.of());
|
||||
for(Method m : callList) {
|
||||
Set<JuLIAnatheme> callObjects = anathemes.getOrDefault(m.getDeclaringClass(), new HashSet<>());
|
||||
Set<JuLIAnatheme> callObjects = anathemes.getOrDefault(m.getDeclaringClass(), Set.of());
|
||||
for(JuLIAnatheme o : callObjects) {
|
||||
try {
|
||||
m.invoke(o, e);
|
||||
@ -69,25 +63,37 @@ public class JuliAnathemeManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void reloadAnathemes() {
|
||||
// La commande n'utilise en réalité pas les paramètres.
|
||||
reloadAnathemes(null);
|
||||
}
|
||||
|
||||
@Command(admin=true,name="reloadAnathemes",description="Recharge la liste des anathèmes")
|
||||
public void reloadAnathemes(DiscordCCommande commande) {
|
||||
// registeredAnathemes.clear();
|
||||
// registeredEvents.clear();
|
||||
// anathemes.clear();
|
||||
public void reloadAnathemes() {
|
||||
nomsDAffichage.clear();
|
||||
registeredAnathemes.clear();
|
||||
registeredEvents.clear();
|
||||
anathemes.clear();
|
||||
|
||||
Reflections r = new Reflections("",new SubTypesScanner(false));
|
||||
Set<Class<? extends JuLIAnatheme>> classes = r.getSubTypesOf(JuLIAnatheme.class);
|
||||
for (Class<? extends JuLIAnatheme> clazz : classes) {
|
||||
try {
|
||||
registerAnatheme(clazz.getField("NAME").get(null).toString(), clazz);
|
||||
} catch (Exception e) {
|
||||
registerAnatheme(clazz.getSimpleName(), clazz);
|
||||
try {
|
||||
ResultSet sqlResult = Trukilie.juliaDB().createStatement()
|
||||
.executeQuery("SELECT nom,classe_java,nom_affichage FROM julianathemes.anathemes");
|
||||
|
||||
while (sqlResult.next()) {
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
Class<? extends JuLIAnatheme> theClass = (Class<? extends JuLIAnatheme>) Class.forName(sqlResult.getString("classe_java"));
|
||||
if(!JuLIAnatheme.class.isAssignableFrom(theClass))
|
||||
throw new ClassNotFoundException(theClass.getName()+" doit étendre la classe JuLIAnatheme !");
|
||||
String theName = sqlResult.getString("nom");
|
||||
String displayName = sqlResult.getString("nom_affichage");
|
||||
|
||||
registerAnatheme(theName, theClass);
|
||||
nomsDAffichage.put(theName, displayName);
|
||||
|
||||
} catch (ClassNotFoundException | ClassCastException e) {
|
||||
System.err.println("Impossible de charger l'anathème associé à "+sqlResult.getString("nom"));
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} catch (SQLException e1) {
|
||||
System.err.println("Impossible de récupérer la liste des anathèmes disponibles.");
|
||||
e1.printStackTrace();
|
||||
}
|
||||
System.out.println("Anathèmes enregistrés: "+registeredAnathemes.keySet());
|
||||
}
|
||||
@ -97,7 +103,7 @@ public class JuliAnathemeManager {
|
||||
|
||||
Message m = commande.getMessage();
|
||||
Guild g = m.getGuild();
|
||||
|
||||
//TODO: Changer pour la super interface dans le Juliaddon
|
||||
if(m.getMentionedUsers().size() < 1) {
|
||||
notifyUser("Il faut notifier l'utilisateur qu vous voulez maudir", m.getAuthor(), m.getChannel());
|
||||
return;
|
||||
@ -108,8 +114,8 @@ public class JuliAnathemeManager {
|
||||
return;
|
||||
}
|
||||
System.out.println("Splitted : "+Arrays.toString(splitted));
|
||||
Member cible = g.getMember(m.getMentionedUsers().get(0));
|
||||
Member source = g.getMember(m.getAuthor());
|
||||
Member cible = g.retrieveMember(m.getMentionedUsers().get(0)).complete();
|
||||
Member source = g.retrieveMember(m.getAuthor()).complete();
|
||||
|
||||
String type = splitted[2];
|
||||
if(!registeredAnathemes.containsKey(type)) {
|
||||
@ -133,7 +139,7 @@ public class JuliAnathemeManager {
|
||||
builder.setTitle("Voila le log :");
|
||||
builder.addField(e.getClass().getCanonicalName(),e.getLocalizedMessage(),false);
|
||||
builder.setColor(Color.red);
|
||||
m.getChannel().sendMessage(builder.build()).complete();
|
||||
m.getChannel().sendMessageEmbeds(builder.build()).complete();
|
||||
return;
|
||||
}
|
||||
try {
|
||||
@ -174,7 +180,7 @@ public class JuliAnathemeManager {
|
||||
notifyUser("Il faut notifier l'utilisateur qu vous voulez 'oracler'", m.getAuthor(), m.getChannel());
|
||||
return;
|
||||
}
|
||||
Member cible = g.getMember(m.getMentionedUsers().get(0));
|
||||
Member cible = g.retrieveMember(m.getMentionedUsers().get(0)).complete();
|
||||
|
||||
Set<JuLIAnatheme> anathemes = new HashSet<>();
|
||||
for(Entry<Class<? extends JuLIAnatheme>,Set<JuLIAnatheme>> anathemez : this.anathemes.entrySet())
|
||||
@ -198,7 +204,7 @@ public class JuliAnathemeManager {
|
||||
for (JuLIAnatheme juLIAnatheme : anathemes) {
|
||||
dumper.addField(juLIAnatheme.getClass().getSimpleName(), juLIAnatheme.dump(), false);
|
||||
}
|
||||
m.getChannel().sendMessage(dumper.build()).complete();
|
||||
m.getChannel().sendMessageEmbeds(dumper.build()).complete();
|
||||
}
|
||||
|
||||
@Command(admin=true,name="exorciser",description="Excorcise une personne (lui enlève sa malediction). Usage 'exorciser <@pseudo> <type>")
|
||||
@ -217,7 +223,7 @@ public class JuliAnathemeManager {
|
||||
return;
|
||||
}
|
||||
System.out.println("Splitted : "+Arrays.toString(splitted));
|
||||
Member cible = g.getMember(m.getMentionedUsers().get(0));
|
||||
Member cible = g.retrieveMember(m.getMentionedUsers().get(0)).complete();
|
||||
|
||||
String type = splitted[2];
|
||||
if(!registeredAnathemes.containsKey(type)) {
|
||||
@ -244,7 +250,6 @@ public class JuliAnathemeManager {
|
||||
|
||||
|
||||
public static void registerAnatheme(String name, Class<? extends JuLIAnatheme> clazz) {
|
||||
System.out.println("Je vais registerer "+name);
|
||||
if(clazz == null) {
|
||||
System.err.println("Bon ben ... j'ajoute aucune classe ...");
|
||||
return;
|
||||
@ -272,10 +277,15 @@ public class JuliAnathemeManager {
|
||||
for(Method m : mtds) {
|
||||
if(m.getAnnotationsByType(EventReciever.class).length > 0) {
|
||||
Class<?>[] pmts = m.getParameterTypes();
|
||||
if(pmts.length != 1 || Event.class.isAssignableFrom(pmts[0])){
|
||||
System.err.println("La methode "+m.getName()+" de la classe "+clazz.getName()+" possède l'annotation EventReciever mais ne possède pas un seul argument de type enfant de Event");
|
||||
System.out.println(Arrays.toString(pmts));
|
||||
if(pmts.length != 1 || (!GenericEvent.class.isAssignableFrom(pmts[0]))){
|
||||
System.err.println("La methode "+m.getName()+" de la classe "+clazz.getName()+" possède l'annotation EventReciever mais ne possède pas un seul argument de type enfant de GenericEvent");
|
||||
return;
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
Class<? extends Event> vraieClasse = (Class<? extends Event>) pmts[0];
|
||||
registeredEvents.putIfAbsent(vraieClasse, new HashSet<>());
|
||||
registeredEvents.get(vraieClasse).add(m);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,6 @@ import java.util.List;
|
||||
|
||||
import com.bernard.julianatheme.EventReciever;
|
||||
import com.bernard.julianatheme.JuLIAnatheme;
|
||||
import com.bernard.julianatheme.JuliAnathemeManager;
|
||||
|
||||
import net.dv8tion.jda.api.MessageBuilder;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
@ -18,12 +17,6 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
|
||||
public class StopTalkingAnatheme extends JuLIAnatheme {
|
||||
|
||||
public static final String NAME = "stopTalking";
|
||||
|
||||
static {
|
||||
JuliAnathemeManager.registerAnatheme(NAME, StopTalkingAnatheme.class);
|
||||
}
|
||||
|
||||
long[] channelsIDs;
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user