Initial commit
This commit is contained in:
commit
c242f587a8
49 files changed
+3686
No files matched your search
@@ -0,0 +1,72 @@
|
|||||||
|
package netneutrality;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.security.auth.login.LoginException;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.AccountType;
|
||||||
|
import net.dv8tion.jda.core.JDA;
|
||||||
|
import net.dv8tion.jda.core.JDABuilder;
|
||||||
|
import net.dv8tion.jda.core.entities.Game;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.controllers.DBSettings;
|
||||||
|
import netneutrality.handler.ConsoleHandler;
|
||||||
|
import netneutrality.handler.EditHandler;
|
||||||
|
import netneutrality.handler.LogHandler;
|
||||||
|
import netneutrality.handler.NewCommandListener;
|
||||||
|
import netneutrality.http.server.WebApi;
|
||||||
|
import netneutrality.utils.Settings;
|
||||||
|
|
||||||
|
public class MusicBot {
|
||||||
|
|
||||||
|
private static JDA jda;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
DBController.init();
|
||||||
|
String token = ((DBSettings) DBController.get("settings")).getToken();
|
||||||
|
try {
|
||||||
|
jda = new JDABuilder(AccountType.BOT).setToken(token).buildBlocking();
|
||||||
|
} catch (LoginException | IllegalArgumentException | InterruptedException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
jda.getPresence().setGame(Game.watching("me load..."));
|
||||||
|
jda.addEventListener(new NewCommandListener(), new EditHandler());
|
||||||
|
|
||||||
|
Settings.setCreator(jda.getUserById("194270171727265792"));
|
||||||
|
Settings.setOwnerGuild(jda.getGuildById("195386426400047105"));
|
||||||
|
|
||||||
|
WebApi webserver = new WebApi();
|
||||||
|
|
||||||
|
jda.getPresence().setGame(Game.watching("rape"));
|
||||||
|
Thread status = new Thread(new StatusThread(jda.getPresence()));
|
||||||
|
// status.start();
|
||||||
|
|
||||||
|
ConsoleHandler consoleInput = new ConsoleHandler();
|
||||||
|
|
||||||
|
try {
|
||||||
|
switch (consoleInput.init()) {
|
||||||
|
|
||||||
|
case "quit":
|
||||||
|
System.out.println("Shutting down...");
|
||||||
|
jda.shutdown();
|
||||||
|
System.out.println("Shutdown complete");
|
||||||
|
System.exit(0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JDA getJDA() {
|
||||||
|
return jda;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void disconnect() {
|
||||||
|
jda.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package netneutrality;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.OnlineStatus;
|
||||||
|
import net.dv8tion.jda.core.managers.Presence;
|
||||||
|
|
||||||
|
public class StatusThread implements Runnable {
|
||||||
|
|
||||||
|
private Presence status;
|
||||||
|
|
||||||
|
public StatusThread(Presence pr) {
|
||||||
|
this.status = pr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
while (true) {
|
||||||
|
status.setStatus(OnlineStatus.ONLINE);
|
||||||
|
Thread.sleep(10000);
|
||||||
|
status.setStatus(OnlineStatus.IDLE);
|
||||||
|
Thread.sleep(10000);
|
||||||
|
status.setStatus(OnlineStatus.DO_NOT_DISTURB);
|
||||||
|
Thread.sleep(10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package netneutrality.command;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
|
||||||
|
public abstract class AbstractCommand {
|
||||||
|
|
||||||
|
public AbstractCommand() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return if the command needs administrator privilege
|
||||||
|
*/
|
||||||
|
public abstract boolean needAdmin();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return if the command is enabled
|
||||||
|
*/
|
||||||
|
public abstract boolean isEnabled();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The command name that a user will write in a channel
|
||||||
|
*
|
||||||
|
* @return the name of the command.
|
||||||
|
*/
|
||||||
|
public abstract String getCommand();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return all the aliases the command has
|
||||||
|
*/
|
||||||
|
public abstract String[] getAlias();
|
||||||
|
|
||||||
|
public abstract String getUsage();
|
||||||
|
|
||||||
|
public abstract Visibility getVisibility();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param event
|
||||||
|
* @param args the arguments to the command
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract String execute(MessageReceivedEvent event, String args);
|
||||||
|
|
||||||
|
public int countArgs(String command) {
|
||||||
|
if (command.isEmpty())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
List<String> args = Arrays.asList(command.split(" "));
|
||||||
|
return args.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String parseArgs(String command, int arg) {
|
||||||
|
if (command.isEmpty())
|
||||||
|
return "";
|
||||||
|
|
||||||
|
List<String> args = Arrays.asList(command.split(" "));
|
||||||
|
return args.get(arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package netneutrality.command;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.MessageChannel;
|
||||||
|
import net.dv8tion.jda.core.entities.PrivateChannel;
|
||||||
|
import net.dv8tion.jda.core.entities.TextChannel;
|
||||||
|
|
||||||
|
public enum Visibility {
|
||||||
|
|
||||||
|
PRIVATE, CHANNEL, BOTH;
|
||||||
|
|
||||||
|
public static boolean check(MessageChannel channel, Visibility v) {
|
||||||
|
if (v == BOTH && channel instanceof TextChannel || channel instanceof PrivateChannel)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (v == PRIVATE && channel instanceof PrivateChannel)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (v == CHANNEL && channel instanceof TextChannel)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package netneutrality.command.basic;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.core.MessageBuilder;
|
||||||
|
import net.dv8tion.jda.core.entities.MessageChannel;
|
||||||
|
import net.dv8tion.jda.core.entities.PrivateChannel;
|
||||||
|
import net.dv8tion.jda.core.entities.TextChannel;
|
||||||
|
import net.dv8tion.jda.core.entities.User;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import netneutrality.utils.Settings;
|
||||||
|
|
||||||
|
public class HelpCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
private String help = "";
|
||||||
|
|
||||||
|
public HelpCommand() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
EmbedBuilder embed = new EmbedBuilder();
|
||||||
|
embed.setColor(Color.green);
|
||||||
|
embed.addField("Commands for Net Neutrality", help, false);
|
||||||
|
|
||||||
|
event.getTextChannel().sendMessage(new MessageBuilder().append(event.getAuthor()).append(" help has been sent your way!").build()).queue();
|
||||||
|
|
||||||
|
event.getAuthor().openPrivateChannel().queue(t -> t.sendMessage(embed.build()).queue());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendHelp(HashMap<String, AbstractCommand> commands, HashMap<String, AbstractCommand> alias, User user, MessageChannel channel) {
|
||||||
|
for (AbstractCommand command : commands.values()) {
|
||||||
|
if (command.getUsage() != null)
|
||||||
|
help += Settings.PREFIX + command.getCommand() + " (: " + command.getUsage() + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EmbedBuilder embed = new EmbedBuilder();
|
||||||
|
embed.setColor(Color.green);
|
||||||
|
embed.addField("Commands for Net Neutrality", help, false);
|
||||||
|
|
||||||
|
if (channel instanceof TextChannel)
|
||||||
|
channel.sendMessage(new MessageBuilder().append(user).append(" help has been sent your way!").build()).queue();
|
||||||
|
user.openPrivateChannel().queue(t -> t.sendMessage(embed.build()).queue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "help";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return "Get every command with its usage";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package netneutrality.command.basic;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
|
||||||
|
public class PingCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public PingCommand() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
if (countArgs(args) == 0)
|
||||||
|
event.getChannel().sendMessage("Pong!").queue();
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "ping";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return "Pong!";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package netneutrality.command.crypto;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.http.WebModule;
|
||||||
|
|
||||||
|
public class BitcoinPriceCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
private String currency = "USD";
|
||||||
|
private String currencyUrl = "https://api.coindesk.com/v1/bpi/currentprice/";
|
||||||
|
private String price;
|
||||||
|
|
||||||
|
public BitcoinPriceCommand() {
|
||||||
|
this.currency = "USD";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String messageBuilder(String price) {
|
||||||
|
String newPrice = price.substring(0, price.indexOf("."));
|
||||||
|
|
||||||
|
return "The current bitcoin price in " + this.currency + " is " + newPrice + "$";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) throws JSONException, ArrayIndexOutOfBoundsException {
|
||||||
|
|
||||||
|
if (countArgs(args) == 1) {
|
||||||
|
if (Currency.isCurrency(args.toUpperCase()))
|
||||||
|
this.currency = args.toUpperCase();
|
||||||
|
else {
|
||||||
|
event.getTextChannel().sendMessage("Please enter a valid currency").queue();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getTextChannel().sendMessage("Retreiving price, please wait...").queue(new Consumer<Message>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(Message t) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
WebModule bitcoinHttp = new WebModule(currencyUrl + currency + ".json").request();
|
||||||
|
JSONObject bpi = bitcoinHttp.getAsObject().getJSONObject("bpi");
|
||||||
|
price = bpi.getJSONObject(currency.toUpperCase()).getString("rate");
|
||||||
|
|
||||||
|
} catch (IOException | RuntimeException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
t.editMessage("Error getting bitcoin price!").queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
t.editMessage(messageBuilder(price)).queue();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "bitcoin";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[] {"btc"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return "Get the bitcoin price";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package netneutrality.command.crypto;
|
||||||
|
|
||||||
|
public enum Currency {
|
||||||
|
|
||||||
|
AED("AED"), AFN("AFN"), ALL("ALL"), AMD("AMD"), ANG("ANG"), AOA("AOA"), ARS("ARS"), AUD("AUD"), AWG("AWG"), AZN("AZN"), BAM("BAM"), BBD("BBD"),
|
||||||
|
BDT("BDT"), BGN("BGN"), BHD("BHD"), BIF("BIF"), BMD("BMD"), BND("BND"), BOB("BOB"), BOV("BOV"), BRL("BRL"), BSD("BSD"), BTN("BTN"), BWP("BWP"),
|
||||||
|
BYN("BYN"), BYR("BYR"), BZD("BZD"), CAD("CAD"), CDF("CDF"), CHE("CHE"), CHF("CHF"), CHW("CHW"), CLF("CLF"), CLP("CLP"), CNY("CNY"), COP("COP"),
|
||||||
|
COU("COU"), CRC("CRC"), CUC("CUC"), CUP("CUP"), CVE("CVE"), CZK("CZK"), DJF("DJF"), DKK("DKK"), DOP("DOP"), DZD("DZD"), EGP("EGP"), ERN("ERN"),
|
||||||
|
ETB("ETB"), EUR("EUR"), FJD("FJD"), FKP("FKP"), GBP("GBP"), GEL("GEL"), GHS("GHS"), GIP("GIP"), GMD("GMD"), GNF("GNF"), GTQ("GTQ"), GYD("GYD"),
|
||||||
|
HKD("HKD"), HNL("HNL"), HRK("HRK"), HTG("HTG"), HUF("HUF"), IDR("IDR"), ILS("ILS"), INR("INR"), IQD("IQD"), IRR("IRR"), ISK("ISK"), JMD("JMD"),
|
||||||
|
JOD("JOD"), JPY("JPY"), KES("KES"), KGS("KGS"), KHR("KHR"), KMF("KMF"), KPW("KPW"), KRW("KRW"), KWD("KWD"), KYD("KYD"), KZT("KZT"), LAK("LAK"),
|
||||||
|
LBP("LBP"), LKR("LKR"), LRD("LRD"), LSL("LSL"), LYD("LYD"), MAD("MAD"), MDL("MDL"), MGA("MGA"), MKD("MKD"), MMK("MMK"), MNT("MNT"), MOP("MOP"),
|
||||||
|
MRO("MRO"), MUR("MUR"), MVR("MVR"), MWK("MWK"), MXN("MXN"), MXV("MXV"), MYR("MYR"), MZN("MZN"), NAD("NAD"), NGN("NGN"), NIO("NIO"), NOK("NOK"),
|
||||||
|
NPR("NPR"), NZD("NZD"), OMR("OMR"), PAB("PAB"), PEN("PEN"), PGK("PGK"), PHP("PHP"), PKR("PKR"), PLN("PLN"), PYG("PYG"), QAR("QAR"), RON("RON"),
|
||||||
|
RSD("RSD"), RUB("RUB"), RWF("RWF"), SAR("SAR"), SBD("SBD"), SCR("SCR"), SDG("SDG"), SEK("SEK"), SGD("SGD"), SHP("SHP"), SLL("SLL"), SOS("SOS"),
|
||||||
|
SRD("SRD"), SSP("SSP"), STD("STD"), SYP("SYP"), SZL("SZL"), THB("THB"), TJS("TJS"), TMT("TMT"), TND("TND"), TOP("TOP"), TRY("TRY"), TTD("TTD"),
|
||||||
|
TWD("TWD"), TZS("TZS"), UAH("UAH"), UGX("UGX"), USD("USD"), USN("USN"), UYI("UYI"), UYU("UYU"), UZS("UZS"), VEF("VEF"), VND("VND"), VUV("VUV"),
|
||||||
|
WST("WST"), XAF("XAF"), XAG("XAG"), XAU("XAU"), XBA("XBA"), XBB("XBB"), XBC("XBC"), XBD("XBD"), XCD("XCD"), XDR("XDR"), XFU("XFU"), XOF("XOF"),
|
||||||
|
XPD("XPD"), XPF("XPF"), XPT("XPT"), XSU("XSU"), XTS("XTS"), XUA("XUA"), XXX("XXX"), YER("YER"), ZAR("ZAR"), ZMW("ZMW");
|
||||||
|
|
||||||
|
private String iso4217Code;
|
||||||
|
|
||||||
|
Currency(String code) {
|
||||||
|
this.iso4217Code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return iso4217Code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isCurrency(String str) {
|
||||||
|
for (Currency c : Currency.values()) {
|
||||||
|
if (c.name().equals(str.toUpperCase()))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
package netneutrality.command.crypto;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import org.json.JSONException;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.http.WebModule;
|
||||||
|
|
||||||
|
public class EthereumPriceCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
private String currency = "USD";
|
||||||
|
private String currencyUrl = "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=";
|
||||||
|
private String price = "";
|
||||||
|
|
||||||
|
public EthereumPriceCommand() {
|
||||||
|
this.currency = "USD";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String messageBuilder(String price) {
|
||||||
|
return "The current ethereum price in " + this.currency + " is " + price + "$";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) throws JSONException, ArrayIndexOutOfBoundsException {
|
||||||
|
|
||||||
|
if (countArgs(args) == 1) {
|
||||||
|
if (Currency.isCurrency(args.toUpperCase()))
|
||||||
|
this.currency = args.toUpperCase();
|
||||||
|
else {
|
||||||
|
event.getTextChannel().sendMessage("Please enter a valid currency").queue();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getTextChannel().sendMessage("Retreiving price, please wait...").queue(new Consumer<Message>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(Message t) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
WebModule ethereumHttp = new WebModule(currencyUrl + currency.toUpperCase()).request();
|
||||||
|
price = Double.toString(ethereumHttp.getAsObject().getDouble(currency));
|
||||||
|
|
||||||
|
} catch (IOException | RuntimeException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
t.editMessage("Error getting ethereum price!").queue();
|
||||||
|
}
|
||||||
|
t.editMessage(messageBuilder(price)).queue();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "ethereum";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[] {"eth"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return "Get the ethereum price";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
package netneutrality.command.crypto;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import org.json.JSONException;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.http.WebModule;
|
||||||
|
|
||||||
|
public class LitecoinPriceCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
private String currency = "USD";
|
||||||
|
private String currencyUrl = "https://api.coinmarketcap.com/v1/ticker/litecoin/?convert=";
|
||||||
|
private String price;
|
||||||
|
|
||||||
|
public LitecoinPriceCommand() {
|
||||||
|
this.currency = "USD";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String messageBuilder(String price) {
|
||||||
|
return "The current litecoin price in " + this.currency + " is " + price + "$";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) throws ArrayIndexOutOfBoundsException, JSONException {
|
||||||
|
|
||||||
|
if (countArgs(args) == 1) {
|
||||||
|
if (Currency.isCurrency(args.toUpperCase()))
|
||||||
|
this.currency = args;
|
||||||
|
else {
|
||||||
|
event.getTextChannel().sendMessage("Please enter a valid currency").queue();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getTextChannel().sendMessage("Retreiving price, please wait...").queue(new Consumer<Message>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(Message t) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
WebModule litecoinHttp = new WebModule(currencyUrl + currency).request();
|
||||||
|
price = litecoinHttp.getAsArray().getJSONObject(0).getString("price_" + currency.toLowerCase());
|
||||||
|
} catch (IOException | RuntimeException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
t.editMessage("Error getting litecoin price!").queue();
|
||||||
|
}
|
||||||
|
t.editMessage(messageBuilder(price)).queue();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "litecoin";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[] {"ltc"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return "Get the litecoin price";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
package netneutrality.command.message;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.controllers.DBBlacklist;
|
||||||
|
import netneutrality.db.models.MBlacklist;
|
||||||
|
import netneutrality.handler.LogHandler;
|
||||||
|
|
||||||
|
public class BlacklistCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public BlacklistCommand() {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "blacklist";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
return new String[] {"bl"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return "Manages the blacklist of your server.";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.CHANNEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
|
||||||
|
if (countArgs(args) > 0 && countArgs(args) < 3) {
|
||||||
|
String word = (countArgs(args) == 2 ? parseArgs(args, 1) : "");
|
||||||
|
|
||||||
|
switch (parseArgs(args, 0)) {
|
||||||
|
|
||||||
|
case "get":
|
||||||
|
event.getTextChannel().sendMessage("Retreiving list, please wait...").queue(t -> {
|
||||||
|
String out = "";
|
||||||
|
|
||||||
|
ArrayList<MBlacklist> blacklist = null;
|
||||||
|
try {
|
||||||
|
blacklist = ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(event.getGuild().getId());
|
||||||
|
for (MBlacklist bl : blacklist) {
|
||||||
|
out += bl.getWord() + " -> " + (bl.isEnabled() ? "enabled" : "disabled") + "\n";
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
t.editMessage("List of blacklisted words for this server [" + event.getGuild().getName() + "] :\n" + (blacklist.isEmpty() ? "No word found" : out)).queue();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "add":
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).add(new MBlacklist(word, true, event.getAuthor().getId(), event.getGuild().getId()));
|
||||||
|
event.getTextChannel().sendMessage("Added the word \"" + word + "\" to the blacklist.").queue();
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
event.getTextChannel().sendMessage("Error adding \"" + word + "\" to the blacklist. It's already blacklisted!").queue();
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "remove":
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).delete(word, event.getGuild().getId());
|
||||||
|
event.getTextChannel().sendMessage("Removed the word \"" + word + "\" from the blacklist.").queue();
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
event.getTextChannel().sendMessage("Error removing \"" + word + "\" from the blacklist").queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "disable":
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).disable(word, event.getGuild().getId());
|
||||||
|
event.getTextChannel().sendMessage("Succesfully disabled the word \"" + word + "\" from the blacklist!").queue();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
event.getTextChannel().sendMessage("Error disabling \"" + word + "\", it's not blacklisted!").queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "enable":
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).enable(word, event.getGuild().getId());
|
||||||
|
event.getTextChannel().sendMessage("Succesfully enabled the word \"" + word + "\" from the blacklist!").queue();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
event.getTextChannel().sendMessage("Error enabling \"" + word + "\", it's not blacklisted!").queue();
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package netneutrality.command.message;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import netneutrality.utils.ChannelFunction;
|
||||||
|
|
||||||
|
public class PruneCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public PruneCommand() {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "prune";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[] {"purge"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return "Prune n messages from the channel you are currently on";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.CHANNEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
if (countArgs(args) == 1)
|
||||||
|
ChannelFunction.bulkDeleteMessage(event.getTextChannel(), Integer.parseInt(args));
|
||||||
|
else
|
||||||
|
event.getTextChannel().sendMessage("Failed to delete messages!").queue();
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
package netneutrality.command.specific;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.core.entities.PrivateChannel;
|
||||||
|
import net.dv8tion.jda.core.entities.User;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.controllers.DBMessage;
|
||||||
|
import netneutrality.db.models.MMessage;
|
||||||
|
import netneutrality.utils.Settings;
|
||||||
|
|
||||||
|
public class DatabaseCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public DatabaseCommand() {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "database";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[] { "db" };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.CHANNEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
|
||||||
|
if (!event.getAuthor().getDiscriminator().equals(Settings.getCreator().getDiscriminator()))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (countArgs(args) > 0) {
|
||||||
|
switch (parseArgs(args, 0)) {
|
||||||
|
|
||||||
|
case "message":
|
||||||
|
|
||||||
|
if (countArgs(args) > 1) {
|
||||||
|
event.getMessage().delete().queue();
|
||||||
|
MMessage message = ((DBMessage) DBController.get("message")).getMessage(parseArgs(args, 1));
|
||||||
|
if (message != null) {
|
||||||
|
EmbedBuilder embed = new EmbedBuilder();
|
||||||
|
embed.setColor(Color.BLUE);
|
||||||
|
embed.setTimestamp(
|
||||||
|
DateTimeFormatter.ofPattern(Settings.DATETIMEFORMAT).parse(message.getDateSent()));
|
||||||
|
embed.setFooter("Guild : " + message.getServerName() + " | ID : " + message.getMessageId(), null);
|
||||||
|
embed.setDescription(
|
||||||
|
"Message from " + message.getSender() + " on the channel " + message.getChannelName());
|
||||||
|
embed.addField("Message: ", "" + message.getMessage(), false);
|
||||||
|
event.getTextChannel().sendMessage(embed.build()).queue();
|
||||||
|
} else {
|
||||||
|
User user = event.getJDA().getUserById(parseArgs(args, 1));
|
||||||
|
if (user != null) {
|
||||||
|
ArrayList<MMessage> messages = ((DBMessage) DBController.get("message"))
|
||||||
|
.getMessagesFromUser(user.getName(), event.getGuild().getName(), 10);
|
||||||
|
EmbedBuilder embed = new EmbedBuilder();
|
||||||
|
embed.setColor(Color.BLUE);
|
||||||
|
embed.setTimestamp(OffsetDateTime.now());
|
||||||
|
for (int i = 0; i < messages.size(); i++) {
|
||||||
|
embed.addField(
|
||||||
|
"Message in channel \"" + messages.get(i).getChannelName() + "\" sent on "
|
||||||
|
+ messages.get(i).getDateSent(),
|
||||||
|
"" + messages.get(i).getMessage(), false);
|
||||||
|
}
|
||||||
|
embed.setFooter("Guild : " + event.getGuild().getName(), null);
|
||||||
|
|
||||||
|
event.getAuthor().openPrivateChannel().queue(new Consumer<PrivateChannel>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(PrivateChannel t) {
|
||||||
|
t.sendMessage(embed.build()).queue();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package netneutrality.command.specific;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
|
||||||
|
public class LoggingCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public LoggingCommand() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return "logging";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.CHANNEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package netneutrality.command.specific;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
|
||||||
|
public class NiggerCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public NiggerCommand() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
event.getMessage().delete().queue();
|
||||||
|
event.getTextChannel().sendMessage("Not in my christian server").queue();
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "nigger";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package netneutrality.command.specific;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.controllers.DBSettings;
|
||||||
|
import netneutrality.db.models.SellyOrder;
|
||||||
|
import netneutrality.http.Selly;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class SellyCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public SellyCommand() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return "selly";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.PRIVATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
|
||||||
|
Map<String, SellyOrder> orders = new HashMap<>();
|
||||||
|
String sellyEmail = ((DBSettings) DBController.get("settings")).getSellyEmail();
|
||||||
|
String sellyKey = ((DBSettings) DBController.get("settings")).getSellyKey();
|
||||||
|
Selly selly = new Selly(sellyEmail, sellyKey);
|
||||||
|
|
||||||
|
JSONArray ordersArray = selly.getOrders();
|
||||||
|
|
||||||
|
for (int i = 0; i < ordersArray.length(); i++) {
|
||||||
|
JSONObject order = ordersArray.getJSONObject(i);
|
||||||
|
orders.put(order.getString("id"), new SellyOrder(order.getString("id"), order.getString("product_id"), order.getString("email"), order.getString("ip_address"),
|
||||||
|
Float.parseFloat(order.getString("value")), order.getString("currency"), order.getString("gateway"), order.getInt("risk_level"), order.getInt("status"),
|
||||||
|
order.getInt("crypto_value"), order.getString("crypto_address"), Float.parseFloat(order.getString("usd_value")), order.getString("created_at")));
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println(selly.getProducts().toString());
|
||||||
|
|
||||||
|
if (countArgs(args) > 1) {
|
||||||
|
String email = parseArgs(args, 0);
|
||||||
|
String id = parseArgs(args, 1);
|
||||||
|
|
||||||
|
if (orders.containsKey(id)) {
|
||||||
|
SellyOrder order = orders.get(id);
|
||||||
|
if (email.equals(order.getEmail())) {
|
||||||
|
if (order.getStatus() == 100) {
|
||||||
|
event.getAuthor().openPrivateChannel().queue(t -> t.sendMessage("success").queue());
|
||||||
|
} else
|
||||||
|
event.getAuthor().openPrivateChannel().queue(t -> t.sendMessage("not completed").queue());
|
||||||
|
} else
|
||||||
|
event.getAuthor().openPrivateChannel().queue(t -> t.sendMessage("wrong email").queue());
|
||||||
|
} else
|
||||||
|
event.getAuthor().openPrivateChannel().queue(t -> t.sendMessage("order doesn't exist").queue());
|
||||||
|
} else
|
||||||
|
event.getAuthor().openPrivateChannel().queue(t -> t.sendMessage("usage : $selly <email> <order_id>").queue());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package netneutrality.command.specific;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
|
||||||
|
public class ShutdownCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public ShutdownCommand() {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
event.getJDA().shutdown();
|
||||||
|
System.exit(0);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package netneutrality.command.specific;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import netneutrality.utils.MessageFunction;
|
||||||
|
import netneutrality.utils.Settings;
|
||||||
|
|
||||||
|
public class TestCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
public TestCommand() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAdmin() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand() {
|
||||||
|
return "test";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getAlias() {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Visibility getVisibility() {
|
||||||
|
return Visibility.BOTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(MessageReceivedEvent event, String args) {
|
||||||
|
if (event.getAuthor().getDiscriminator().equals(Settings.getCreator().getDiscriminator())) {
|
||||||
|
MessageFunction.isStartingWithMention(event.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package netneutrality.db;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public abstract class AbstractController {
|
||||||
|
|
||||||
|
protected MysqlDatabase database;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller name to be used in {@link DBController} get(String controller) method
|
||||||
|
*
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public abstract String getControllerName();
|
||||||
|
|
||||||
|
public void reconnect() throws SQLException {
|
||||||
|
database.reconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isClosed() throws SQLException {
|
||||||
|
return database.isClosed();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setDatabase(MysqlDatabase database) {
|
||||||
|
this.database = database;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
package netneutrality.db;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
|
public class DBController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A map that contains all the controllers currently loaded
|
||||||
|
*/
|
||||||
|
private static HashMap<String, AbstractController> controllers = new HashMap<>();
|
||||||
|
private static MysqlDatabase database = new MysqlDatabase("discord");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param controller The name of the controller as defined in the {@link AbstractController#getControllerName()}'s method
|
||||||
|
* @return {@link AbstractController} The class with an AbstractController type
|
||||||
|
*/
|
||||||
|
public static AbstractController get(String controller) {
|
||||||
|
if (controllers.isEmpty())
|
||||||
|
init();
|
||||||
|
|
||||||
|
|
||||||
|
if (controllers.containsKey(controller)) {
|
||||||
|
try {
|
||||||
|
if (controllers.get(controller).isClosed()) {
|
||||||
|
System.out.println("Reconnecting to database..");
|
||||||
|
controllers.get(controller).reconnect();
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return controllers.get(controller);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MysqlDatabase get() {
|
||||||
|
try {
|
||||||
|
if (database.isClosed()) {
|
||||||
|
System.out.println("Reconnecting to database..");
|
||||||
|
database.reconnect();
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void shutdown() throws SQLException {
|
||||||
|
database.close();
|
||||||
|
controllers.forEach((k,v) -> {
|
||||||
|
try {
|
||||||
|
v.database.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Optional, will be called if the method {@link #get(String) get()} is used
|
||||||
|
*/
|
||||||
|
public static void init() {
|
||||||
|
loadControllers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all the controllers which extends {@link AbstractController}
|
||||||
|
*/
|
||||||
|
public static void loadControllers() {
|
||||||
|
System.out.println("Loading databases controllers..");
|
||||||
|
|
||||||
|
Reflections reflections = new Reflections("netneutrality.db.controllers");
|
||||||
|
Set<Class<? extends AbstractController>> classes = reflections.getSubTypesOf(AbstractController.class);
|
||||||
|
|
||||||
|
for (Class<? extends AbstractController> s : classes) {
|
||||||
|
try {
|
||||||
|
if (Modifier.isAbstract(s.getModifiers())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractController c = s.getConstructor().newInstance();
|
||||||
|
c.setDatabase(database);
|
||||||
|
|
||||||
|
if (!controllers.containsKey(c.getControllerName())) {
|
||||||
|
controllers.put(c.getControllerName(), c);
|
||||||
|
System.out.println("Loaded controller: " + c.getControllerName());
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package netneutrality.db;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource;
|
||||||
|
|
||||||
|
public class MysqlConnector {
|
||||||
|
|
||||||
|
protected String dbName;
|
||||||
|
protected String dbUser;
|
||||||
|
protected String dbHost;
|
||||||
|
protected String dbPass;
|
||||||
|
private Connection c;
|
||||||
|
|
||||||
|
public MysqlConnector(String dbName, String dbUser, String dbHost, String dbPass) {
|
||||||
|
this.dbName = dbName;
|
||||||
|
this.dbUser = dbUser;
|
||||||
|
this.dbHost = dbHost;
|
||||||
|
this.dbPass = dbPass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to a MySQL instance using the provided informations
|
||||||
|
*
|
||||||
|
* @return {@link MysqlConnector}
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public MysqlConnector connect() throws SQLException {
|
||||||
|
MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();
|
||||||
|
dataSource.setUser(dbUser);
|
||||||
|
dataSource.setPassword(dbPass);
|
||||||
|
dataSource.setServerName(dbHost);
|
||||||
|
dataSource.setPort(3306);
|
||||||
|
dataSource.setDatabaseName(dbName);
|
||||||
|
dataSource.setAutoReconnect(true);
|
||||||
|
dataSource.setAutoReconnectForConnectionPools(true);
|
||||||
|
c = dataSource.getConnection();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the MySQL connection. Must call {@link #connect()} beforehand.
|
||||||
|
*
|
||||||
|
* @return {@link Connection}
|
||||||
|
*/
|
||||||
|
public Connection getConnection() {
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,269 @@
|
|||||||
|
package netneutrality.db;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.ResultSetMetaData;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.sql.Types;
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
import netneutrality.MusicBot;
|
||||||
|
import netneutrality.db.models.RowModel;
|
||||||
|
import netneutrality.db.models.TableModel;
|
||||||
|
import netneutrality.exceptions.UnimplementedParameterException;
|
||||||
|
|
||||||
|
public class MysqlDatabase {
|
||||||
|
|
||||||
|
private Connection connection;
|
||||||
|
private PreparedStatement query = null;
|
||||||
|
private String prepareString;
|
||||||
|
private int nbRow;
|
||||||
|
private String dbName;
|
||||||
|
|
||||||
|
public MysqlDatabase(String dbName) {
|
||||||
|
this.dbName = dbName;
|
||||||
|
try {
|
||||||
|
System.out.println("Connecting to database...");
|
||||||
|
connection = new MysqlConnector(dbName, "root", "localhost", "").connect().getConnection();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
System.err.println("Error connecting to database. Shutting down..");
|
||||||
|
MusicBot.disconnect();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a simple query without any parameters.
|
||||||
|
* Example : SELECT * FROM table
|
||||||
|
*
|
||||||
|
* @param query The SQL query to execute
|
||||||
|
* @return {@link ResultSet}
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public ResultSet query(String query) throws SQLException {
|
||||||
|
Statement stmt = connection.createStatement();
|
||||||
|
return stmt.executeQuery(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute an UPDATE statement with the specified parameters.
|
||||||
|
* In the SQL query, where there is a parameter to be included, you need to replace it with ?
|
||||||
|
*
|
||||||
|
* @param sql The SQL query to execute
|
||||||
|
* @param params The parameters to include in the query
|
||||||
|
* @return an integer of how many row were affected
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public int update(String sql, Object... params) throws SQLException {
|
||||||
|
prepareString = sql;
|
||||||
|
query = connection.prepareStatement(sql);
|
||||||
|
resolveParameters(query, params);
|
||||||
|
return query.executeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute an INSERT statement with the specified parameters.
|
||||||
|
* In the SQL query, where there is a parameter to be included, you need to replace it with ?
|
||||||
|
*
|
||||||
|
* @param sql The SQL query to execute
|
||||||
|
* @param params The parameters to include in the query
|
||||||
|
* @return an integer of how many row were affected
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public int insert(String sql, Object... params) throws SQLException {
|
||||||
|
prepareString = sql;
|
||||||
|
query = connection.prepareStatement(sql);
|
||||||
|
resolveParameters(query, params);
|
||||||
|
return query.executeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a DELETE statement with the specified parameters.
|
||||||
|
* In the SQL query, where there is a parameter to be included, you need to replace it with ?
|
||||||
|
*
|
||||||
|
* @param sql The SQL query to execute
|
||||||
|
* @param params The parameters to include in the query
|
||||||
|
* @return an integer of how many row were affected
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public int delete(String sql, Object... params) throws SQLException {
|
||||||
|
prepareString = sql;
|
||||||
|
query = connection.prepareStatement(sql);
|
||||||
|
resolveParameters(query, params);
|
||||||
|
return query.executeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a SELECT statement with the specified parameters.
|
||||||
|
* In the SQL query, where there is a parameter to be included, you need to replace it with ?
|
||||||
|
*
|
||||||
|
* @param sql The SQL query to execute
|
||||||
|
* @param params The parameters to include in the query
|
||||||
|
* @return a ResultSet object, which can be converted to an array using {@link #convertToArray(ResultSet)}
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public ResultSet prepareAndExecute(String sql, Object... params) throws SQLException {
|
||||||
|
prepareString = sql;
|
||||||
|
query = connection.prepareStatement(sql);
|
||||||
|
resolveParameters(query, params);
|
||||||
|
return query.executeQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/Kaaz/DiscordBot/blob/master/src/main/java/emily/db/MySQLAdapter.java#resolveParameters
|
||||||
|
private void resolveParameters(PreparedStatement query, Object... params) throws SQLException {
|
||||||
|
int index = 1;
|
||||||
|
for (Object p : params) {
|
||||||
|
if (p instanceof String) {
|
||||||
|
query.setString(index, (String) p);
|
||||||
|
} else if (p instanceof Integer) {
|
||||||
|
query.setInt(index, (int) p);
|
||||||
|
} else if (p instanceof Boolean) {
|
||||||
|
query.setBoolean(index, (Boolean) p);
|
||||||
|
} else if (p instanceof Long) {
|
||||||
|
query.setLong(index, (Long) p);
|
||||||
|
} else if (p instanceof Double) {
|
||||||
|
query.setDouble(index, (double) p);
|
||||||
|
} else if (p instanceof java.sql.Date) {
|
||||||
|
java.sql.Date d = (java.sql.Date) p;
|
||||||
|
query.setDate(index, d);
|
||||||
|
} else if (p instanceof java.util.Date) {
|
||||||
|
java.util.Date d = (java.util.Date) p;
|
||||||
|
Timestamp ts = new Timestamp(d.getTime());
|
||||||
|
query.setTimestamp(index, ts);
|
||||||
|
} else if (p instanceof Calendar) {
|
||||||
|
Calendar cal = (Calendar) p;
|
||||||
|
Timestamp ts = new Timestamp(cal.getTimeInMillis());
|
||||||
|
query.setTimestamp(index, ts);
|
||||||
|
} else if (p == null) {
|
||||||
|
query.setNull(index, Types.NULL);
|
||||||
|
} else {
|
||||||
|
throw new UnimplementedParameterException(p, index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close the MySQL connection
|
||||||
|
*
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public void close() throws SQLException {
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recreate the MySQL connection.
|
||||||
|
*
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public void reconnect() throws SQLException {
|
||||||
|
connection = new MysqlConnector(dbName, "root", "localhost", "").connect().getConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the database is closed.
|
||||||
|
*
|
||||||
|
* @return the connection status
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public boolean isClosed() throws SQLException {
|
||||||
|
return connection.isClosed();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a ResultSet object into an array.
|
||||||
|
* <br>
|
||||||
|
* <br>The first row of the array is the names of the columns.
|
||||||
|
* <br>The other rows are their corresponding value
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param rs The ResultSet returned by the SELECT query
|
||||||
|
* @return an array of Object with the table structure
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public Object[][] convertToArray(ResultSet rs) throws SQLException {
|
||||||
|
nbRow = getNbRowFromTable(prepareString);
|
||||||
|
|
||||||
|
ResultSetMetaData metadata = rs.getMetaData();
|
||||||
|
Object array[][] = new Object[nbRow + 1][metadata.getColumnCount()];
|
||||||
|
|
||||||
|
for (int i = 1; i < metadata.getColumnCount() + 1; i++) {
|
||||||
|
array[0][i - 1] = metadata.getColumnName(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pos = 1;
|
||||||
|
while (rs.next()) {
|
||||||
|
for (int i = 1; i < rs.getMetaData().getColumnCount() + 1; i++) {
|
||||||
|
array[pos][i - 1] = rs.getObject(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (array[1][0] == null)
|
||||||
|
nbRow = 0;
|
||||||
|
} catch (ArrayIndexOutOfBoundsException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
rs.getStatement().close();
|
||||||
|
|
||||||
|
return array;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public TableModel convertToTableModel(ResultSet rs) throws SQLException {
|
||||||
|
TableModel table = new TableModel();
|
||||||
|
nbRow = getNbRowFromTable(prepareString);
|
||||||
|
|
||||||
|
ResultSetMetaData metadata = rs.getMetaData();
|
||||||
|
for (int i = 1; i < metadata.getColumnCount() + 1; i++) {
|
||||||
|
table.addColumn(metadata.getColumnName(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
RowModel row = new RowModel();
|
||||||
|
for (int i = 0; i < metadata.getColumnCount(); i++) {
|
||||||
|
row.addColumnToRow(rs.getObject(i + 1));
|
||||||
|
}
|
||||||
|
table.addRow(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Only usable when @link {@link #prepareAndExecute(String, Object...) prepareAndExecute()} is called
|
||||||
|
*
|
||||||
|
* @return the number of row
|
||||||
|
*/
|
||||||
|
public int getNbRow() {
|
||||||
|
return nbRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String findTable(String sql) {
|
||||||
|
int indexFrom = sql.indexOf("FROM") + 5;
|
||||||
|
int indexWhere = sql.indexOf("WHERE") - 1;
|
||||||
|
|
||||||
|
if (indexWhere < 0) {
|
||||||
|
return sql.substring(indexFrom, indexFrom + 4);
|
||||||
|
}
|
||||||
|
return sql.substring(indexFrom, indexWhere);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getNbRowFromTable(String sql) throws SQLException {
|
||||||
|
ResultSet nbRowRs = query("SELECT COUNT(*) FROM " + findTable(sql));
|
||||||
|
if (nbRowRs.next())
|
||||||
|
return nbRowRs.getInt(1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
package netneutrality.db.controllers;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import netneutrality.db.AbstractController;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.MysqlDatabase;
|
||||||
|
import netneutrality.db.models.MBlacklist;
|
||||||
|
import netneutrality.db.models.TableModel;
|
||||||
|
|
||||||
|
public class DBBlacklist extends AbstractController {
|
||||||
|
|
||||||
|
public DBBlacklist() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an instance of {@link MysqlDatabase} with the database name as set in the {@link DBController} class
|
||||||
|
*
|
||||||
|
* @return {@link MysqlDatabase}
|
||||||
|
*/
|
||||||
|
public MysqlDatabase getDatabase() {
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int add(MBlacklist obj) {
|
||||||
|
try {
|
||||||
|
if (!isAlreadyBlacklisted(obj.getWord(), obj.getServerId())) {
|
||||||
|
int result = database.insert("INSERT INTO blacklist VALUES(?,?,?,?)", obj.getWord(), obj.getServerId(),
|
||||||
|
obj.isEnabled(), obj.getCreatorId());
|
||||||
|
return result;
|
||||||
|
} else
|
||||||
|
throw new RuntimeException("Word is already blacklisted");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int delete(String word, String serverId) {
|
||||||
|
try {
|
||||||
|
if (isAlreadyBlacklisted(word, serverId)) {
|
||||||
|
int result = database.delete("DELETE FROM blacklist WHERE word = ? AND serverId = ?", word, serverId);
|
||||||
|
return result;
|
||||||
|
} else
|
||||||
|
throw new RuntimeException("Is not blacklisted");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int enable(String word, String serverId) {
|
||||||
|
try {
|
||||||
|
if (isAlreadyBlacklisted(word, serverId)) {
|
||||||
|
int result = database.update("UPDATE blacklist SET isEnabled = 1 WHERE word = ? AND serverId = ?", word, serverId);
|
||||||
|
return result;
|
||||||
|
} else
|
||||||
|
throw new RuntimeException("Is not blacklisted");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int disable(String word, String serverId) {
|
||||||
|
try {
|
||||||
|
if (isAlreadyBlacklisted(word, serverId)) {
|
||||||
|
int result = database.update("UPDATE blacklist SET isEnabled = 0 WHERE word = ? AND serverId = ?", word, serverId);
|
||||||
|
return result;
|
||||||
|
} else
|
||||||
|
throw new RuntimeException("Is not blacklisted");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MBlacklist getBlacklistForWord(String word, String serverId) {
|
||||||
|
try {
|
||||||
|
if (isAlreadyBlacklisted(word, serverId)) {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT * FROM blacklist WHERE word = ? AND serverId = ?", word, serverId);
|
||||||
|
Object array[][] = database.convertToArray(rs);
|
||||||
|
if (database.getNbRow() != 0) {
|
||||||
|
return new MBlacklist((String) array[1][0], (Boolean) array[1][2], (String) array[1][3],
|
||||||
|
(String) array[1][1]);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
throw new RuntimeException("Is not blacklisted");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<MBlacklist> getBlacklistFromServer(String serverId) {
|
||||||
|
ArrayList<MBlacklist> output = new ArrayList<>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT * FROM blacklist WHERE serverId = ? AND isEnabled = 1", serverId);
|
||||||
|
TableModel model = database.convertToTableModel(rs);
|
||||||
|
|
||||||
|
if (model.getNbRows() != 0) {
|
||||||
|
for (int row = 0; row < database.getNbRow(); row++) {
|
||||||
|
output.add(new MBlacklist((String) model.getRow(row).get(0), (Boolean) model.getRow(row).get(2), (String) model.getRow(row).get(3),
|
||||||
|
(String) model.getRow(row).get(1)));
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
throw new RuntimeException("Blacklist is empty");
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
|
||||||
|
} catch (IndexOutOfBoundsException i) {
|
||||||
|
throw new RuntimeException("Blacklist is empty");
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAlreadyBlacklisted(String word, String serverId) throws SQLException {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT COUNT(*) FROM blacklist WHERE word = ? AND serverId = ?", word, serverId);
|
||||||
|
if (rs.next()) {
|
||||||
|
if (rs.getInt(1) == 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getControllerName() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "blacklist";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
package netneutrality.db.controllers;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
|
||||||
|
import netneutrality.db.AbstractController;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.MysqlDatabase;
|
||||||
|
import netneutrality.db.models.MMessage;
|
||||||
|
import netneutrality.handler.LogHandler;
|
||||||
|
|
||||||
|
public class DBMessage extends AbstractController {
|
||||||
|
|
||||||
|
public DBMessage() { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an instance of {@link MysqlDatabase} with the database name as set in the {@link DBController} class
|
||||||
|
*
|
||||||
|
* @return {@link MysqlDatabase}
|
||||||
|
*/
|
||||||
|
public MysqlDatabase getDatabase() {
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int log(String servername, String channelname, String username, String datesent, String messageId, String message) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
return database.insert("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", servername, channelname, username, datesent, messageId, message, null);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int logEdit(String messageId, String newMessage) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
return database.update("UPDATE log_message SET editedMessage = ? WHERE messageId = ?", newMessage, messageId);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public MMessage getMessage(String messageId) {
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE messageId = ?", messageId);
|
||||||
|
Object[][] array = database.convertToArray(rs);
|
||||||
|
if (database.getNbRow() != 0)
|
||||||
|
return new MMessage(array[1][0], array[1][1], array[1][2], array[1][3], array[1][4], array[1][5]);
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<MMessage> getMessagesFromUser(String username, String serverName, int max) {
|
||||||
|
ArrayList<MMessage> messages = new ArrayList<MMessage>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE userName = ? AND serverName = ? ORDER BY dateSent DESC", username, serverName);
|
||||||
|
Object[][] array = database.convertToArray(rs);
|
||||||
|
if (database.getNbRow() != 0) {
|
||||||
|
for (int row = 1; row <= max; row++) {
|
||||||
|
messages.add(new MMessage(array[row][0], array[row][1], array[row][2], array[row][3], array[row][4], array[row][5]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessageString(String messageId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT message FROM log_message WHERE messageId = ?", messageId);
|
||||||
|
if (rs.next())
|
||||||
|
return rs.getString(1);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return "No message found";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean setupLog(String serverId, String channelId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
int result = database.insert("INSERT INTO logging VALUES(?,?,?)", serverId, channelId, true);
|
||||||
|
if (result == 1)
|
||||||
|
return true;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean toggleLog(String serverId, String channelId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
int result = database.update("UPDATE logging SET enabled = NOT enabled");
|
||||||
|
if (result == 1)
|
||||||
|
return true;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLoggingEnabled(String serverId, String channelId) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT enabled FROM logging WHERE serverId = ? AND channelId = ?", serverId, channelId);
|
||||||
|
if (rs.next())
|
||||||
|
return rs.getBoolean(1);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getControllerName() {
|
||||||
|
return "message";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package netneutrality.db.controllers;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import netneutrality.db.AbstractController;
|
||||||
|
|
||||||
|
public class DBSettings extends AbstractController {
|
||||||
|
|
||||||
|
public DBSettings() {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLoggingChannel(String serverId) {
|
||||||
|
if (serverId.isEmpty() || serverId == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT channelId FROM logging WHERE serverId = ? AND enabled = 1", serverId);
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getString(1);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getToken() {
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT token FROM settings");
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getString(1);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSellyEmail() {
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT selly_email FROM settings");
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getString(1);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSellyKey() {
|
||||||
|
try {
|
||||||
|
ResultSet rs = database.prepareAndExecute("SELECT selly_key FROM settings");
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getString(1);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getControllerName() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return "settings";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ColumnModel {
|
||||||
|
private List<String> columns;
|
||||||
|
|
||||||
|
public ColumnModel() {
|
||||||
|
columns = new LinkedList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addColumn(String name) {
|
||||||
|
columns.add(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addAll(Collection<String> columns) {
|
||||||
|
columns.addAll(columns);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return Arrays.toString(columns.toArray());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
public class MBlacklist {
|
||||||
|
|
||||||
|
protected String word;
|
||||||
|
protected boolean enabled;
|
||||||
|
protected String creatorId;
|
||||||
|
protected String serverId;
|
||||||
|
|
||||||
|
public MBlacklist(String word, boolean enabled, String creatorId, String serverId) {
|
||||||
|
this.word = word;
|
||||||
|
this.enabled = enabled;
|
||||||
|
this.creatorId = creatorId;
|
||||||
|
this.serverId = serverId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return String The blacklisted word
|
||||||
|
*/
|
||||||
|
public String getWord() {
|
||||||
|
return word;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWord(String word) {
|
||||||
|
this.word = word;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCreatorId() {
|
||||||
|
return creatorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatorId(String creatorId) {
|
||||||
|
this.creatorId = creatorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServerId() {
|
||||||
|
return serverId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerId(String serverId) {
|
||||||
|
this.serverId = serverId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "[word=" + word + ", enabled=" + enabled + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
public class MMessage {
|
||||||
|
|
||||||
|
private String serverName;
|
||||||
|
private String channelName;
|
||||||
|
private String sender;
|
||||||
|
private String dateSent;
|
||||||
|
private String messageId;
|
||||||
|
private String message;
|
||||||
|
private String editedMessage;
|
||||||
|
|
||||||
|
public MMessage(String serverName, String channelName, String sender, String dateSent, String messageId,
|
||||||
|
String message) {
|
||||||
|
this.serverName = serverName;
|
||||||
|
this.channelName = channelName;
|
||||||
|
this.sender = sender;
|
||||||
|
this.dateSent = dateSent;
|
||||||
|
this.messageId = messageId;
|
||||||
|
this.message = message;
|
||||||
|
this.editedMessage = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public MMessage() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public MMessage(Object serverName, Object channelName, Object sender, Object dateSent, Object messageId, Object message) {
|
||||||
|
this.serverName = (String) serverName;
|
||||||
|
this.channelName = (String) channelName;
|
||||||
|
this.sender = (String) sender;
|
||||||
|
this.dateSent = (String) dateSent;
|
||||||
|
this.messageId = (String) messageId;
|
||||||
|
this.message = (String) message;
|
||||||
|
this.editedMessage = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServerName() {
|
||||||
|
return serverName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerName(String serverName) {
|
||||||
|
this.serverName = serverName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getChannelName() {
|
||||||
|
return channelName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChannelName(String channelName) {
|
||||||
|
this.channelName = channelName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSender() {
|
||||||
|
return sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSender(String sender) {
|
||||||
|
this.sender = sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDateSent() {
|
||||||
|
return dateSent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateSent(String dateSent) {
|
||||||
|
this.dateSent = dateSent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessageId() {
|
||||||
|
return messageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessageId(String messageId) {
|
||||||
|
this.messageId = messageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEditedMessage() {
|
||||||
|
return editedMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEditedMessage(String editedMessage) {
|
||||||
|
this.editedMessage = editedMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "MMessage [serverName=" + serverName + ", channelName=" + channelName + ", sender=" + sender
|
||||||
|
+ ", dateSent=" + dateSent + ", messageId=" + messageId + ", message=" + message + ", editedMessage="
|
||||||
|
+ editedMessage + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class RowModel {
|
||||||
|
private ArrayList<Object> row;
|
||||||
|
|
||||||
|
public RowModel() {
|
||||||
|
row = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RowModel(Object... objs) {
|
||||||
|
row = new ArrayList<>();
|
||||||
|
row.addAll(Arrays.asList(objs));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addColumnToRow(Object obj) {
|
||||||
|
row.add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Object> getRow() {
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return row.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class RowsModel {
|
||||||
|
private ArrayList<RowModel> rows;
|
||||||
|
|
||||||
|
public RowsModel() {
|
||||||
|
rows = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addRow(RowModel row) {
|
||||||
|
rows.add(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RowModel getRowModel(int index) {
|
||||||
|
if (!rows.isEmpty())
|
||||||
|
return rows.get(index);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addColumnInRow(int index, Object obj) {
|
||||||
|
rows.get(index).addColumnToRow(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<RowModel> getRows() {
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return rows.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SellyOrder {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String product_id;
|
||||||
|
private String email;
|
||||||
|
private String ip;
|
||||||
|
private float value;
|
||||||
|
private String currency;
|
||||||
|
private String gateway;
|
||||||
|
private int risk;
|
||||||
|
private int status;
|
||||||
|
private int cryptoValue;
|
||||||
|
private String cryptoAddress;
|
||||||
|
private float usdValue;
|
||||||
|
private String createdAt;
|
||||||
|
|
||||||
|
public SellyOrder(String id, String product_id, String email, String ip, float value, String currency, String gateway, int risk, int status, int cryptoValue, String cryptoAddress, float usdValue, String createdAt) {
|
||||||
|
this.id = id;
|
||||||
|
this.product_id = product_id;
|
||||||
|
this.email = email;
|
||||||
|
this.ip = ip;
|
||||||
|
this.value = value;
|
||||||
|
this.currency = currency;
|
||||||
|
this.gateway = gateway;
|
||||||
|
this.risk = risk;
|
||||||
|
this.status = status;
|
||||||
|
this.cryptoValue = cryptoValue;
|
||||||
|
this.cryptoAddress = cryptoAddress;
|
||||||
|
this.usdValue = usdValue;
|
||||||
|
this.createdAt = createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProduct_id() {
|
||||||
|
return product_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIp() {
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrency() {
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGateway() {
|
||||||
|
return gateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRisk() {
|
||||||
|
return risk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCryptoValue() {
|
||||||
|
return cryptoValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCryptoAddress() {
|
||||||
|
return cryptoAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getUsdValue() {
|
||||||
|
return usdValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCreatedAt() {
|
||||||
|
return createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "SellyOrder{" +
|
||||||
|
"id='" + id + '\'' +
|
||||||
|
", product_id='" + product_id + '\'' +
|
||||||
|
", email='" + email + '\'' +
|
||||||
|
", ip='" + ip + '\'' +
|
||||||
|
", value='" + value + '\'' +
|
||||||
|
", currency='" + currency + '\'' +
|
||||||
|
", gateway='" + gateway + '\'' +
|
||||||
|
", risk='" + risk + '\'' +
|
||||||
|
", status='" + status + '\'' +
|
||||||
|
", cryptoValue='" + cryptoValue + '\'' +
|
||||||
|
", cryptoAddress='" + cryptoAddress + '\'' +
|
||||||
|
", usdValue='" + usdValue + '\'' +
|
||||||
|
", createdAt='" + createdAt + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SellyProduct {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String title;
|
||||||
|
private String description;
|
||||||
|
private String stock;
|
||||||
|
private float price;
|
||||||
|
private String currency;
|
||||||
|
private boolean isPrivate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package netneutrality.db.models;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TableModel {
|
||||||
|
private ColumnModel columns;
|
||||||
|
private RowsModel rows;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public TableModel() {
|
||||||
|
this.columns = new ColumnModel();
|
||||||
|
this.rows = new RowsModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TableModel(String... columns) {
|
||||||
|
this.columns = new ColumnModel();
|
||||||
|
this.rows = new RowsModel();
|
||||||
|
|
||||||
|
this.columns.addAll(Arrays.asList(columns));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addColumn(String name) {
|
||||||
|
columns.addColumn(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RowsModel addRow(RowModel row) {
|
||||||
|
rows.addRow(row);
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RowsModel getRows() {
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Object> getRow(int index) {
|
||||||
|
return rows.getRowModel(index).getRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColumnModel getColumns() {
|
||||||
|
return columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return rows.getRows().isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNbRows() {
|
||||||
|
return rows.getRows().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Columns: [" + columns + "], Rows: [" + rows + "]";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2017 github.com/kaaz
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package netneutrality.exceptions;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class UnimplementedParameterException extends SQLException {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 4721555678157694115L;
|
||||||
|
private String s;
|
||||||
|
|
||||||
|
public UnimplementedParameterException(Object parameter) {
|
||||||
|
s = "Parameter not implemented at for: " + parameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnimplementedParameterException(Object parameter, int pos) {
|
||||||
|
s = "Parameter not implemented! parameter:" + parameter + " - position:" + pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,284 @@
|
|||||||
|
package netneutrality.handler;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.core.hooks.ListenerAdapter;
|
||||||
|
import netneutrality.command.basic.HelpCommand;
|
||||||
|
import netneutrality.command.basic.PingCommand;
|
||||||
|
import netneutrality.command.crypto.BitcoinPriceCommand;
|
||||||
|
import netneutrality.command.crypto.EthereumPriceCommand;
|
||||||
|
import netneutrality.command.crypto.LitecoinPriceCommand;
|
||||||
|
import netneutrality.command.specific.NiggerCommand;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.controllers.DBBlacklist;
|
||||||
|
import netneutrality.db.controllers.DBMessage;
|
||||||
|
import netneutrality.db.models.MBlacklist;
|
||||||
|
import netneutrality.utils.*;
|
||||||
|
|
||||||
|
public class CommandHandler extends ListenerAdapter {
|
||||||
|
|
||||||
|
private String prefix = "$";
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessageReceived(MessageReceivedEvent event) {
|
||||||
|
|
||||||
|
if (event.getAuthor().isBot()) return;
|
||||||
|
if (event.isWebhookMessage()) return;
|
||||||
|
if (MessageRateLimit.check(event)) return;
|
||||||
|
|
||||||
|
// event.getChannel().sendMessage("Message id : " + event.getMessage().getId()).queue();
|
||||||
|
|
||||||
|
((DBMessage) DBController.get("message")).log(event.getGuild().getName(), event.getTextChannel().getName(),
|
||||||
|
event.getMember().getUser().getName(),
|
||||||
|
event.getMessage().getCreationTime().toInstant().toString(), event.getMessage().getId(),
|
||||||
|
event.getMessage().getContentDisplay().trim());
|
||||||
|
|
||||||
|
if (event.isFromType(ChannelType.PRIVATE)) {
|
||||||
|
System.out.printf("[PM] %s: %s\n>", event.getAuthor().getName(), event.getMessage().getContentDisplay());
|
||||||
|
} else {
|
||||||
|
System.out.printf("[%s][%s] %s: %s\n>", event.getGuild().getName(), event.getTextChannel().getName(),
|
||||||
|
event.getMember().getEffectiveName(), event.getMessage().getContentDisplay());
|
||||||
|
|
||||||
|
|
||||||
|
if (event.getMessage().getContentStripped().startsWith(prefix)) {
|
||||||
|
String command = event.getMessage().getContentStripped().substring(1).split(" ")[0];
|
||||||
|
String args = event.getMessage().getContentStripped();
|
||||||
|
|
||||||
|
|
||||||
|
switch (command) {
|
||||||
|
|
||||||
|
case "ping":
|
||||||
|
new PingCommand().execute(event, null);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "help":
|
||||||
|
new HelpCommand().execute(event, null);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "nigger":
|
||||||
|
new NiggerCommand().execute(event, null);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "setuplog":
|
||||||
|
((DBMessage) DBController.get("message")).setupLog(event.getGuild().getId(), event.getTextChannel().getId());
|
||||||
|
|
||||||
|
event.getTextChannel().sendMessage("Logging has been enabled on the #" + event.getTextChannel().getName() + " text channnel for the server " + event.getGuild().getName()).queue();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "togglelog":
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
if (event.getAuthor().getDiscriminator().equals("5337")) {
|
||||||
|
event.getTextChannel().sendMessage("Shutting down...").queue();
|
||||||
|
|
||||||
|
event.getJDA().shutdown();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "bitcoin":
|
||||||
|
case "btc":
|
||||||
|
if (countArgs(event.getMessage().getContentStripped()) == 2) {
|
||||||
|
event.getTextChannel().sendMessage("In maintenance.").queue();
|
||||||
|
} else {
|
||||||
|
new BitcoinPriceCommand().execute(event, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "ethereum":
|
||||||
|
case "eth":
|
||||||
|
if (countArgs(event.getMessage().getContentStripped()) == 2) {
|
||||||
|
event.getTextChannel().sendMessage("In maintenance.").queue();
|
||||||
|
} else {
|
||||||
|
new EthereumPriceCommand().execute(event, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "litecoin":
|
||||||
|
case "ltc":
|
||||||
|
if (countArgs(event.getMessage().getContentStripped()) == 2) {
|
||||||
|
event.getTextChannel().sendMessage("In maintenance.").queue();
|
||||||
|
} else {
|
||||||
|
new LitecoinPriceCommand().execute(event, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
// prune command
|
||||||
|
case "prune":
|
||||||
|
case "purge":
|
||||||
|
|
||||||
|
if (UserFunction.isAdmin(event.getMember())) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
int toDelete = Integer.parseInt(parseArgs(event.getMessage().getContentStripped(), 1));
|
||||||
|
ChannelFunction.bulkDeleteMessage(event.getTextChannel(), toDelete);
|
||||||
|
} catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
|
||||||
|
event.getTextChannel().sendMessage("Failed to delete message!").queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case "blacklist":
|
||||||
|
|
||||||
|
if (UserFunction.isAdmin(event.getMember())) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (countArgs(args) >= 2) {
|
||||||
|
switch (parseArgs(args, 1)) {
|
||||||
|
|
||||||
|
case "get":
|
||||||
|
|
||||||
|
event.getTextChannel().sendMessage("Retreiving list, please wait...").queue(new Consumer<Message>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(Message t) {
|
||||||
|
String out = "";
|
||||||
|
|
||||||
|
ArrayList<MBlacklist> blacklist = null;
|
||||||
|
try {
|
||||||
|
blacklist = ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(event.getGuild().getId());
|
||||||
|
for (MBlacklist bl : blacklist) {
|
||||||
|
out += bl.getWord() + " -> " + (bl.isEnabled() ? "enabled" : "disabled") + "\n";
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
t.editMessage("List of blacklisted words for this server [" + event.getGuild().getName() + "] :\n" + (blacklist.isEmpty() ? "No word found" : out)).queue();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "add":
|
||||||
|
if (UserFunction.isAdmin(event.getMember())) {
|
||||||
|
String word = parseArgs(event.getMessage().getContentStripped(), 2);
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).add(new MBlacklist(word, true, event.getAuthor().getId(), event.getGuild().getId()));
|
||||||
|
event.getTextChannel().sendMessage("Added the word \"" + word + "\" to the blacklist.").queue();
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
event.getTextChannel().sendMessage("Error adding \"" + word + "\" to the blacklist. It's already blacklisted!").queue();
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "remove":
|
||||||
|
if (UserFunction.isAdmin(event.getMember())) {
|
||||||
|
String word = parseArgs(event.getMessage().getContentStripped(), 2);
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).delete(word, event.getGuild().getId());
|
||||||
|
event.getTextChannel().sendMessage("Removed the word \"" + word + "\" from the blacklist.").queue();
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
event.getTextChannel().sendMessage("Error removing \"" + word + "\" from the blacklist").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "disable":
|
||||||
|
|
||||||
|
if (event.getAuthor().getDiscriminator().equals("5337")) {
|
||||||
|
String word = parseArgs(event.getMessage().getContentStripped(), 2);
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).disable(word, event.getGuild().getId());
|
||||||
|
event.getTextChannel().sendMessage("Succesfully disabled the word \"" + word + "\" from the blacklist!").queue();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
LogHandler.log(e);
|
||||||
|
event.getTextChannel().sendMessage("Error disabling \"" + word + "\", it's not blacklisted!").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "enable":
|
||||||
|
|
||||||
|
if (event.getAuthor().getDiscriminator().equals("5337")) {
|
||||||
|
String word = parseArgs(event.getMessage().getContentStripped(), 2);
|
||||||
|
|
||||||
|
try {
|
||||||
|
((DBBlacklist) DBController.get("blacklist")).enable(word, event.getGuild().getId());
|
||||||
|
event.getTextChannel().sendMessage("Succesfully enabled the word \"" + word + "\" from the blacklist!").queue();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
event.getTextChannel().sendMessage("Error enabling \"" + word + "\", it's not blacklisted!").queue();
|
||||||
|
LogHandler.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "test":
|
||||||
|
if (event.getAuthor().getDiscriminator().equals("5337")) {
|
||||||
|
event.getMessage().delete().queue();
|
||||||
|
event.getTextChannel().sendMessage("```JF est gay```").queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ArrayList<MBlacklist> blacklist = ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(event.getGuild().getId());
|
||||||
|
|
||||||
|
if (!blacklist.isEmpty()) {
|
||||||
|
boolean found = false;
|
||||||
|
for (int i = 0; i < blacklist.size(); i++) {
|
||||||
|
if (blacklist.get(i).isEnabled()) {
|
||||||
|
if (event.getMessage().getContentStripped().toLowerCase().contains(blacklist.get(i).getWord()))
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (found) {
|
||||||
|
event.getMessage().delete().queue();
|
||||||
|
event.getTextChannel().sendMessage("Not in my christian server").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int countArgs(String command) {
|
||||||
|
List<String> args = Arrays.asList(command.split(" "));
|
||||||
|
return args.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String parseArgs(String command, int arg) {
|
||||||
|
List<String> args = Arrays.asList(command.split(" "));
|
||||||
|
return args.get(arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package netneutrality.handler;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
public class ConsoleHandler {
|
||||||
|
|
||||||
|
|
||||||
|
private BufferedReader br;
|
||||||
|
private String input = "";
|
||||||
|
|
||||||
|
public ConsoleHandler() {
|
||||||
|
System.out.println("Console input ready!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String init() throws IOException {
|
||||||
|
this.br = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
|
||||||
|
do {
|
||||||
|
System.out.print(">");
|
||||||
|
this.input = this.br.readLine();
|
||||||
|
} while (!this.input.equalsIgnoreCase("quit"));
|
||||||
|
|
||||||
|
return this.input;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package netneutrality.handler;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageUpdateEvent;
|
||||||
|
import net.dv8tion.jda.core.hooks.ListenerAdapter;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.controllers.DBMessage;
|
||||||
|
import netneutrality.db.controllers.DBSettings;
|
||||||
|
|
||||||
|
public class EditHandler extends ListenerAdapter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessageUpdate(MessageUpdateEvent event) {
|
||||||
|
|
||||||
|
if (event.getAuthor().isBot()) return;
|
||||||
|
|
||||||
|
String logChannel = ((DBSettings) DBController.get("settings")).getLoggingChannel(event.getGuild().getId());
|
||||||
|
if (logChannel != null) {
|
||||||
|
String originalMessage = ((DBMessage) DBController.get("message")).getMessageString(event.getMessage().getId());
|
||||||
|
((DBMessage) DBController.get("message")).logEdit(event.getMessage().getId(), event.getMessage().getContentDisplay());
|
||||||
|
|
||||||
|
EmbedBuilder editEmbed = new EmbedBuilder();
|
||||||
|
editEmbed.setColor(Color.RED);
|
||||||
|
editEmbed.setDescription(":pencil2: **Message edited by " + event.getAuthor().getName() + "**");
|
||||||
|
try {
|
||||||
|
editEmbed.addField("Original message", (originalMessage == null ? "Not available" : originalMessage), false);
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
editEmbed.addField("Original message :", "Message too long. Check db for full message", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
editEmbed.addField("Edited to :", event.getMessage().getContentDisplay(), false);
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
editEmbed.addField("Edited to :", "Message too long. Check db for full message", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
editEmbed.setFooter("ID : " + event.getMessageId(), null);
|
||||||
|
editEmbed.setTimestamp(event.getMessage().getCreationTime());
|
||||||
|
event.getJDA().getTextChannelById(logChannel).sendMessage(editEmbed.build()).queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package netneutrality.handler;
|
||||||
|
|
||||||
|
import netneutrality.utils.Settings;
|
||||||
|
|
||||||
|
public class LogHandler {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log the exception to the owner's log TextChannel as defined in {@link Settings#getLogChannel()}
|
||||||
|
*
|
||||||
|
* @param t The exceptions to log
|
||||||
|
*/
|
||||||
|
public static void log(Throwable t) {
|
||||||
|
|
||||||
|
Settings.getLogChannel().sendMessage("Error : " + t.getMessage()).queue();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package netneutrality.handler;
|
||||||
|
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
import net.dv8tion.jda.core.entities.PrivateChannel;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
|
||||||
|
public class MessageRateLimit {
|
||||||
|
|
||||||
|
private static Member lastSender;
|
||||||
|
private static OffsetDateTime timestamp;
|
||||||
|
private static int cooldown = 500000000; // 1 seconds = 1000000000 nanoseconds
|
||||||
|
|
||||||
|
public static boolean check(MessageReceivedEvent event) {
|
||||||
|
|
||||||
|
if (event.getChannel() instanceof PrivateChannel)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (lastSender == null || timestamp == null) {
|
||||||
|
lastSender = event.getMember();
|
||||||
|
timestamp = event.getMessage().getCreationTime();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getMember().getUser().getId().equals(lastSender.getUser().getId())) {
|
||||||
|
if (event.getMessage().getCreationTime().minusNanos(cooldown).isBefore(timestamp)) {
|
||||||
|
lastSender = event.getMember();
|
||||||
|
timestamp = event.getMessage().getCreationTime();
|
||||||
|
event.getMessage().delete().queue();
|
||||||
|
System.err.print("Rate limited\n>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastSender = event.getMember();
|
||||||
|
timestamp = event.getMessage().getCreationTime();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
package netneutrality.handler;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
|
import netneutrality.command.Visibility;
|
||||||
|
import netneutrality.command.basic.HelpCommand;
|
||||||
|
import netneutrality.utils.MessageFunction;
|
||||||
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.core.hooks.ListenerAdapter;
|
||||||
|
import netneutrality.command.AbstractCommand;
|
||||||
|
import netneutrality.db.DBController;
|
||||||
|
import netneutrality.db.controllers.DBBlacklist;
|
||||||
|
import netneutrality.db.controllers.DBMessage;
|
||||||
|
import netneutrality.db.models.MBlacklist;
|
||||||
|
import netneutrality.utils.Settings;
|
||||||
|
import netneutrality.utils.UserFunction;
|
||||||
|
|
||||||
|
public class NewCommandListener extends ListenerAdapter {
|
||||||
|
|
||||||
|
private HashMap<String, AbstractCommand> commands = new HashMap<>();
|
||||||
|
private HashMap<String, AbstractCommand> commandsAlias = new HashMap<>();
|
||||||
|
private Map<String, String[]> alias = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
public NewCommandListener() {
|
||||||
|
initCommands();
|
||||||
|
initAlias();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessageReceived(MessageReceivedEvent event) {
|
||||||
|
|
||||||
|
if (event.getAuthor().isBot()) return;
|
||||||
|
if (event.isWebhookMessage()) return;
|
||||||
|
if (MessageRateLimit.check(event)) return;
|
||||||
|
|
||||||
|
|
||||||
|
if (event.isFromType(ChannelType.TEXT))
|
||||||
|
((DBMessage) DBController.get("message")).log(event.getGuild().getName(), event.getTextChannel().getName(),
|
||||||
|
event.getMember().getUser().getName(),
|
||||||
|
event.getMessage().getCreationTime().format(DateTimeFormatter.ofPattern(Settings.DATETIMEFORMAT)), event.getMessage().getId(),
|
||||||
|
event.getMessage().getContentDisplay().trim());
|
||||||
|
|
||||||
|
Message message = event.getMessage();
|
||||||
|
String msg = message.getContentDisplay().trim();
|
||||||
|
|
||||||
|
if (msg.startsWith(Settings.PREFIX)) {
|
||||||
|
msg = msg.substring(1);
|
||||||
|
String cmd = msg.split(" ", 2)[0];
|
||||||
|
|
||||||
|
|
||||||
|
if (commands.containsKey(cmd) || commandsAlias.containsKey(cmd)) {
|
||||||
|
|
||||||
|
AbstractCommand c = commands.containsKey(cmd) ? commands.get(cmd) : commandsAlias.get(cmd);
|
||||||
|
|
||||||
|
|
||||||
|
if (Visibility.check(event.getChannel(), c.getVisibility())) {
|
||||||
|
if (c.needAdmin() && c.getVisibility() != Visibility.PRIVATE) {
|
||||||
|
if (!UserFunction.isAdmin(event.getMember())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmd.equals("help")) {
|
||||||
|
((HelpCommand) commands.get("help")).sendHelp(commands, commandsAlias, event.getAuthor(), event.getChannel());
|
||||||
|
} else {
|
||||||
|
c.execute(event, msg.replaceFirst("(" + cmd + ")(\\ )?", ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ArrayList<MBlacklist> blacklist = new ArrayList<>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
blacklist = ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(event.getGuild().getId());
|
||||||
|
} catch (RuntimeException e) { }
|
||||||
|
|
||||||
|
if (!blacklist.isEmpty()) {
|
||||||
|
|
||||||
|
boolean found = false;
|
||||||
|
for (int i = 0; i < blacklist.size(); i++) {
|
||||||
|
if (msg.toLowerCase().contains(blacklist.get(i).getWord()))
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found) {
|
||||||
|
event.getMessage().delete().queue();
|
||||||
|
event.getTextChannel().sendMessage("Not in my christian server").queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initCommands() {
|
||||||
|
System.out.println("Loading commands..");
|
||||||
|
|
||||||
|
Reflections reflections = new Reflections("netneutrality.command");
|
||||||
|
Set<Class<? extends AbstractCommand>> classes = reflections.getSubTypesOf(AbstractCommand.class);
|
||||||
|
|
||||||
|
for (Class<? extends AbstractCommand> s : classes) {
|
||||||
|
try {
|
||||||
|
if (Modifier.isAbstract(s.getModifiers())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractCommand command = s.getConstructor().newInstance();
|
||||||
|
|
||||||
|
if (!command.isEnabled())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!commands.containsKey(command.getCommand())) {
|
||||||
|
commands.put(command.getCommand(), command);
|
||||||
|
}
|
||||||
|
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
|
||||||
|
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Loaded " + commands.size() + " commands!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initAlias() {
|
||||||
|
|
||||||
|
for (AbstractCommand command : commands.values()) {
|
||||||
|
for (String alias : command.getAlias()) {
|
||||||
|
if (!commandsAlias.containsKey(alias))
|
||||||
|
commandsAlias.put(alias, command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package netneutrality.http;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Selly {
|
||||||
|
|
||||||
|
private String authorization;
|
||||||
|
private byte[] encodedAuth;
|
||||||
|
|
||||||
|
public Selly(String email, String apiKey) {
|
||||||
|
String concat = email + ":" + apiKey;
|
||||||
|
encodedAuth = Base64.getEncoder().encode(concat.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
public JSONArray getOrders() {
|
||||||
|
WebModule orders = new WebModule("https://selly.gg/api/v2/orders");
|
||||||
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
headers.put("Authorization", "Basic " + new String(encodedAuth));
|
||||||
|
JSONArray response = null;
|
||||||
|
try {
|
||||||
|
orders.request(headers);
|
||||||
|
response = orders.getAsArray();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JSONObject getOrderById(String id) {
|
||||||
|
WebModule order = new WebModule("https://selly.gg/api/v2/orders/" + id);
|
||||||
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
headers.put("Authorization", "Basic " + new String(encodedAuth));
|
||||||
|
JSONObject response = null;
|
||||||
|
try {
|
||||||
|
order.request(headers);
|
||||||
|
response = order.getAsObject();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JSONArray getProducts() {
|
||||||
|
WebModule orders = new WebModule("https://selly.gg/api/v2/products");
|
||||||
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
headers.put("Authorization", "Basic " + new String(encodedAuth));
|
||||||
|
JSONArray response = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
orders.request(headers);
|
||||||
|
response = orders.getAsArray();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
package netneutrality.http;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import com.google.common.base.Joiner;
|
||||||
|
import okhttp3.*;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
public class WebModule {
|
||||||
|
|
||||||
|
private String url;
|
||||||
|
private OkHttpClient client = new OkHttpClient();
|
||||||
|
private Response response;
|
||||||
|
|
||||||
|
public WebModule(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a request to the specified URL in the constructor.
|
||||||
|
* <br>Needs to be executed before any other method call
|
||||||
|
*
|
||||||
|
* @return an instance of the WebModule class with the Response of the Web Request
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public WebModule request() throws IOException {
|
||||||
|
|
||||||
|
Request request = new Request.Builder().url(this.url)
|
||||||
|
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36")
|
||||||
|
.build();
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebModule request(Map<String, String> headers) throws IOException {
|
||||||
|
|
||||||
|
Request.Builder builder = new Request.Builder().url(this.url)
|
||||||
|
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36");
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> header : headers.entrySet()) {
|
||||||
|
builder.addHeader(header.getKey(), header.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
Request request = builder.build();
|
||||||
|
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebModule post(TreeMap<String, String> params, Map<String, String> headers) throws IOException {
|
||||||
|
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), createJson(params));
|
||||||
|
Request.Builder builder = new Request.Builder().url(this.url)
|
||||||
|
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36");
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> header : headers.entrySet()) {
|
||||||
|
builder.addHeader(header.getKey(), header.getValue());
|
||||||
|
}
|
||||||
|
Request request = builder.build();
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String createJson(TreeMap<String, String> params) {
|
||||||
|
|
||||||
|
|
||||||
|
StringBuilder json = new StringBuilder();
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> param : params.entrySet()) {
|
||||||
|
String str = "\"" + param.getKey() + "\":\"" + param.getValue() + "\"";
|
||||||
|
json.append(str);
|
||||||
|
json.append(",");
|
||||||
|
}
|
||||||
|
json.insert(0, "{");
|
||||||
|
|
||||||
|
return (json.length() > 1 ? json.substring(0, json.length() - 1) + "}" : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String createJsonArray(List<String> list) {
|
||||||
|
StringBuilder json = new StringBuilder();
|
||||||
|
|
||||||
|
for (String str : list) {
|
||||||
|
json.append("\"" + str + "\"");
|
||||||
|
json.append(",");
|
||||||
|
}
|
||||||
|
json.insert(0, "[");
|
||||||
|
|
||||||
|
return (json.length() > 1 ? json.substring(0, json.length() - 1) + "]" : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String createJsonArray(TreeMap<String, String> users) {
|
||||||
|
StringBuilder json = new StringBuilder();
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> param : users.entrySet()) {
|
||||||
|
String str = "{\"" + param.getKey() + "\":\"" + param.getValue() + "\"}";
|
||||||
|
json.append(str);
|
||||||
|
json.append(",");
|
||||||
|
}
|
||||||
|
json.insert(0, "[");
|
||||||
|
|
||||||
|
return (json.length() > 1 ? json.substring(0, json.length() - 1) + "]" : "[]");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the response as a JSONObject
|
||||||
|
* @throws JSONException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public JSONObject getAsObject() throws JSONException, IOException {
|
||||||
|
if (response == null)
|
||||||
|
throw new RuntimeException("Request has not been sent");
|
||||||
|
|
||||||
|
return new JSONObject(response.body().string());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use if your response start with an array : [ ]
|
||||||
|
*
|
||||||
|
* @return the response as a JSONArray
|
||||||
|
* @throws JSONException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public JSONArray getAsArray() throws JSONException, IOException {
|
||||||
|
if (response == null)
|
||||||
|
throw new RuntimeException("Request has not been sent");
|
||||||
|
|
||||||
|
return new JSONArray(response.body().string());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the response as a String
|
||||||
|
* @throws JSONException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public String getRawData() throws IOException {
|
||||||
|
if (response == null)
|
||||||
|
throw new RuntimeException("Request has not been sent");
|
||||||
|
|
||||||
|
return response.body().string();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package netneutrality.http.server;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import com.sun.net.httpserver.HttpHandler;
|
||||||
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
import netneutrality.MusicBot;
|
||||||
|
import netneutrality.http.WebModule;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
public class GuildBrowser implements HttpHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(HttpExchange he) throws IOException {
|
||||||
|
|
||||||
|
|
||||||
|
String url[] = he.getRequestURI().toString().split("/");
|
||||||
|
StringBuilder response = new StringBuilder();
|
||||||
|
String json;
|
||||||
|
|
||||||
|
if (url.length > 2) {
|
||||||
|
TreeMap<String, String> users = new TreeMap<>();
|
||||||
|
for (Guild guild : MusicBot.getJDA().getGuilds()) {
|
||||||
|
if (guild.getName().equalsIgnoreCase(url[2])) {
|
||||||
|
for (Member member : guild.getMembers()) {
|
||||||
|
users.put(member.getUser().getName(), member.getEffectiveName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
json = WebModule.createJsonArray(users);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (Guild guild : MusicBot.getJDA().getGuilds()) {
|
||||||
|
response.append("\"" + guild.getName() + "\"");
|
||||||
|
response.append(",");
|
||||||
|
}
|
||||||
|
response.insert(0, "[");
|
||||||
|
|
||||||
|
json = response.substring(0, response.length() - 1) + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
he.getResponseHeaders().add("Content-Type", "application/json");
|
||||||
|
he.sendResponseHeaders(200, json.getBytes().length);
|
||||||
|
OutputStream os = he.getResponseBody();
|
||||||
|
os.write(json.getBytes());
|
||||||
|
os.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package netneutrality.http.server;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import com.sun.net.httpserver.HttpHandler;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
public class RootHandler implements HttpHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(HttpExchange he) throws IOException {
|
||||||
|
String response = "<h1>Server start success if you see this message</h1>";
|
||||||
|
he.sendResponseHeaders(200, response.length());
|
||||||
|
OutputStream os = he.getResponseBody();
|
||||||
|
os.write(response.getBytes());
|
||||||
|
os.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package netneutrality.http.server;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import com.sun.net.httpserver.HttpHandler;
|
||||||
|
import com.sun.net.httpserver.HttpServer;
|
||||||
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
import netneutrality.MusicBot;
|
||||||
|
import netneutrality.http.WebModule;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
public class WebApi {
|
||||||
|
|
||||||
|
private int port = 9000;
|
||||||
|
private HttpServer server;
|
||||||
|
|
||||||
|
public WebApi() {
|
||||||
|
System.out.println("Starting web server...");
|
||||||
|
try {
|
||||||
|
server = HttpServer.create(new InetSocketAddress(port), 0);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
server.createContext("/", new RootHandler());
|
||||||
|
server.createContext("/guild", new GuildBrowser());
|
||||||
|
server.setExecutor(null);
|
||||||
|
server.start();
|
||||||
|
System.out.println("Web server started at [" + server.getAddress().getAddress().toString() + "]");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package netneutrality.utils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
import net.dv8tion.jda.core.entities.TextChannel;
|
||||||
|
|
||||||
|
public class ChannelFunction {
|
||||||
|
|
||||||
|
public static void bulkDeleteMessage(TextChannel channel, int toDelete) {
|
||||||
|
|
||||||
|
if (toDelete >= 2500) return;
|
||||||
|
|
||||||
|
Thread deleteMessage = new Thread(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
int toDeleteFinal = toDelete + 1;
|
||||||
|
int iteration = toDeleteFinal / 100;
|
||||||
|
for (int i = 0; i < iteration; i++) {
|
||||||
|
List<Message> messages = channel.getHistory().retrievePast(100).complete();
|
||||||
|
channel.deleteMessages(messages).complete();
|
||||||
|
toDeleteFinal -= 100;
|
||||||
|
|
||||||
|
System.out.println("Deleted 100 message");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toDeleteFinal > 0) {
|
||||||
|
List<Message> messages = channel.getHistory().retrievePast(toDeleteFinal).complete();
|
||||||
|
channel.deleteMessages(messages).complete();
|
||||||
|
System.out.println("Deleted " + toDeleteFinal + " messages");
|
||||||
|
} else {
|
||||||
|
System.out.println("No more message");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
deleteMessage.start();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package netneutrality.utils;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* This file is closed-source. It should not be distributed or copied in any way or form
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
|
||||||
|
public class MessageFunction {
|
||||||
|
|
||||||
|
public static Member getStartingMention(Message message) {
|
||||||
|
if (isStartingWithMention(message)) {
|
||||||
|
return message.getMentionedMembers().get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isStartingWithMention(Message message) {
|
||||||
|
if (!message.isFromType(ChannelType.TEXT))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
List<Member> mentions= message.getMentionedMembers();
|
||||||
|
|
||||||
|
for (Member member : mentions) {
|
||||||
|
if (message.getContentDisplay().startsWith("@" + member.getUser().getName()))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package netneutrality.utils;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
|
import net.dv8tion.jda.core.entities.TextChannel;
|
||||||
|
import net.dv8tion.jda.core.entities.User;
|
||||||
|
|
||||||
|
public class Settings {
|
||||||
|
|
||||||
|
public static final String DATETIMEFORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||||
|
public static String PREFIX = "$";
|
||||||
|
private static User owner;
|
||||||
|
private static Guild ownerGuild;
|
||||||
|
private static TextChannel logChannel;
|
||||||
|
|
||||||
|
public static User getCreator() {
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setCreator(User creator) {
|
||||||
|
Settings.owner = creator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Guild getOwnerGuild() {
|
||||||
|
return ownerGuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setOwnerGuild(Guild ownerGuild) {
|
||||||
|
Settings.ownerGuild = ownerGuild;
|
||||||
|
logChannel = ownerGuild.getTextChannelById("400383009330823179");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TextChannel getLogChannel() {
|
||||||
|
return logChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package netneutrality.utils;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.core.Permission;
|
||||||
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
import net.dv8tion.jda.core.entities.Role;
|
||||||
|
|
||||||
|
public class UserFunction {
|
||||||
|
|
||||||
|
public static boolean isAdmin(Member user) {
|
||||||
|
boolean isAdmin = false;
|
||||||
|
for(Role role : user.getRoles()) {
|
||||||
|
if (role.getPermissions().contains(Permission.MANAGE_SERVER) || role.getPermissions().contains(Permission.ADMINISTRATOR))
|
||||||
|
isAdmin = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isAdmin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in new issue
Block a user