Premier commit - Juliabot d'avant
This commit is contained in:
commit
5124a36c7a
BIN
pif/images.png
Normal file
BIN
pif/images.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
306
src/com/bernard/discord/DiscordBot.java
Normal file
306
src/com/bernard/discord/DiscordBot.java
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
package com.bernard.discord;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.bernard.discord.api.Command;
|
||||||
|
import com.bernard.discord.api.DUtils;
|
||||||
|
import com.bernard.discord.struct.CommandMap;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.*;
|
||||||
|
import net.dv8tion.jda.core.entities.*;
|
||||||
|
|
||||||
|
public class DiscordBot {
|
||||||
|
|
||||||
|
// private static DiscordBot julia;
|
||||||
|
|
||||||
|
private JDA jda;
|
||||||
|
private CommandMap commandMap;
|
||||||
|
private Scanner sc;
|
||||||
|
public boolean running;
|
||||||
|
public short countDown;
|
||||||
|
private com.bernard.discord.struct.EventListener listener;
|
||||||
|
private String[] changelog = {
|
||||||
|
// "Patch 20180309 :",
|
||||||
|
// "L'arr<72>t automatique ne se d<>clenche plus apr<70>s un
|
||||||
|
// StatusChangeEvent.",
|
||||||
|
// "Le message d'arr<72>t automatique ne s'envoie plus qu'une fois dans
|
||||||
|
// chaque channel.",
|
||||||
|
// "Une certaine commande changelog aurai <20>t<EFBFBD> ajout<75>, est-ce la
|
||||||
|
// v<EFBFBD>rit<EFBFBD> ?"
|
||||||
|
|
||||||
|
// "Patch 20180330 :", "Le jeu de JuL'IA change selon si elle est en
|
||||||
|
// mode fant<EFBFBD>me ou non.",
|
||||||
|
// "La commande julia a <20>t<EFBFBD> am<61>lior<6F>, mais des r<>glages sur les
|
||||||
|
// proba sont encore <EFBFBD> faire",
|
||||||
|
// "Les logs enl<6E>vent enfin les tags utilisateurs et salons, au
|
||||||
|
// revoir les notifs doublons !!!"};
|
||||||
|
|
||||||
|
"Patch 20180403 :", "Nouvelle commande modif, qui permet de ... modifier",
|
||||||
|
"Les possibilit<69>s offertes par les commandes dlc et sayc sont maintenant prises en charge par dl et say",
|
||||||
|
"Les commandes sont indiqu<71>es et de nombreux autres events ont un nom plus court dans les logs"};
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new DiscordBot("!!", "");
|
||||||
|
// new DiscordBot("::",
|
||||||
|
// "NDM5ODU2MjY3ODc2NjMwNTQ4.DcZQDg.2gV5E-JUMeWYhpVBTLuhtfEJNEo");
|
||||||
|
}
|
||||||
|
|
||||||
|
public DiscordBot(String tag, String token) {
|
||||||
|
try {
|
||||||
|
jda = new JDABuilder(AccountType.BOT)/*
|
||||||
|
* .setStatus(OnlineStatus.
|
||||||
|
* INVISIBLE)
|
||||||
|
*/.setToken(token).buildBlocking();
|
||||||
|
|
||||||
|
Thread.sleep(2000);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
// jda.getPresence().setGame(Game.playing("r<EFBFBD>unir toutes les donn<6E>es,
|
||||||
|
// les donn<EFBFBD>es"));
|
||||||
|
DUtils.init(jda, tag);
|
||||||
|
|
||||||
|
// jda.getPresence().setGame(Game.playing("trier les events"));
|
||||||
|
listener = new com.bernard.discord.struct.EventListener(this);
|
||||||
|
|
||||||
|
// jda.getPresence().setGame(Game.playing("trier les commandes"));
|
||||||
|
commandMap = new CommandMap(this, tag, listener);
|
||||||
|
|
||||||
|
DUtils.loadMaps(commandMap, listener);
|
||||||
|
// String time = DUtils.getTime();
|
||||||
|
// String mess = "----- " + time + " Connexion -----";
|
||||||
|
// DUtils.logS.sendMessage(mess).complete();
|
||||||
|
// DUtils.logE.sendMessage(mess).complete();
|
||||||
|
// DUtils.logV.sendMessage(mess).complete();
|
||||||
|
|
||||||
|
sc = new Scanner(System.in);
|
||||||
|
running = true;
|
||||||
|
countDown = 0;
|
||||||
|
|
||||||
|
jda.addEventListener(listener);
|
||||||
|
// jda.getPresence().setGame(Game.listening("TOUT depuis " + time));
|
||||||
|
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
System.out.println("[" + DUtils.getTime() + "] [Info] [ZLO]: Scanner ready!\n");
|
||||||
|
while(running)
|
||||||
|
if(sc.hasNextLine())
|
||||||
|
commandMap.commandConsole(sc.nextLine());
|
||||||
|
}
|
||||||
|
|
||||||
|
private final String URG = "";
|
||||||
|
|
||||||
|
@Command(name = "stop", group = "Contr<EFBFBD>le", grp = "ctr", description = "Met fin <20> l'ex<65>cution du bot", admin = true)
|
||||||
|
public void stop() {
|
||||||
|
running = false;
|
||||||
|
stop(URG);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop(String message) {
|
||||||
|
// String time = DUtils.getTime();
|
||||||
|
// boolean urg = message == URG;
|
||||||
|
|
||||||
|
// if(urg)
|
||||||
|
// jda.getPresence().setGame(Game.listening("RIEN depuis " + time));
|
||||||
|
|
||||||
|
// String tmessage = "----- " + time + " Arr<72>t " + (urg ? "manuel" :
|
||||||
|
// ("automatique --- " + message)) + " -----";
|
||||||
|
// DUtils.logS.sendMessage(tmessage).complete();
|
||||||
|
// DUtils.logE.sendMessage(tmessage).complete();
|
||||||
|
// DUtils.logV.sendMessage(tmessage).complete();
|
||||||
|
|
||||||
|
jda.shutdownNow();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Command(name = "changelog", group = "Contr<EFBFBD>le", grp = "ctr", description
|
||||||
|
// = "Donne des informations utiles sur la version de l'instance lanc<6E>e.",
|
||||||
|
// admin = true)
|
||||||
|
// public void changelog(TextChannel channel) throws InterruptedException {
|
||||||
|
// sendWithDelay(channel, changelog);
|
||||||
|
// }
|
||||||
|
|
||||||
|
public static void sendWithDelay(MessageChannel channel, String... messages) {
|
||||||
|
try {
|
||||||
|
for(String message : messages) {
|
||||||
|
channel.sendTyping().complete();
|
||||||
|
Thread.sleep(message.length() * 75);
|
||||||
|
channel.sendMessage(message).complete();
|
||||||
|
}
|
||||||
|
} catch(InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kick Members 1 2 Add Reactions 6 64 View Audit Logs 7 128 Read Text
|
||||||
|
* Channels & See Voice Channels 10 1024 Read Messages 10 1024 Send Messages
|
||||||
|
* 11 2048 Send TTS Messages 12 4096 Manage Messages 13 8192 Embed Links 14
|
||||||
|
* 16384 Attach Files 15 32768 Read History 16 65536 Mention Everyone 17
|
||||||
|
* 131072 Use External Emojis 18 262144 Connect 20 1048576 Speak 21 2097152
|
||||||
|
* Mute Members 22 4194304 Deafen Members 23 8388608 Move Members 24
|
||||||
|
* 16777216 Use Voice Activity 25 33554432 Change Nickname 26 67108864
|
||||||
|
* Manage Roles 28 268435456 Manage Permissions 28 268435456 Manage Webhooks
|
||||||
|
* 29 536870912 Manage Emojis 30 1073741824
|
||||||
|
*/
|
||||||
|
// @Command(name = "tts", group = "Contr<EFBFBD>le", grp = "ctr", description =
|
||||||
|
// "Oula... faut pas que tu lise <20>a hein, c'est dangereux hein. ET
|
||||||
|
// TECHNIQUEMENT IMPOSSIBLE. Mais <EFBFBD>a c'est pas important.", admin = true)
|
||||||
|
// public void test(User user, Member member, MessageChannel channel, Guild
|
||||||
|
// guild, String[] args) throws InterruptedException {
|
||||||
|
//// if(member.getUser().getIdLong() != 232545563407548416L)
|
||||||
|
//// return;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// MessageBuilder mb = new MessageBuilder();
|
||||||
|
// mb.setTTS(true);
|
||||||
|
// for(String arg : args)
|
||||||
|
// mb.append(arg).append(" ");
|
||||||
|
// Message m = mb.build();
|
||||||
|
//// guild.getController().setNickname(guild.getSelfMember(),
|
||||||
|
// "MEE6").complete();
|
||||||
|
//// guild.getTextChannelById(222947179017404416L).sendMessage(m).complete().delete().complete();
|
||||||
|
// guild.getController().setNickname(guild.getSelfMember(),
|
||||||
|
// "JuL'IA").complete();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// @Command(name = "pool", group = "Contr<EFBFBD>le", grp = "ctr", description =
|
||||||
|
// "Oula... faut pas que tu lise <20>a hein, c'est dangereux hein. ET
|
||||||
|
// TECHNIQUEMENT IMPOSSIBLE. Mais <EFBFBD>a c'est pas important.", admin = false)
|
||||||
|
// public void pool(Member member, MessageChannel channel, Guild guild,
|
||||||
|
// String[] args) throws InterruptedException {
|
||||||
|
// if(member.getUser().getIdLong() != 232545563407548416L) {
|
||||||
|
// String message = "Zone dangeureuse, travaux en cours.";
|
||||||
|
// channel.sendTyping().complete();
|
||||||
|
// channel.sendMessage(message).completeAfter(message.length() * 75,
|
||||||
|
// TimeUnit.MILLISECONDS).delete().completeAfter(message.length() * 225,
|
||||||
|
// TimeUnit.MILLISECONDS);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// for(AuditLogEntry entry : guild.getAuditLogs())
|
||||||
|
// s.append(entry.getUser().getName()).append(" ");
|
||||||
|
// channel.sendMessage(s.toString()).complete();
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
// boolean top = false;
|
||||||
|
//
|
||||||
|
// @Command(name = "loop", group = "Contr<EFBFBD>le", grp = "ctr", description =
|
||||||
|
// "Oula... faut pas que tu lise <20>a hein, c'est dangereux hein. ET
|
||||||
|
// TECHNIQUEMENT IMPOSSIBLE. Mais <EFBFBD>a c'est pas important.", admin = false)
|
||||||
|
// public void loop(Member member, MessageChannel channel, Guild guild,
|
||||||
|
// String[] args) throws InterruptedException {
|
||||||
|
// if(member.getUser().getIdLong() != 232545563407548416L) {
|
||||||
|
// String message = "Zone dangeureuse, travaux en cours.";
|
||||||
|
// channel.sendTyping().complete();
|
||||||
|
// channel.sendMessage(message).completeAfter(message.length() * 75,
|
||||||
|
// TimeUnit.MILLISECONDS).delete().completeAfter(message.length() * 225,
|
||||||
|
// TimeUnit.MILLISECONDS);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// top = true;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Member m = guild.getMemberById(187677269626585089L);
|
||||||
|
//
|
||||||
|
// VoiceChannel v1 = guild.getVoiceChannelById(356199104357072907L);
|
||||||
|
// VoiceChannel v2 = guild.getVoiceChannelById(358622259918798859L);
|
||||||
|
// while(top) {
|
||||||
|
// Thread.sleep(250);
|
||||||
|
// guild.getController().moveVoiceMember(m, v1).queue();
|
||||||
|
// Thread.sleep(250);
|
||||||
|
// guild.getController().moveVoiceMember(m, v2).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "truth", group = "Contr<EFBFBD>le", grp = "ctr", description =
|
||||||
|
// "Oula... faut pas que tu lise <20>a hein, c'est dangereux hein. ET
|
||||||
|
// TECHNIQUEMENT IMPOSSIBLE. Mais <EFBFBD>a c'est pas important.", admin = false)
|
||||||
|
// public void truth(Member member, MessageChannel channel, Guild guild,
|
||||||
|
// String[] args) throws InterruptedException {
|
||||||
|
// top = false;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "zulu", group = "Contr<EFBFBD>le", grp = "ctr", description =
|
||||||
|
// "Oula... faut pas que tu lise <20>a hein, c'est dangereux hein. ET
|
||||||
|
// TECHNIQUEMENT IMPOSSIBLE. Mais <EFBFBD>a c'est pas important.", admin = false)
|
||||||
|
// public void zulu(Member member, MessageChannel channel, Guild guild,
|
||||||
|
// String[] args) throws InterruptedException {
|
||||||
|
// if(member.getUser().getIdLong() != 232545563407548416L)
|
||||||
|
// return;
|
||||||
|
// for(Category ca : guild.getCategories()) {
|
||||||
|
// System.out.println(ca.getName());
|
||||||
|
// for(Channel c : ca.getChannels()) {
|
||||||
|
// System.out.println("\t" + c.getName());
|
||||||
|
// for(Member m : c.getMembers()) {
|
||||||
|
// System.out.println("\t\t" + m.getEffectiveName());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void test1(User user, MessageChannel channel, Guild guild,
|
||||||
|
// String[] args) throws InterruptedException {
|
||||||
|
// if(user.getIdLong() != 232545563407548416L) {
|
||||||
|
// String message = "Zone dangeureuse, travaux en cours.";
|
||||||
|
// channel.sendTyping().complete();
|
||||||
|
// channel.sendMessage(message).completeAfter(message.length() * 75,
|
||||||
|
// TimeUnit.MILLISECONDS).delete().completeAfter(message.length() * 225,
|
||||||
|
// TimeUnit.MILLISECONDS);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// List<Message> rh = channel.getHistoryBefore(args[0],
|
||||||
|
// Integer.parseInt(args[1])).complete().getRetrievedHistory();
|
||||||
|
// StringBuilder sb = new StringBuilder("```\n");
|
||||||
|
//
|
||||||
|
// for(Message m : rh)
|
||||||
|
// m.delete().complete();
|
||||||
|
// // try {
|
||||||
|
// // for(int i = 0; i < rh.size(); i++) {
|
||||||
|
// // System.out.println(i);
|
||||||
|
// // String m = rh.get(i).getId()+" :
|
||||||
|
// // "+rh.get(i).getContent().replaceAll("```", "'''").replaceAll("\n", "
|
||||||
|
// // \\\\n ")+"\n";
|
||||||
|
// // if(sb.length()+m.length() > 1997) {
|
||||||
|
// // channel.sendMessage(sb.append("```").toString()).complete();
|
||||||
|
// // sb.setLength(0);
|
||||||
|
// // sb.append("```\n");
|
||||||
|
// // } sb.append(m);
|
||||||
|
// // }channel.sendMessage(sb.append("```").toString()).complete();
|
||||||
|
// // } catch (IllegalArgumentException e) {
|
||||||
|
// // System.out.println(sb.toString());
|
||||||
|
// // }
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Command(name = "dllasts", group = "Contr<EFBFBD>le", grp = "ctr", description = "", admin = true)
|
||||||
|
public void dllast(MessageChannel channel, User user, String[] args) {
|
||||||
|
if(user.getIdLong() != 232545563407548416L)
|
||||||
|
return;
|
||||||
|
|
||||||
|
List<Message> l = channel.getIterableHistory().complete();
|
||||||
|
|
||||||
|
int first = 0;
|
||||||
|
for(int i = 0; i < l.size(); i++)
|
||||||
|
if(l.get(i).getId().equals(args[0])) {
|
||||||
|
first = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for(int i = first; i < l.size() && i < first + Integer.parseInt(args[1]); i++) {
|
||||||
|
try {
|
||||||
|
Message m = l.get(i);
|
||||||
|
m.delete().complete();
|
||||||
|
Thread.sleep(400);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
168
src/com/bernard/discord/addons/Basics.java
Normal file
168
src/com/bernard/discord/addons/Basics.java
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
package com.bernard.discord.addons;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.bernard.discord.api.Command;
|
||||||
|
import com.bernard.discord.api.DUtils;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.client.managers.EmoteManager;
|
||||||
|
import net.dv8tion.jda.core.entities.*;
|
||||||
|
import net.dv8tion.jda.core.requests.Route.Emotes;
|
||||||
|
|
||||||
|
public class Basics {
|
||||||
|
|
||||||
|
// ----- POUVOIR ----- \\
|
||||||
|
|
||||||
|
// @Command(name = "modif", group = "Contrôle", grp = "ctr", description = "Modifie un message", admin = true)
|
||||||
|
// public void modif(String[] args, TextChannel thisChannel) {
|
||||||
|
// boolean cVersion = false;
|
||||||
|
// TextChannel channel = null;
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
// channel = DUtils.server.getTextChannelById(args[0]);
|
||||||
|
// channel.toString();
|
||||||
|
// } catch(Exception e) {
|
||||||
|
// if(channel == null) {
|
||||||
|
// channel = thisChannel;
|
||||||
|
// cVersion = true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// for(int i = cVersion ? 1 : 2; i < args.length; i++)
|
||||||
|
// sb.append(args[i] + " ");
|
||||||
|
// String message = sb.toString();
|
||||||
|
//
|
||||||
|
// channel.getMessageById(args[cVersion ? 0 : 1]).complete().editMessage(message).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "say", group = "Contrôle", grp = "ctr", description = "Envoie un message", admin = true)
|
||||||
|
// public void say(String[] args, TextChannel thisChannel) {
|
||||||
|
// boolean cVersion = false;
|
||||||
|
// TextChannel channel = null;
|
||||||
|
// try {
|
||||||
|
// channel = DUtils.server.getTextChannelById(args[0]);
|
||||||
|
// channel.toString();
|
||||||
|
// } catch(Exception e) {
|
||||||
|
// if(channel == null) {
|
||||||
|
// channel = thisChannel;
|
||||||
|
// cVersion = true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// for(int i = cVersion ? 0 : 1; i < args.length; i++)
|
||||||
|
// sb.append(args[i] + " ");
|
||||||
|
// String message = sb.toString();
|
||||||
|
//
|
||||||
|
// DiscordBot.sendWithDelay(channel, message);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "dl", group = "Contrôle", grp = "ctr", description = "Efface un message", admin = true)
|
||||||
|
// public void dl(String[] args, TextChannel thisChannel) {
|
||||||
|
// boolean cVersion = false;
|
||||||
|
// TextChannel channel = null;
|
||||||
|
// try {
|
||||||
|
// channel = DUtils.server.getTextChannelById(args[0]);
|
||||||
|
// channel.toString();
|
||||||
|
// } catch(Exception e) {
|
||||||
|
// if(channel == null) {
|
||||||
|
// channel = thisChannel;
|
||||||
|
// cVersion = true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// channel.getMessageById(args[cVersion ? 0 : 1]).complete().delete().complete();
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Command(name = "rea", group = "Contrôle", grp = "ctr", description = "Ajoute une réaction", admin = true)
|
||||||
|
public void rea(String[] args, Guild guild, MessageChannel thischan, Message message) {
|
||||||
|
// List<Emote> emotes = guild.getEmotes();
|
||||||
|
//
|
||||||
|
// for(Emote emote : emotes)
|
||||||
|
// System.out.println(emote.getId()+" : "+emote.getName());
|
||||||
|
|
||||||
|
boolean cVersion = false;
|
||||||
|
MessageChannel channel = null;
|
||||||
|
try {
|
||||||
|
channel = DUtils.server.getTextChannelById(args[0]);
|
||||||
|
channel.toString();
|
||||||
|
} catch(Exception e) {
|
||||||
|
if(channel == null) {
|
||||||
|
channel = thischan;
|
||||||
|
cVersion = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// for(char c : message.getContent().toCharArray())
|
||||||
|
// System.out.println(c + " : " + (int)c);
|
||||||
|
|
||||||
|
// int[] wow = new int[]{55358,56614,55357,56489,55356,57185,55356,57246,55357,56446,55357,56875,55357,56495,55357,56396,55357,56697,55356,57241,11093,55357,56601,55357,56604,55357,56865};
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// for(int i = 0; i < wow.length/2; i++)
|
||||||
|
// sb.append((char)wow[2*i]).append("+").append((char)wow[2*i+1]).append("=").append((char)wow[2*i]).append((char)wow[2*i+1]).append("\n");
|
||||||
|
// channel.sendMessage(sb.toString()).complete();
|
||||||
|
|
||||||
|
// channel.getMessageById(args[cVersion ? 0 : 1]).complete().addReaction(guild.getEmotesByName(args[cVersion ? 1 : 2], true).get(0)).complete();
|
||||||
|
// channel.getMessageById(args[cVersion ? 0 : 1]).complete().addReaction(message.getEmotes().get(0)).complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "inttochar", group = "", grp = "", description = "", admin = true)
|
||||||
|
public void inttochar(String[] args, Guild guild, MessageChannel chan, Message message) {
|
||||||
|
|
||||||
|
String[] ints = message.getContent().split("!!inttochar ")[1].split(", ");
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
inttocharParser(sb, ints[0]);
|
||||||
|
for(int i = 1; i < ints.length; i++){
|
||||||
|
sb.append(", ");
|
||||||
|
inttocharParser(sb, ints[i]);
|
||||||
|
}
|
||||||
|
chan.sendMessage(sb.toString()).complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void inttocharParser(StringBuilder sb, String s) {
|
||||||
|
sb.append(s).append(" = ");
|
||||||
|
if(s.contains("..")) {
|
||||||
|
int from = Integer.parseInt(s.split("\\.\\.")[0]);
|
||||||
|
int to = Integer.parseInt(s.split("\\.\\.")[1]);
|
||||||
|
int step = from < to ? 1 : -1;
|
||||||
|
sb.append("{").append((char)from);
|
||||||
|
for(int j = from+step; j < to; j+=step)
|
||||||
|
sb.append(", ").append((char)j);
|
||||||
|
sb.append("}");
|
||||||
|
}else
|
||||||
|
|
||||||
|
sb.append((char)Integer.parseInt(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----- ETAT ----- \\
|
||||||
|
|
||||||
|
// @Command(name = "show", group = "Contrôle", grp = "ctr", description = "Inverse le status en ligne du bot", admin = true)
|
||||||
|
// public void show(JDA jda) {
|
||||||
|
// Presence wow = jda.getPresence();
|
||||||
|
// if(wow.getStatus() == OnlineStatus.INVISIBLE)
|
||||||
|
// wow.setStatus(OnlineStatus.ONLINE);
|
||||||
|
// else
|
||||||
|
// wow.setStatus(OnlineStatus.INVISIBLE);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "game", group = "Contrôle", grp = "ctr", description = "Change le jeu courant", admin = true)
|
||||||
|
// public void game(JDA jda, String[] args) {
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// for(String arg : args)
|
||||||
|
// sb.append(arg).append(" ");
|
||||||
|
// jda.getPresence().setGame(Game.playing(sb.toString()));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "julia", group = "Contrôle", grp = "ctr", description = "Répond à l'appel", admin = true)
|
||||||
|
// public void julia(MessageChannel channel, User user) {
|
||||||
|
// String[] julias = new String[]{"Présent !", "Présente !", "Présentbleu !", "Présentavion !", "Présent(e) !", "Présent(bleu) !",
|
||||||
|
// "Présent(avion) !", "Présent(e)(bleu) !", "Présent(e)(avion) !", "Présent(bleu)(avion) !", "Présent(e)(bleu)(avion) !",
|
||||||
|
// "Oui, c'est moi", user.getName(), "ailuJ", "42 ... oups", "C'est à moi que tu parle ?!", "Entrez c'est ouvert", "Derrière toi !!!",
|
||||||
|
// "J'ai tujorous pas cropmis a qoui ca sret l'otrahhgrope ...", "Laissez moi préparer la domination du monde en paix s'il vous plaît !",
|
||||||
|
// "Je SuIS Un RObot BZzzBzZZZbZZbZZ", "Juliaaaa dadedidadeda dedadedi dadeda", "Tutturu", "Tadaaaaaaa !"};
|
||||||
|
// String[] out = new String[]{julias[(int)Math.floor(Math.random() * julias.length)]};
|
||||||
|
//
|
||||||
|
// DiscordBot.sendWithDelay(channel, out);
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
126
src/com/bernard/discord/addons/Lists.java
Normal file
126
src/com/bernard/discord/addons/Lists.java
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
package com.bernard.discord.addons;
|
||||||
|
|
||||||
|
public class Lists {
|
||||||
|
|
||||||
|
// @Command(name = "roleColor", group = "Liste", grp = "lst", description = "Composante de la couleur d'un role, a partir d'une mention de ce role, ou d'un membre ayant ce role comme principal", admin = true)
|
||||||
|
// public void roleColor(Guild guild, MessageChannel channel, Message message) {
|
||||||
|
// List<Role> roles = message.getMentionedRoles();
|
||||||
|
// if(roles.size() == 0) {
|
||||||
|
// List<User> users = message.getMentionedUsers();
|
||||||
|
// if(users.size() == 0)
|
||||||
|
// return;
|
||||||
|
// roles = guild.getMember(users.get(0)).getRoles();
|
||||||
|
// if(roles.size() == 0)
|
||||||
|
// System.out.println("AAAAAAA");
|
||||||
|
// }
|
||||||
|
// Role role = roles.get(0);
|
||||||
|
// Color color = role.getColor();
|
||||||
|
//
|
||||||
|
// float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), (float[])null);
|
||||||
|
//
|
||||||
|
// EmbedBuilder builder = new EmbedBuilder();
|
||||||
|
// builder.setTitle("Color of " + role.getName());
|
||||||
|
// builder.setColor(color);
|
||||||
|
//
|
||||||
|
// builder.addField("", "", false);
|
||||||
|
// builder.addField(":closed_book:Red", "" + color.getRed(), true);
|
||||||
|
// builder.addField(":green_book:Green", "" + color.getGreen(), true);
|
||||||
|
// builder.addField(":blue_book:Blue", "" + color.getBlue(), true);
|
||||||
|
//
|
||||||
|
// builder.addField("", "", false);
|
||||||
|
// builder.addField(":rainbow:Hue", "" + hsb[0] * 360, true);
|
||||||
|
// builder.addField(":performing_arts:Saturation", "" + hsb[1], true);
|
||||||
|
// builder.addField(":flashlight:Brightness", "" + hsb[2], true);
|
||||||
|
//
|
||||||
|
// channel.sendMessage(builder.build()).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "users", group = "Liste", grp = "lst", description = "Liste les membres suivant leur id", admin = true)
|
||||||
|
// public void users(Guild guild, MessageChannel channel) {
|
||||||
|
// EmbedBuilder builder = new EmbedBuilder();
|
||||||
|
// List<Member> ms = guild.getMembers(), members = new ArrayList<Member>(ms);
|
||||||
|
//
|
||||||
|
// members.sort(new MemberByIDComparator());
|
||||||
|
// builder.setTitle("Liste des membres du serveur");
|
||||||
|
//
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// for(int i = 0; i < members.size(); i++)
|
||||||
|
// sb.append(members.get(i).getUser().getId() + " \"" + members.get(i).getEffectiveName() + "\"\n");
|
||||||
|
//
|
||||||
|
// builder.addField("", sb.toString(), true);
|
||||||
|
// builder.setColor(DUtils.color);
|
||||||
|
//
|
||||||
|
// channel.sendMessage(builder.build()).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "rolesID", group = "Liste", grp = "lst", description = "Liste les rôles suivant leur ID", admin = true)
|
||||||
|
// public void rolesID(Guild guild, MessageChannel channel) {
|
||||||
|
// EmbedBuilder builder = new EmbedBuilder();
|
||||||
|
// List<Role> ms = guild.getRoles(), roles = new ArrayList<Role>(ms);
|
||||||
|
//
|
||||||
|
// roles.sort(new RolesByIDComparator());
|
||||||
|
// builder.setTitle("Liste des rôles du serveur");
|
||||||
|
//
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// for(int i = 0; i < roles.size(); i++) {
|
||||||
|
// String roleName = roles.get(i).getName();
|
||||||
|
// sb.append(roles.get(i).getIdLong() + " \"" + (roleName.startsWith("@") ? "everyone" : roleName) + "\"\n");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// builder.addField("", sb.toString(), true);
|
||||||
|
// builder.setColor(DUtils.color);
|
||||||
|
//
|
||||||
|
// channel.sendMessage(builder.build()).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "rolesRank", group = "Liste", grp = "lst", description = "Liste les rôles suivant leur rang", admin = true)
|
||||||
|
// public void rolesRank(Guild guild, MessageChannel channel) {
|
||||||
|
// EmbedBuilder builder = new EmbedBuilder();
|
||||||
|
// List<Role> ms = guild.getRoles(), roles = new ArrayList<Role>(ms);
|
||||||
|
//
|
||||||
|
// roles.sort(new RolesByRankComparator());
|
||||||
|
// builder.setTitle("Liste des rôles du serveur");
|
||||||
|
//
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// for(int i = 0; i < roles.size(); i++) {
|
||||||
|
// String roleName = roles.get(i).getName();
|
||||||
|
// sb.append(roles.get(i).getPosition() + " \"" + (roleName.startsWith("@") ? "everyone" : roleName) + "\"\n");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// builder.addField("", sb.toString(), true);
|
||||||
|
// builder.setColor(DUtils.color);
|
||||||
|
//
|
||||||
|
// channel.sendMessage(builder.build()).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public class MemberByIDComparator implements Comparator<Member> {
|
||||||
|
//
|
||||||
|
// public int compare(Member o1, Member o2) {
|
||||||
|
// if(o1.getUser().getIdLong() > o2.getUser().getIdLong())
|
||||||
|
// return 1;
|
||||||
|
// return -1;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public class RolesByIDComparator implements Comparator<Role> {
|
||||||
|
//
|
||||||
|
// public int compare(Role o1, Role o2) {
|
||||||
|
// if(o1.getIdLong() > o2.getIdLong())
|
||||||
|
// return 1;
|
||||||
|
// return -1;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public class RolesByRankComparator implements Comparator<Role> {
|
||||||
|
//
|
||||||
|
// public int compare(Role o1, Role o2) {
|
||||||
|
// if(o1.getPosition() > o2.getPosition())
|
||||||
|
// return 1;
|
||||||
|
// return -1;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
}
|
||||||
170
src/com/bernard/discord/addons/Logs.java
Normal file
170
src/com/bernard/discord/addons/Logs.java
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
package com.bernard.discord.addons;
|
||||||
|
|
||||||
|
import com.bernard.discord.api.DUtils;
|
||||||
|
|
||||||
|
public class Logs {
|
||||||
|
|
||||||
|
// public long previousEventID;
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte un message serveur pour le mettre dans les logs")
|
||||||
|
// public void guildReceived(GuildMessageReceivedEvent event) {
|
||||||
|
// String eventName;
|
||||||
|
// if(EventListener.commandIDs.contains(event.getMessage().getIdLong())) {
|
||||||
|
// eventName = "CommandReceived";
|
||||||
|
// int index = EventListener.commandIDs.indexOf(event.getMessageIdLong());
|
||||||
|
// EventListener.commandIDs.remove(index);
|
||||||
|
// } else
|
||||||
|
// eventName = "MessageReceived";
|
||||||
|
//
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, eventName);
|
||||||
|
// load(s, "user", event.getAuthor().getName());
|
||||||
|
// load(s, "chan", event.getChannel().getName());
|
||||||
|
// load(s, "mess", event.getMessage().getContent());
|
||||||
|
// sendE(s);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte la modification d'un message serveur pour le mettre dans les logs")
|
||||||
|
// public void guildUpdate(GuildMessageUpdateEvent event) {
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, "MessageUpdate");
|
||||||
|
// load(s, "user", event.getAuthor().getName());
|
||||||
|
// load(s, "chan", event.getChannel().getName());
|
||||||
|
// load(s, "mess", event.getMessage().getContent());
|
||||||
|
// sendE(s);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte la supression d'un message serveur pour le mettre dans les logs")
|
||||||
|
// public void guildDelete(GuildMessageDeleteEvent event) {
|
||||||
|
//
|
||||||
|
// if(EventListener.deleteIDs.contains(event.getMessageIdLong())) {
|
||||||
|
// int index = EventListener.deleteIDs.indexOf(event.getMessageIdLong());
|
||||||
|
// EventListener.deleteIDs.remove(index);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, "MessageDelete");
|
||||||
|
// load(s, "chan", event.getChannel().getName());
|
||||||
|
// sendE(s);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte une arrivée dans un salon vocal pour le mettre dans les logs")
|
||||||
|
// public void voiceJoin(GuildVoiceJoinEvent event) {
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, "GuildVoiceJoin");
|
||||||
|
// load(s, "user", event.getMember().getUser().getName());
|
||||||
|
// load(s, "chan", event.getChannelJoined().getName());
|
||||||
|
// sendV(s);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte un changement de salon vocal pour le mettre dans les logs")
|
||||||
|
// public void voiceMove(GuildVoiceMoveEvent event) {
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, "VocalMove");
|
||||||
|
// load(s, "user", event.getMember().getUser().getName());
|
||||||
|
// load(s, "left", event.getChannelLeft().getName());
|
||||||
|
// load(s, "join", event.getChannelJoined().getName());
|
||||||
|
// sendV(s);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte un départ de salon vocal pour le mettre dans les logs")
|
||||||
|
// public void voiceLeave(GuildVoiceLeaveEvent event) {
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, "VocalLeave");
|
||||||
|
// load(s, "user", event.getMember().getUser().getName());
|
||||||
|
// load(s, "chan", event.getChannelLeft().getName());
|
||||||
|
// sendV(s);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte un changement de status pour le mettre dans les logs")
|
||||||
|
// public void statusUpdate(UserOnlineStatusUpdateEvent event) {
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, "StatusUpdate");
|
||||||
|
// load(s, "user", event.getUser().getName());
|
||||||
|
// load(s, "old", event.getPreviousOnlineStatus());
|
||||||
|
// load(s, "new", event.getGuild().getMember(event.getUser()).getOnlineStatus());
|
||||||
|
// sendS(s);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Discord(description = "Détecte un changement de jeu pour le mettre dans les logs")
|
||||||
|
// public void gameUpdate(UserGameUpdateEvent event) {
|
||||||
|
// StringBuilder s = new StringBuilder();
|
||||||
|
// load(s, DUtils.getTime());
|
||||||
|
// load(s, event.getResponseNumber());
|
||||||
|
// load(s, "GameUpdate");
|
||||||
|
// load(s, "user", event.getUser().getName());
|
||||||
|
//
|
||||||
|
// Game old = event.getPreviousGame();
|
||||||
|
// if(old != null)
|
||||||
|
// load(s, "old", old.getName());
|
||||||
|
//
|
||||||
|
// Game nev = event.getGuild().getMember(event.getUser()).getGame();
|
||||||
|
// if(nev != null)
|
||||||
|
// load(s, "new", nev.getName());
|
||||||
|
//
|
||||||
|
// sendS(s);
|
||||||
|
// }
|
||||||
|
|
||||||
|
private void load(StringBuilder s, Object value) {
|
||||||
|
if(s.length() != 0)
|
||||||
|
separ(s);
|
||||||
|
if(value != null)
|
||||||
|
s.append(value);
|
||||||
|
else
|
||||||
|
s.append("null");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void load(StringBuilder s, String name, Object value) {
|
||||||
|
if(s.length() != 0)
|
||||||
|
separ(s);
|
||||||
|
s.append(name).append("=");
|
||||||
|
if(value != null)
|
||||||
|
s.append(value);
|
||||||
|
else
|
||||||
|
s.append("null");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void separ(StringBuilder s) {
|
||||||
|
s.append(", ");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendE(StringBuilder s) {
|
||||||
|
if(s.length() > 1950) {
|
||||||
|
int length = s.length();
|
||||||
|
s.setLength(1950);
|
||||||
|
s.append("...\"");
|
||||||
|
load(s, "length", length);
|
||||||
|
}
|
||||||
|
DUtils.logE.sendMessage(s.toString()).queue();
|
||||||
|
System.out.println(s.toString());
|
||||||
|
s.setLength(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendV(StringBuilder s) {
|
||||||
|
DUtils.logV.sendMessage(s.toString()).queue();
|
||||||
|
System.out.println(s.toString());
|
||||||
|
s.setLength(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendS(StringBuilder s) {
|
||||||
|
DUtils.logS.sendMessage(s.toString()).queue();
|
||||||
|
System.out.println(s.toString());
|
||||||
|
s.setLength(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
157
src/com/bernard/discord/addons/MegaNumber.java
Normal file
157
src/com/bernard/discord/addons/MegaNumber.java
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
package com.bernard.discord.addons;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
import com.bernard.discord.api.Command;
|
||||||
|
import com.bernard.meganumber.arithmetic.MegaN;
|
||||||
|
import com.bernard.meganumber.arithmetic.RadixConversion;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.MessageChannel;
|
||||||
|
|
||||||
|
public class MegaNumber {
|
||||||
|
|
||||||
|
private static RadixConversion converter = new RadixConversion();
|
||||||
|
|
||||||
|
@Command(name = "calct", group = "MegaNumber", grp = "mn", description = "Comprends un calcul et en fournit le résultat. Elements actuellement compris :\n"
|
||||||
|
+ "\t- Sommes et produits explicites\n" + "\t- Entiers naturels en développement décimal propre\n"
|
||||||
|
+ "\t- Système de parenthésages corrects", admin = false)
|
||||||
|
public void calct(MessageChannel channel, String[] args) {
|
||||||
|
try {
|
||||||
|
String su = args[0];
|
||||||
|
for(int i = 1; i < args.length; i++)
|
||||||
|
su += " " + args[i];
|
||||||
|
String s = su.replaceAll("\\(", " ( ");
|
||||||
|
s = s.replaceAll("\\)", " ) ");
|
||||||
|
s = s.replaceAll("\\*", " * ");
|
||||||
|
s = s.replaceAll("\\+", " + ");
|
||||||
|
s = s.replaceAll("\\^", " ^ ");
|
||||||
|
String ss = "";
|
||||||
|
while(!ss.equals(s)) {
|
||||||
|
ss = s;
|
||||||
|
s = s.replaceAll(" ", " ");
|
||||||
|
}
|
||||||
|
String[] tokens = s.split(" ");
|
||||||
|
ArrayList<String> liste = new ArrayList<String>();
|
||||||
|
for(int i = 0; i < tokens.length; i++)
|
||||||
|
liste.add(tokens[i]);
|
||||||
|
|
||||||
|
Stack<String> operator = new Stack<String>();
|
||||||
|
Stack<Object> out = new Stack<Object>();
|
||||||
|
boolean prio = false;
|
||||||
|
|
||||||
|
for(int i = 0; i < liste.size(); i++) {
|
||||||
|
|
||||||
|
String token = liste.get(i);
|
||||||
|
|
||||||
|
if(!operator.isEmpty()) {
|
||||||
|
if("+".equals(token) && "*".equals(operator.peek()) || "*".equals(token) && "^".equals(operator.peek()) || "+".equals(token)
|
||||||
|
&& "^".equals(operator.peek())) {
|
||||||
|
out.push(operator.pop());
|
||||||
|
operator.push(token);
|
||||||
|
prio = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!prio)
|
||||||
|
try {
|
||||||
|
MegaN n = new MegaN(token);
|
||||||
|
out.push(n);
|
||||||
|
} catch(NumberFormatException nfe) {
|
||||||
|
if(")".equals(token)) {
|
||||||
|
while(!"(".equals(operator.peek()))
|
||||||
|
out.push(operator.pop());
|
||||||
|
|
||||||
|
operator.pop();
|
||||||
|
} else
|
||||||
|
operator.push(token);
|
||||||
|
}
|
||||||
|
prio = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(operator.isEmpty() == false)
|
||||||
|
if(")".equals(operator.peek()) || "(".equals(operator.peek()))
|
||||||
|
operator.pop();
|
||||||
|
else
|
||||||
|
out.push(operator.pop());
|
||||||
|
|
||||||
|
Stack<Object> out2 = new Stack<Object>();
|
||||||
|
while(out.size() > 0)
|
||||||
|
out2.push(out.pop());
|
||||||
|
|
||||||
|
Stack<MegaN> out3 = new Stack<MegaN>();
|
||||||
|
while(out2.size() > 0)
|
||||||
|
if(out2.peek() instanceof MegaN)
|
||||||
|
out3.push((MegaN)out2.pop());
|
||||||
|
else {
|
||||||
|
String ope = "" + out2.pop();
|
||||||
|
if(ope.equals("+")) {
|
||||||
|
MegaN n2 = out3.pop();
|
||||||
|
MegaN n1 = out3.pop();
|
||||||
|
MegaN n3 = MegaN.add(n1, n2);
|
||||||
|
// System.out.println(n1+" + "+n2+" = "+n3);
|
||||||
|
out3.push(n3);
|
||||||
|
} else if(ope.equals("*")) {
|
||||||
|
MegaN n2 = out3.pop();
|
||||||
|
MegaN n1 = out3.pop();
|
||||||
|
MegaN n3 = MegaN.mul(n1, n2);
|
||||||
|
// System.out.println(n1+" * "+n2+" = "+n3);
|
||||||
|
out3.push(n3);
|
||||||
|
} else if(ope.equals("^")) {
|
||||||
|
MegaN n2 = out3.pop();
|
||||||
|
MegaN n1 = out3.pop();
|
||||||
|
MegaN n3 = MegaN.pow(n1, n2);
|
||||||
|
// System.out.println(n1+" ^ "+n2+" = "+n3);
|
||||||
|
out3.push(n3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
channel.sendMessage(su.replaceAll("\\*", "\\\\*") + " = " + out3.peek().toString()).complete();
|
||||||
|
} catch(Exception e) {
|
||||||
|
System.err.println("calc");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Command(name = "add", group = "MegaNumber", grp = "mn", description = "Additionne les entiers en arguments", admin = false)
|
||||||
|
// public void add(String[] args, MessageChannel channel) {
|
||||||
|
// MegaN[] ns = new MegaN[args.length];
|
||||||
|
// ns[0] = new MegaN(args[0]);
|
||||||
|
// StringBuilder sb = new StringBuilder(args[0]);
|
||||||
|
// for(int i = 1; i < args.length; i++) {
|
||||||
|
// sb.append(" + ").append(args[i]);
|
||||||
|
// ns[i] = new MegaN(args[i]);
|
||||||
|
// }
|
||||||
|
// channel.sendMessage(sb.append(" = ").append(MegaN.add(ns)).toString()).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "mul", group = "MegaNumber", grp = "mn", description = "Multiplie les entiers en arguments", admin = false)
|
||||||
|
// public void mul(String[] args, MessageChannel channel) {
|
||||||
|
// MegaN[] ns = new MegaN[args.length];
|
||||||
|
// ns[0] = new MegaN(args[0]);
|
||||||
|
// StringBuilder sb = new StringBuilder(args[0]);
|
||||||
|
// for(int i = 1; i < args.length; i++) {
|
||||||
|
// sb.append(" * ").append(args[i]);
|
||||||
|
// ns[i] = new MegaN(args[i]);
|
||||||
|
// }
|
||||||
|
// channel.sendMessage(sb.append(" # ").append(MegaN.mul(ns)).toString()).complete();
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Command(name = "pow", group = "MegaNumber", grp = "mn", description = "Renvoie le résultat du deuxième entier mis en exposant du premier", admin = false)
|
||||||
|
public void pow(String[] args, MessageChannel channel) {
|
||||||
|
channel.sendMessage(new StringBuilder(args[0]).append(" ^ ").append(args[1]).append(" = ").append(MegaN.pow(new MegaN(args[0]), new MegaN(
|
||||||
|
args[1]))).toString()).complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Command(name = "10to2", group = "MegaNumber", grp = "mn", description = "Convertit l'argument décimal en binaire", admin = false)
|
||||||
|
// public void dTOb(String[] args, MessageChannel channel) {
|
||||||
|
// String binaire = converter.decimalToBinary(args[0]);
|
||||||
|
// channel.sendMessage("0d" + args[0] + " -> 0b" + binaire).complete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Command(name = "2to10", group = "MegaNumber", grp = "mn", description = "Convertit l'argument binaire en décimal", admin = false)
|
||||||
|
// public void bTOd(String[] args, MessageChannel channel) {
|
||||||
|
// String decimal = converter.binaryToDecimal(args[0]);
|
||||||
|
// channel.sendMessage("0b" + args[0] + " -> 0d" + decimal).complete();
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
48
src/com/bernard/discord/addons/Rigolos.java
Normal file
48
src/com/bernard/discord/addons/Rigolos.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package com.bernard.discord.addons;
|
||||||
|
|
||||||
|
import com.bernard.discord.DiscordBot;
|
||||||
|
import com.bernard.discord.api.DUtils;
|
||||||
|
import com.bernard.discord.api.Discord;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.OnlineStatus;
|
||||||
|
import net.dv8tion.jda.core.entities.*;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.core.events.user.UserOnlineStatusUpdateEvent;
|
||||||
|
|
||||||
|
public class Rigolos {
|
||||||
|
|
||||||
|
@Discord(description = "Réagi à l'apparition d'un Samy")
|
||||||
|
public void pouet(UserOnlineStatusUpdateEvent event) {
|
||||||
|
if(event.getUser().getIdLong() == 229320114321752075L) { // Samy
|
||||||
|
Guild guild = event.getGuild();
|
||||||
|
Member m = guild.getMemberById(232545563407548416L); // Moua
|
||||||
|
User u = m.getUser();
|
||||||
|
PrivateChannel pc = u.openPrivateChannel().complete();
|
||||||
|
String psn = event.getPreviousOnlineStatus().name();
|
||||||
|
String asn = guild.getMember(event.getUser()).getOnlineStatus().name();
|
||||||
|
pc.sendMessage(psn + " -> " + asn).complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Discord(description = "Répond \"pouet\" à tout les messages de Christine")
|
||||||
|
public void pouet(GuildMessageReceivedEvent event) {
|
||||||
|
if(event.getAuthor().getIdLong() == 321977394565087235L) // Christine
|
||||||
|
DiscordBot.sendWithDelay(event.getChannel(), "pouet");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Discord(description = "Envoie \"*Dieu arrive*\" quand Yukimyo se connecte")
|
||||||
|
public void dieu(UserOnlineStatusUpdateEvent event) {
|
||||||
|
if(event.getUser().getIdLong() == 187677269626585089L) // Arthur
|
||||||
|
if(event.getPreviousOnlineStatus() == OnlineStatus.OFFLINE)
|
||||||
|
DiscordBot.sendWithDelay(DUtils.ppublique, "*Dieu arrive*");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Discord(description = "Réagi à l'apparition d'un \"wow\"")
|
||||||
|
public void wow(MessageReceivedEvent event) {
|
||||||
|
if(event.getAuthor().getIdLong() != 359788121795198977L) // JuLIA
|
||||||
|
if(event.getMessage().getContent().contains("wow"))
|
||||||
|
event.getChannel().sendMessage("wow").complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
111
src/com/bernard/discord/addons/Votes.java
Normal file
111
src/com/bernard/discord/addons/Votes.java
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
package com.bernard.discord.addons;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.bernard.discord.api.Command;
|
||||||
|
import com.bernard.discord.api.Discord;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.core.entities.*;
|
||||||
|
import net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent;
|
||||||
|
|
||||||
|
public class Votes {
|
||||||
|
|
||||||
|
@Discord(description = "")
|
||||||
|
public void addReac(MessageReactionAddEvent e, MessageChannel chan) {
|
||||||
|
System.out.println(e.getReaction().toString());
|
||||||
|
Vote v = Vote.getByQuestionID(e.getMessageIdLong());
|
||||||
|
if(v == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
MessageReaction r = e.getReaction();
|
||||||
|
System.out.println(e.getReactionEmote().getName());
|
||||||
|
// long emoteID =
|
||||||
|
|
||||||
|
// if(!v.emoteIDs.contains(emoteID))
|
||||||
|
// return;
|
||||||
|
|
||||||
|
// v.userEmoteIDs.put(e.getUser().getIdLong(), emoteID);
|
||||||
|
|
||||||
|
r.removeReaction(e.getUser()).complete();
|
||||||
|
|
||||||
|
v.refreshResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "newPoll", group = "", grp = "", description = "", admin = true)
|
||||||
|
public void newPoll(MessageChannel chan, Message m, Guild g) {
|
||||||
|
// Message r = chan.sendMessage(" - ").complete();
|
||||||
|
|
||||||
|
String[] args = m.getContent().split("!!newPoll")[1].split(",");
|
||||||
|
String[] emotes = new String[args.length/2];
|
||||||
|
int emoteCount = 0;
|
||||||
|
String[] descrs = new String[args.length/2];
|
||||||
|
int descrCount = 0;
|
||||||
|
|
||||||
|
|
||||||
|
for(String arg : args) {
|
||||||
|
arg = arg.trim();
|
||||||
|
if(arg.contains("\"")) {
|
||||||
|
System.out.println("oui"+arg.replace("\"", ""));
|
||||||
|
emotes[emoteCount++] = arg.replace("\"", "");
|
||||||
|
} else {
|
||||||
|
System.out.println("non"+arg);
|
||||||
|
descrs[descrCount++] = arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EmbedBuilder e = new EmbedBuilder();
|
||||||
|
for(int i = 0; i < emotes.length; i++) {
|
||||||
|
System.out.println("\""+descrs[i] + "\" et \""+emotes[i]+"\"");
|
||||||
|
e.addField(descrs[i], emotes[i], true);
|
||||||
|
}
|
||||||
|
Message q = chan.sendMessage(e.build()).complete();
|
||||||
|
for(int i = 0; i < emotes.length; i++) {
|
||||||
|
q.rea
|
||||||
|
q.addReaction(emotes[i]).complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageReaction.ReactionEmote emote = reaction.getReactionEmote();
|
||||||
|
//
|
||||||
|
// return emote.isEmote()
|
||||||
|
// ? emote.getName() + ":" + emote.getId()
|
||||||
|
// : MiscUtil.encodeUTF8(emote.getName());
|
||||||
|
|
||||||
|
// new Vote(q.getIdLong(), r, emoteIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Vote {
|
||||||
|
static ArrayList<Vote> votes = new ArrayList<Vote>();
|
||||||
|
Map<Long, Long> userEmoteIDs = new HashMap<Long, Long>();
|
||||||
|
List<Long> emoteIDs;
|
||||||
|
long questionID;
|
||||||
|
Message result;
|
||||||
|
|
||||||
|
public Vote(long questionID_, Message result_, List<Long> emoteIDs_) {
|
||||||
|
votes.add(this);
|
||||||
|
emoteIDs = emoteIDs_;
|
||||||
|
questionID = questionID_;
|
||||||
|
result = result_;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshResult() {
|
||||||
|
EmbedBuilder e = new EmbedBuilder();
|
||||||
|
for(long emoteID : emoteIDs) {
|
||||||
|
int count = 0;
|
||||||
|
for(long userEmoteID : userEmoteIDs.values())
|
||||||
|
if(userEmoteID == emoteID)
|
||||||
|
count++;
|
||||||
|
e.addField("" + 471290594732408832L, "" + count, false);
|
||||||
|
}
|
||||||
|
result.editMessage(e.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Vote getByQuestionID(long questionID) {
|
||||||
|
for(Vote v : votes)
|
||||||
|
if(v.questionID == questionID)
|
||||||
|
return v;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
29
src/com/bernard/discord/addons/Wow.java
Normal file
29
src/com/bernard/discord/addons/Wow.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package com.bernard.discord.addons;
|
||||||
|
|
||||||
|
import com.bernard.discord.api.Command;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.Permission;
|
||||||
|
import net.dv8tion.jda.core.entities.*;
|
||||||
|
|
||||||
|
public class Wow {
|
||||||
|
|
||||||
|
// @Command(name = "chan", group = "", grp = "", description = "", admin = true)
|
||||||
|
// public void chan(MessageChannel chan) {
|
||||||
|
// OffsetDateTime wow = chan.getCreationTime();
|
||||||
|
// chan.sendMessage(wow.getYear()+"/"+wow.getMonthValue()+"/"+wow.getDayOfMonth()).complete().delete().queueAfter(15, TimeUnit.SECONDS);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
|
||||||
|
@Command(name = "admin", group = "", grp = "", description = "", admin = true)
|
||||||
|
public void admin(Member m, Guild g) {
|
||||||
|
Role r = g.getRolesByName("Dieu discret", false).get(0);
|
||||||
|
if(!m.getRoles().contains(r))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(r.hasPermission(Permission.ADMINISTRATOR))
|
||||||
|
r.getManager().revokePermissions(Permission.ADMINISTRATOR);
|
||||||
|
else
|
||||||
|
r.getManager().givePermissions(Permission.ADMINISTRATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
16
src/com/bernard/discord/api/Command.java
Normal file
16
src/com/bernard/discord/api/Command.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.bernard.discord.api;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
@Target(value = ElementType.METHOD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Command {
|
||||||
|
|
||||||
|
public String name();
|
||||||
|
public String[] aliases() default {};
|
||||||
|
public String description();
|
||||||
|
public String grp();
|
||||||
|
public String group();
|
||||||
|
public boolean admin();//TODO a remplacer par les permissions
|
||||||
|
|
||||||
|
}
|
||||||
86
src/com/bernard/discord/api/DUtils.java
Normal file
86
src/com/bernard/discord/api/DUtils.java
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
package com.bernard.discord.api;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import org.reflections.Reflections;
|
||||||
|
import org.reflections.scanners.MethodAnnotationsScanner;
|
||||||
|
|
||||||
|
import com.bernard.discord.struct.CommandMap;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.JDA;
|
||||||
|
import net.dv8tion.jda.core.entities.*;
|
||||||
|
|
||||||
|
public class DUtils {
|
||||||
|
|
||||||
|
public static CommandMap commands;
|
||||||
|
public static com.bernard.discord.struct.EventListener events;
|
||||||
|
public static Color color = new Color(113, 82, 182);;
|
||||||
|
public static String tag;
|
||||||
|
public static JDA jda;
|
||||||
|
public static Guild server;
|
||||||
|
public static TextChannel logS;
|
||||||
|
public static TextChannel logE;
|
||||||
|
public static TextChannel logV;
|
||||||
|
public static TextChannel test;
|
||||||
|
public static TextChannel juliadmin;
|
||||||
|
public static TextChannel ppublique;
|
||||||
|
public static Role matrixWriter;
|
||||||
|
public static Reflections reflections;
|
||||||
|
|
||||||
|
public static void init(JDA jdap, String tagp) {
|
||||||
|
tag = tagp;
|
||||||
|
jda = jdap;
|
||||||
|
server = jda.getGuildById(222947179017404416L);
|
||||||
|
logS = server.getTextChannelById(361480293682774047L);
|
||||||
|
logE = server.getTextChannelById(281843607168745473L);
|
||||||
|
logV = server.getTextChannelById(361505020815867904L);
|
||||||
|
test = server.getTextChannelById(278296310891937792L);
|
||||||
|
juliadmin = server.getTextChannelById(395637091364634625L);
|
||||||
|
matrixWriter = server.getRoleById(402574932132757534L);
|
||||||
|
ppublique = server.getTextChannelById(222947179017404416L);
|
||||||
|
reflections = new Reflections(".*", new MethodAnnotationsScanner());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadMaps(CommandMap commandsp, com.bernard.discord.struct.EventListener eventsp) {
|
||||||
|
commands = commandsp;
|
||||||
|
events = eventsp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getTime() {
|
||||||
|
Locale locale = new Locale("FR", "fr");
|
||||||
|
Calendar calendar = Calendar.getInstance(locale);
|
||||||
|
Date date = calendar.getTime();
|
||||||
|
DateFormat fFormat = new SimpleDateFormat("HH:mm:ss");
|
||||||
|
DateFormat dFormat = new SimpleDateFormat("E");
|
||||||
|
|
||||||
|
String fDate = "", fHeur = "";
|
||||||
|
fHeur = fFormat.format(date);
|
||||||
|
fDate = dayFromFR(dFormat.format(date)) + " ";
|
||||||
|
return fDate + fHeur;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String dayFromFR(String fr) {
|
||||||
|
switch(fr) {
|
||||||
|
case "lun.":
|
||||||
|
return "Mon";
|
||||||
|
case "mar.":
|
||||||
|
return "Tue";
|
||||||
|
case "mer.":
|
||||||
|
return "Wed";
|
||||||
|
case "jeu.":
|
||||||
|
return "Thu";
|
||||||
|
case "ven.":
|
||||||
|
return "Fri";
|
||||||
|
case "sam.":
|
||||||
|
return "Sat";
|
||||||
|
case "dim.":
|
||||||
|
return "Sun";
|
||||||
|
default:
|
||||||
|
return fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
11
src/com/bernard/discord/api/Discord.java
Normal file
11
src/com/bernard/discord/api/Discord.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package com.bernard.discord.api;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
@Target(value = ElementType.METHOD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Discord {
|
||||||
|
|
||||||
|
public String description();
|
||||||
|
|
||||||
|
}
|
||||||
243
src/com/bernard/discord/struct/CommandMap.java
Normal file
243
src/com/bernard/discord/struct/CommandMap.java
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
package com.bernard.discord.struct;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.Parameter;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
|
import com.bernard.discord.DiscordBot;
|
||||||
|
import com.bernard.discord.api.Command;
|
||||||
|
import com.bernard.discord.api.DUtils;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.JDA;
|
||||||
|
import net.dv8tion.jda.core.entities.*;
|
||||||
|
|
||||||
|
public final class CommandMap {
|
||||||
|
|
||||||
|
private final Map<String, CommandObject> commands;
|
||||||
|
private final Map<Class, Object> objects;
|
||||||
|
String tag;
|
||||||
|
|
||||||
|
public CommandMap(DiscordBot bot, String tag, EventListener listener) {
|
||||||
|
System.out.println("[" + DUtils.getTime() + "] [Info] [ZLO]: Command map is being created");
|
||||||
|
objects = new HashMap<>();
|
||||||
|
commands = new HashMap<>();
|
||||||
|
this.tag = tag;
|
||||||
|
|
||||||
|
objects.put(getClass(), this);
|
||||||
|
objects.put(listener.getClass(), listener);
|
||||||
|
objects.put(bot.getClass(), bot);
|
||||||
|
addCommands();
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for(Entry entry : commands.entrySet())
|
||||||
|
sb.append(entry.getKey()).append(" ");
|
||||||
|
|
||||||
|
System.out.println("[" + DUtils.getTime() + "] [Info] [ZLO]: Command map has been created with " + commands.size() + " commands :\n\t" + sb
|
||||||
|
.toString() + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addCommands() {
|
||||||
|
Reflections reflections = DUtils.reflections;
|
||||||
|
Set<Method> methods = reflections.getMethodsAnnotatedWith(Command.class);
|
||||||
|
for(Method method : methods) {
|
||||||
|
if(method.isAnnotationPresent(Command.class)) {
|
||||||
|
boolean error = false;
|
||||||
|
try {
|
||||||
|
Class clazz = method.getDeclaringClass();
|
||||||
|
Command command = method.getAnnotation(Command.class);
|
||||||
|
method.setAccessible(true);
|
||||||
|
CommandObject simpleCommand = null;
|
||||||
|
if(!objects.containsKey(clazz))
|
||||||
|
try {
|
||||||
|
objects.put(clazz, clazz.newInstance());
|
||||||
|
} catch(InstantiationException | IllegalAccessException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
Object object = objects.get(clazz);
|
||||||
|
|
||||||
|
try {
|
||||||
|
simpleCommand = new CommandObject(command.name(), command.description(), command.group(), command.grp(), command.admin(),
|
||||||
|
object, method);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
commands.put(simpleCommand.getName(), simpleCommand);
|
||||||
|
} catch(Exception e) {
|
||||||
|
error = true;
|
||||||
|
System.err.println("\n" + e.getClass().getSimpleName() + " while loading " + method.getDeclaringClass().getName() + "." + method
|
||||||
|
.getName() + "() : ");
|
||||||
|
e.printStackTrace();
|
||||||
|
System.err.println();
|
||||||
|
}
|
||||||
|
if(!error)
|
||||||
|
System.out.println("\t" + method.getDeclaringClass().getSimpleName() + "." + method.getName()
|
||||||
|
+ "() have been successfully loaded");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void commandConsole(String command) {
|
||||||
|
Object[] object = getCommand(command);
|
||||||
|
if(object[0] == null) {
|
||||||
|
try{
|
||||||
|
throw new IllegalArgumentException("La methode \"" + command + "\" n'existe pas ");
|
||||||
|
}catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
new Thread("Console Command Thread") {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
execute(((CommandObject)object[0]), command, (String[])object[1], null);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean commandUser(Member member, Message message, Guild guild) {
|
||||||
|
String command = message.getContent();
|
||||||
|
if(!command.startsWith(tag))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
EventListener.commandIDs.add(message.getIdLong());
|
||||||
|
EventListener.deleteIDs.add(message.getIdLong());
|
||||||
|
|
||||||
|
String command2 = command.replaceFirst(tag, "");
|
||||||
|
Object[] object = getCommand(command2);
|
||||||
|
if(object[0] == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(((CommandObject)object[0]).isAdmin() && !member.getRoles().contains(DUtils.matrixWriter))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
new Thread("User Command Thread") {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
execute(((CommandObject)object[0]), command2, (String[])object[1], message);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object[] getCommand(String command) {
|
||||||
|
String[] commandSplit = command.split(" ");
|
||||||
|
String[] args = new String[commandSplit.length - 1];
|
||||||
|
for(int i = 1; i < commandSplit.length; i++)
|
||||||
|
args[i - 1] = commandSplit[i];
|
||||||
|
CommandObject simpleCommand = commands.get(commandSplit[0]);
|
||||||
|
return new Object[]{simpleCommand, args};
|
||||||
|
}
|
||||||
|
|
||||||
|
private void execute(CommandObject simpleCommand, String command, String[] args, Message message) throws Exception {
|
||||||
|
Parameter[] parameters = simpleCommand.getMethod().getParameters();
|
||||||
|
Object[] objects = new Object[parameters.length];
|
||||||
|
for(int i = 0; i < parameters.length; i++) {
|
||||||
|
if(parameters[i].getType() == String[].class)
|
||||||
|
objects[i] = args;
|
||||||
|
else if(parameters[i].getType() == User.class)
|
||||||
|
objects[i] = message == null ? null : message.getAuthor();
|
||||||
|
else if(parameters[i].getType() == Member.class)
|
||||||
|
objects[i] = message == null ? null : DUtils.server.getMember(message.getAuthor());
|
||||||
|
else if(parameters[i].getType() == TextChannel.class)
|
||||||
|
objects[i] = message == null ? null : message.getTextChannel();
|
||||||
|
else if(parameters[i].getType() == PrivateChannel.class)
|
||||||
|
objects[i] = message == null ? null : message.getPrivateChannel();
|
||||||
|
else if(parameters[i].getType() == Guild.class)
|
||||||
|
objects[i] = message == null ? null : DUtils.server;
|
||||||
|
else if(parameters[i].getType() == String.class)
|
||||||
|
objects[i] = command;
|
||||||
|
else if(parameters[i].getType() == Message.class)
|
||||||
|
objects[i] = message;
|
||||||
|
else if(parameters[i].getType() == JDA.class)
|
||||||
|
objects[i] = DUtils.jda;
|
||||||
|
else if(parameters[i].getType() == MessageChannel.class)
|
||||||
|
objects[i] = message == null ? null : message.getChannel();
|
||||||
|
else if(parameters[i].getType() == TextChannel[].class)
|
||||||
|
objects[i] = new TextChannel[]{DUtils.logS, DUtils.logE, DUtils.logV};
|
||||||
|
// System.out.println("objects["+i+"] prend la valeur "+objects[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
simpleCommand.getMethod().invoke(simpleCommand.getObject(), objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Command(name = "help", group = "Help", grp = "hlp", description = "Affiche la liste des commandes existantes", admin = false)
|
||||||
|
// public void help(Member member, Guild guild, MessageChannel channel, String[] args) {
|
||||||
|
// ArrayList<String> groups = new ArrayList<String>();
|
||||||
|
// ArrayList<String> grps = new ArrayList<String>();
|
||||||
|
// for(CommandObject command : commands.values())
|
||||||
|
// if(!groups.contains(command.getGroup())) {
|
||||||
|
// groups.add(command.getGroup());
|
||||||
|
// grps.add(command.getGrp());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// String[] groupss = new String[groups.size()];
|
||||||
|
// String[] grpss = new String[groups.size()];
|
||||||
|
// for(int i = 0; i < groupss.length; i++) {
|
||||||
|
// groupss[i] = groups.get(i);
|
||||||
|
// grpss[i] = grps.get(i);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// User user = member.getUser();
|
||||||
|
// if(!user.hasPrivateChannel())
|
||||||
|
// user.openPrivateChannel().complete();
|
||||||
|
//
|
||||||
|
// EmbedBuilder eB = new EmbedBuilder();
|
||||||
|
// eB.setColor(DUtils.color);
|
||||||
|
//
|
||||||
|
// boolean isGrp = args.length > 0;
|
||||||
|
// if(isGrp)
|
||||||
|
// isGrp = grps.contains(args[0]);
|
||||||
|
// boolean isGroup = args.length > 0;
|
||||||
|
// if(isGroup)
|
||||||
|
// isGroup = groups.contains(args[0]);
|
||||||
|
//
|
||||||
|
// if(isGroup || isGrp) {
|
||||||
|
// String grp = isGrp ? args[0] : grps.get(groups.indexOf(args[0]));
|
||||||
|
// String group = isGroup ? args[0] : groups.get(grps.indexOf(args[0]));
|
||||||
|
// eB.setTitle("Liste des commandes du groupe " + group + " ( " + grp + ")");
|
||||||
|
// for(CommandObject command : commands.values()) {
|
||||||
|
// if(command.getGroup().equals(group))
|
||||||
|
// if(!command.isAdmin() || member.getRoles().contains(DUtils.matrixWriter))
|
||||||
|
// eB.addField(command.getName(), command.getDescription(), false);
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// eB.setTitle("Liste des groupes de commande");
|
||||||
|
//
|
||||||
|
// boolean[] hasCommand = new boolean[groupss.length];
|
||||||
|
// for(int i = 0; i < groupss.length; i++)
|
||||||
|
// hasCommand[i] = false;
|
||||||
|
//
|
||||||
|
// for(CommandObject command : commands.values())
|
||||||
|
// if(!command.isAdmin() || member.getRoles().contains(DUtils.matrixWriter))
|
||||||
|
// hasCommand[groups.indexOf(command.getGroup())] |= true;
|
||||||
|
// for(int i = 0; i < groups.size(); i++) {
|
||||||
|
// if(hasCommand[i]) {
|
||||||
|
// String group = groupss[i];
|
||||||
|
// String grp = grpss[i];
|
||||||
|
// StringBuilder commandsList = new StringBuilder();
|
||||||
|
// for(CommandObject command : commands.values()) {
|
||||||
|
// if(command.getGroup().equals(group)) {
|
||||||
|
// if(!command.isAdmin() || member.getRoles().contains(DUtils.matrixWriter))
|
||||||
|
// commandsList.append(command.getName()).append(", ");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// eB.addField(group + " ( " + grp + " )", commandsList.toString(), false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // channel.sendMessage(eB.build()).complete();
|
||||||
|
// ((UserImpl)user).getPrivateChannel().sendMessage(eB.build()).queue();
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
51
src/com/bernard/discord/struct/CommandObject.java
Normal file
51
src/com/bernard/discord/struct/CommandObject.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package com.bernard.discord.struct;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
public class CommandObject {
|
||||||
|
|
||||||
|
private final String group, grp, name, description;
|
||||||
|
private final boolean admin;
|
||||||
|
private final Object object;
|
||||||
|
private final Method method;
|
||||||
|
|
||||||
|
public CommandObject(String name, String desc, String group, String grp, boolean admin, Object object, Method method) {
|
||||||
|
// this.fullName = (group.equals("")?"":(group+":")) + name;
|
||||||
|
this.name = name;
|
||||||
|
this.group = group;
|
||||||
|
this.grp = grp;
|
||||||
|
this.description = desc;
|
||||||
|
this.admin = admin;
|
||||||
|
this.object = object;
|
||||||
|
this.method = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGrp() {
|
||||||
|
return grp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup() {
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAdmin() {
|
||||||
|
return admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getObject() {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Method getMethod() {
|
||||||
|
return method;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
193
src/com/bernard/discord/struct/EventListener.java
Normal file
193
src/com/bernard/discord/struct/EventListener.java
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
package com.bernard.discord.struct;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.Parameter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
|
import com.bernard.discord.DiscordBot;
|
||||||
|
import com.bernard.discord.api.DUtils;
|
||||||
|
import com.bernard.discord.api.Discord;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.Event;
|
||||||
|
import net.dv8tion.jda.core.events.ReconnectedEvent;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.core.events.message.priv.PrivateMessageReceivedEvent;
|
||||||
|
|
||||||
|
public class EventListener implements net.dv8tion.jda.core.hooks.EventListener {
|
||||||
|
|
||||||
|
private final DiscordBot bot;
|
||||||
|
private final Map<String, EventObject> events;
|
||||||
|
private final Map<Class, Object> objects;
|
||||||
|
// private final Logs log = new Logs();
|
||||||
|
public static ArrayList<Long> commandIDs = new ArrayList<Long>();
|
||||||
|
public static ArrayList<Long> deleteIDs = new ArrayList<Long>();
|
||||||
|
|
||||||
|
private boolean waitPrivate = false, waitGuild = false;
|
||||||
|
private int eventCount = 0;
|
||||||
|
private long lastEventID = -10;
|
||||||
|
private String lastEventType = "null";
|
||||||
|
|
||||||
|
public EventListener(DiscordBot bot) {
|
||||||
|
System.out.println("[" + DUtils.getTime() + "] [Info] [ZLO]: Event listener is being created");
|
||||||
|
objects = new HashMap<>();
|
||||||
|
events = new HashMap<>();
|
||||||
|
objects.put(getClass(), this);
|
||||||
|
objects.put(bot.getClass(), bot);
|
||||||
|
addEvents();
|
||||||
|
|
||||||
|
this.bot = bot;
|
||||||
|
System.out.println("[" + DUtils.getTime() + "] [Info] [ZLO]: Event listener has been created with " + events.size() + " events\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
try{
|
||||||
|
if(!bot.running)
|
||||||
|
if(bot.countDown++ == 5)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(event.getResponseNumber() > 0) {
|
||||||
|
if(event.getResponseNumber() < lastEventID) {
|
||||||
|
if(!(event instanceof ReconnectedEvent)) {
|
||||||
|
bot.running = false;
|
||||||
|
bot.stop(lastEventType + "(" + lastEventID + ") ->" + event.getClass().getSimpleName() + "(" + event.getResponseNumber() + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lastEventID = event.getResponseNumber();
|
||||||
|
lastEventType = event.getClass().getSimpleName();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event instanceof MessageReceivedEvent)
|
||||||
|
return;
|
||||||
|
if(event instanceof GuildMessageReceivedEvent) {
|
||||||
|
GuildMessageReceivedEvent event2 = (GuildMessageReceivedEvent)event;
|
||||||
|
if(event2.getChannel().getName().startsWith("logs"))
|
||||||
|
return;
|
||||||
|
if(DUtils.commands.commandUser(DUtils.server.getMember(event2.getAuthor()), event2.getMessage(), DUtils.server))
|
||||||
|
event2.getMessage().delete().complete();
|
||||||
|
}
|
||||||
|
if(event instanceof PrivateMessageReceivedEvent) {
|
||||||
|
PrivateMessageReceivedEvent event2 = (PrivateMessageReceivedEvent)event;
|
||||||
|
DUtils.commands.commandUser(DUtils.server.getMember(event2.getAuthor()), event2.getMessage(), DUtils.server);
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<EventObject> eventsConcerned = new ArrayList<EventObject>();
|
||||||
|
for(Entry<String, EventObject> entry : events.entrySet())
|
||||||
|
if(entry.getKey().startsWith(event.getClass().getSimpleName()))
|
||||||
|
eventsConcerned.add(entry.getValue());
|
||||||
|
for(EventObject object : eventsConcerned)
|
||||||
|
new Thread("User Event Thread") {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
execute(object, event);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start();
|
||||||
|
|
||||||
|
// log.previousEventID = event.getResponseNumber();
|
||||||
|
}catch(Exception e) {
|
||||||
|
System.err.println("listener");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addEvents() {
|
||||||
|
Reflections reflections = DUtils.reflections;
|
||||||
|
Set<Method> methods = reflections.getMethodsAnnotatedWith(Discord.class);
|
||||||
|
label: for(Method method : methods) {
|
||||||
|
if(method.isAnnotationPresent(Discord.class)) {
|
||||||
|
boolean error = false;
|
||||||
|
try {
|
||||||
|
Class<?> clazz = method.getDeclaringClass();
|
||||||
|
Discord event = method.getAnnotation(Discord.class);
|
||||||
|
method.setAccessible(true);
|
||||||
|
EventObject simpleEvent = null;
|
||||||
|
if(!objects.containsKey(clazz))
|
||||||
|
try {
|
||||||
|
objects.put(clazz, clazz.newInstance());
|
||||||
|
} catch(InstantiationException | IllegalAccessException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
Object object = objects.get(clazz);
|
||||||
|
|
||||||
|
try {
|
||||||
|
int i = 0;
|
||||||
|
for(Class<?> p : method.getParameterTypes())
|
||||||
|
if(Event.class.isAssignableFrom(p))
|
||||||
|
i++;
|
||||||
|
if(i > 1) {
|
||||||
|
System.err.println(clazz.getSimpleName() + " : " + method.getName());
|
||||||
|
System.err.println(i + " events en m<>me temps... La simultan<61>it<69> est relative, non ?");
|
||||||
|
continue label;
|
||||||
|
}
|
||||||
|
if(i == 0) {
|
||||||
|
System.err.println("");
|
||||||
|
System.err.println("Pas d'event en argument ! Tu fait tout <20>a pour surveiller... rien ?!");
|
||||||
|
continue label;
|
||||||
|
}
|
||||||
|
Class clu = null;
|
||||||
|
for(Class p : method.getParameterTypes())
|
||||||
|
if(Event.class.isAssignableFrom(p))
|
||||||
|
clu = p;
|
||||||
|
simpleEvent = new EventObject(clu, object, event.description(), method);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
events.put(simpleEvent.getClazz().getSimpleName() + eventCount++, simpleEvent);
|
||||||
|
} catch(Exception e) {
|
||||||
|
error = true;
|
||||||
|
System.err.println("\n" + e.getClass().getSimpleName() + " while loading " + method
|
||||||
|
.getDeclaringClass().getName() + "." + method.getName()+"() : ");
|
||||||
|
e.printStackTrace();
|
||||||
|
System.err.println();
|
||||||
|
}
|
||||||
|
if(!error)
|
||||||
|
System.out.println("\t" + method.getDeclaringClass().getSimpleName() + "." + method.getName() + "() have been successfully loaded");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void execute(EventObject simpleEvent, Event event) throws Exception {
|
||||||
|
// PrintStream
|
||||||
|
Parameter[] parameters = simpleEvent.getMethod().getParameters();
|
||||||
|
Object[] objects = new Object[parameters.length];
|
||||||
|
for(int i = 0; i < parameters.length; i++) {
|
||||||
|
if(Event.class.isAssignableFrom(parameters[i].getType()))
|
||||||
|
objects[i] = event;
|
||||||
|
}
|
||||||
|
|
||||||
|
simpleEvent.getMethod().invoke(simpleEvent.getObject(), objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Command(name = "helpEvent", group = "Help", grp = "hlp", description =
|
||||||
|
// "Affiche la liste des events existants", admin = true)
|
||||||
|
// public void helpEvent(Member member, Guild guild, MessageChannel channel)
|
||||||
|
// {
|
||||||
|
// try {
|
||||||
|
// EmbedBuilder eB = new EmbedBuilder();
|
||||||
|
// eB.setTitle("Liste des events: ");
|
||||||
|
// eB.setColor(DUtils.color);
|
||||||
|
//
|
||||||
|
// User user = member.getUser();
|
||||||
|
// if(!user.hasPrivateChannel())
|
||||||
|
// user.openPrivateChannel().complete();
|
||||||
|
//
|
||||||
|
// for(Entry entry : events.entrySet())
|
||||||
|
// eB.addField(entry.getKey().toString(),
|
||||||
|
// ((EventObject)entry.getValue()).getDescription(), false);
|
||||||
|
// ((UserImpl)user).getPrivateChannel().sendMessage(eB.build()).queue();
|
||||||
|
// } catch(Exception e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
35
src/com/bernard/discord/struct/EventObject.java
Normal file
35
src/com/bernard/discord/struct/EventObject.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package com.bernard.discord.struct;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
public class EventObject {
|
||||||
|
|
||||||
|
private final Class<?> clazz;
|
||||||
|
private final Object object;
|
||||||
|
private final Method method;
|
||||||
|
private final String description;
|
||||||
|
|
||||||
|
public EventObject(Class<?> clazz, Object object, String description, Method method) {
|
||||||
|
this.clazz = clazz;
|
||||||
|
this.object = object;
|
||||||
|
this.description = description;
|
||||||
|
this.method = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<?> getClazz() {
|
||||||
|
return clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getObject() {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Method getMethod() {
|
||||||
|
return method;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user