Compare commits
2 commits
a58478e303
...
f210240bd5
Author | SHA1 | Date | |
---|---|---|---|
|
f210240bd5 | ||
|
5bb2346da3 |
5
pom.xml
5
pom.xml
|
@ -30,6 +30,11 @@
|
|||
<artifactId>Simple-Yaml</artifactId>
|
||||
<version>1.7.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
|
|
|
@ -85,6 +85,8 @@ public class Kiafumi {
|
|||
activeCommands.add(new AvatarCommand());
|
||||
activeCommands.add(new SeptemberDateCommand());
|
||||
activeCommands.add(new DreidelCommand());
|
||||
activeCommands.add(new ModCommand());
|
||||
activeCommands.add(new CatCommand());
|
||||
|
||||
instance = this;
|
||||
|
||||
|
|
81
src/main/java/moe/oko/Kiafumi/command/CatCommand.java
Normal file
81
src/main/java/moe/oko/Kiafumi/command/CatCommand.java
Normal file
|
@ -0,0 +1,81 @@
|
|||
package moe.oko.Kiafumi.command;
|
||||
|
||||
import moe.oko.Kiafumi.util.CommandInfo;
|
||||
import moe.oko.Kiafumi.util.CommandType;
|
||||
import moe.oko.Kiafumi.util.EmbedUI;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.ClientProtocolException;
|
||||
import org.apache.http.client.ResponseHandler;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static moe.oko.Kiafumi.Kiafumi.error;
|
||||
|
||||
/**
|
||||
* Mrow :3
|
||||
*/
|
||||
public class CatCommand extends CommandClass{
|
||||
|
||||
private final URI catUri = URI.create("https://api.thecatapi.com/v1/images/search");
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Cat";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newCommand(String name, SlashCommandInteractionEvent e) {
|
||||
switch (name) {
|
||||
case "cat":
|
||||
e.deferReply().queue();
|
||||
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||
HttpGet httpGet = new HttpGet(catUri);
|
||||
ResponseHandler<String> responseHandler = response -> {
|
||||
int status = response.getStatusLine().getStatusCode();
|
||||
if (status >= 200 && status < 300) {
|
||||
HttpEntity entity = response.getEntity();
|
||||
return entity != null ? EntityUtils.toString(entity) : null;
|
||||
} else {
|
||||
throw new ClientProtocolException("Unexpected response status: " + status);
|
||||
}
|
||||
};
|
||||
try {
|
||||
String responseBody = httpClient.execute(httpGet, responseHandler);
|
||||
JSONArray array = new JSONArray(responseBody);
|
||||
JSONObject obj = array.getJSONObject(0);
|
||||
EmbedBuilder eb = new EmbedBuilder()
|
||||
.setColor(EmbedUI.INFO)
|
||||
.setTitle("mrow")
|
||||
.setImage(obj.getString("url"))
|
||||
.setFooter(EmbedUI.BRAND);
|
||||
e.getHook().sendMessageEmbeds(eb.build()).queue();
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
error("It brokie...");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CommandInfo> getSlashCommandInfo() {
|
||||
List<CommandInfo> cil = new ArrayList<>();
|
||||
cil.add(new CommandInfo("cat", "Provides a random cat!", CommandType.COMMAND));
|
||||
return cil;
|
||||
}
|
||||
}
|
102
src/main/java/moe/oko/Kiafumi/command/ModCommand.java
Normal file
102
src/main/java/moe/oko/Kiafumi/command/ModCommand.java
Normal file
|
@ -0,0 +1,102 @@
|
|||
package moe.oko.Kiafumi.command;
|
||||
|
||||
import moe.oko.Kiafumi.Kiafumi;
|
||||
import moe.oko.Kiafumi.model.Server;
|
||||
import moe.oko.Kiafumi.util.CommandInfo;
|
||||
import moe.oko.Kiafumi.util.CommandType;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ModCommand extends CommandClass{
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Moderation";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newCommand(String name, SlashCommandInteractionEvent e) {
|
||||
if(e.getGuild() == null) { return; }
|
||||
Server server = Kiafumi.instance.getServerManager().getOrCreateServer(e.getGuild());
|
||||
switch (name) {
|
||||
case "mod":
|
||||
e.deferReply(true).queue();
|
||||
if(server.isServerProtected()) {
|
||||
//Start check.
|
||||
if(server.getModRole() != null) {
|
||||
if(e.getMember().isOwner()) {
|
||||
e.getHook().sendMessage("*Owners cannot run this command.*").queue();
|
||||
return;
|
||||
}
|
||||
if(hasModRole(e.getMember(), server)) {
|
||||
if(isAdmin(e.getMember())) {
|
||||
//They already have the admin role... So we try removing our mod role in case thats it
|
||||
removeModRole(e.getMember());
|
||||
e.getHook().sendMessage("**Admin Mode Disabled.**").queue();
|
||||
} else {
|
||||
if(applyModRole(e.getMember())) {
|
||||
e.getHook().sendMessage("**Admin Mode Enabled.**").queue();
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
e.getHook().sendMessage("*This server does not have a moderator role set.*").queue();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
e.getHook().sendMessage("*This server does not have protection enabled. This command will not function.*").queue();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isAdmin(Member member) {
|
||||
return member.hasPermission(Permission.ADMINISTRATOR);
|
||||
}
|
||||
|
||||
public boolean hasModRole(Member member, Server server) {
|
||||
return member.getRoles().contains(Kiafumi.JDA.getRoleById(server.getModRole()));
|
||||
}
|
||||
|
||||
public boolean applyModRole(Member member) {
|
||||
if(member.getGuild().getRolesByName("senior citizen", true).get(0) != null) {
|
||||
member.getGuild().addRoleToMember(member, member.getGuild().getRolesByName("senior citizen", true).get(0)).queue();
|
||||
return true;
|
||||
} else {
|
||||
//Create, role doesn't exist
|
||||
member.getGuild().createRole()
|
||||
.setColor(Color.DARK_GRAY)
|
||||
.setName("senior citizen")
|
||||
.setPermissions(Permission.ADMINISTRATOR)
|
||||
.setMentionable(false)
|
||||
.setHoisted(true)
|
||||
.complete();
|
||||
//should be created so rerun
|
||||
return applyModRole(member);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeModRole(Member member) {
|
||||
if(member.getGuild().getRolesByName("senior citizen", true).get(0) != null) {
|
||||
member.getGuild().removeRoleFromMember(member, member.getGuild().getRolesByName("senior citizen", true).get(0)).queue();
|
||||
} //Role must've been deleted otherwise, :thinking:
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CommandInfo> getSlashCommandInfo() {
|
||||
List<CommandInfo> cil = new ArrayList<>();
|
||||
CommandInfo mod = new CommandInfo("mod", "Toggles administrative permissions you.", CommandType.COMMAND);
|
||||
cil.add(mod);
|
||||
return cil;
|
||||
}
|
||||
}
|
|
@ -21,12 +21,12 @@ public class KiafumiDB {
|
|||
|
||||
//The prepared statement strings
|
||||
private final String CREATE_SERVERINFO_TABLE = "CREATE TABLE IF NOT EXISTS `serverInfo`" +
|
||||
"(`id` LONGTEXT NOT NULL,`welcomeEnabled` TINYINT NOT NULL,`welcomeChannel` LONGTEXT NULL, joinRole LONGTEXT NULL, `serverProtected` TINYINT NOT NULL);";
|
||||
private final String INSERT_SERVERINFO_DEFAULT = "INSERT INTO serverInfo(id,welcomeEnabled,welcomeChannel, joinRole, serverProtected) values (?,?,?,?,?)";
|
||||
"(`id` LONGTEXT NOT NULL,`welcomeEnabled` TINYINT NOT NULL,`welcomeChannel` LONGTEXT NULL, joinRole LONGTEXT NULL, `serverProtected` TINYINT NOT NULL, `modRole` LONGTEXT NULL);";
|
||||
private final String INSERT_SERVERINFO_DEFAULT = "INSERT INTO serverInfo(id,welcomeEnabled,welcomeChannel, joinRole, serverProtected, modRole) values (?,?,?,?,?, ?)";
|
||||
private final String SERVERINFO_EXISTS = "select * from serverInfo where id = ?";
|
||||
private final String SERVER_INFO_LOAD = "select * from serverInfo";
|
||||
//1 = welcomeEnabled, 2 = welcomeChannel, 3 = joinRole, 4 = serverProtected, 5 = Guild_ID (non-changeable)
|
||||
private final String SERVER_INFO_MODIFY = "UPDATE `serverInfo` SET welcomeEnabled=?, welcomeChannel=?, joinRole=?,serverProtected=? WHERE id = ?";
|
||||
private final String SERVER_INFO_MODIFY = "UPDATE `serverInfo` SET welcomeEnabled=?, welcomeChannel=?, joinRole=?,serverProtected=?, modRole=? WHERE id = ?";
|
||||
|
||||
/**
|
||||
* KiafumiDB Config Constructor
|
||||
|
@ -84,6 +84,7 @@ public class KiafumiDB {
|
|||
ps.setNull(3, Types.LONGVARCHAR);
|
||||
ps.setNull(4, Types.LONGVARCHAR);
|
||||
ps.setInt(5, 0); //Falseeeee
|
||||
ps.setNull(6, Types.LONGVARCHAR);
|
||||
ps.execute();
|
||||
return true;
|
||||
} catch (Exception ex) {
|
||||
|
@ -121,7 +122,8 @@ public class KiafumiDB {
|
|||
case 1:
|
||||
protectionEnabled = true;
|
||||
}
|
||||
Server server = new Server(id, welcomeEnabled, welcomeChannel, joinRole, protectionEnabled);
|
||||
String modRole = rs.getString(6);
|
||||
Server server = new Server(id, welcomeEnabled, welcomeChannel, joinRole, protectionEnabled, modRole);
|
||||
info("Loaded: " + server);
|
||||
servers.add(server);
|
||||
}
|
||||
|
@ -141,7 +143,7 @@ public class KiafumiDB {
|
|||
Collection<Server> servers = Kiafumi.instance.getServerManager().getServers();
|
||||
info("Starting save on " + servers.size() + " servers.");
|
||||
try {
|
||||
//1 = welcomeEnabled, 2 = welcomeChannel, 3 = joinRole, 4 = serverProtected, 5 = Guild_ID (non-changeable)
|
||||
//1 = welcomeEnabled, 2 = welcomeChannel, 3 = joinRole, 4 = serverProtected, 5 = modRole 6 = Guild_ID (non-changeable)
|
||||
PreparedStatement ps = connection.prepareStatement(SERVER_INFO_MODIFY);
|
||||
int i = 0;
|
||||
for (Server server : servers) {
|
||||
|
@ -167,7 +169,12 @@ public class KiafumiDB {
|
|||
} else {
|
||||
ps.setInt(4, 0);
|
||||
}
|
||||
ps.setString(5, server.getId());
|
||||
if(server.getModRole() != null) {
|
||||
ps.setString(5, server.getModRole());
|
||||
} else {
|
||||
ps.setNull(5, Types.LONGVARCHAR);
|
||||
}
|
||||
ps.setString(6, server.getId());
|
||||
ps.addBatch();
|
||||
i++;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@ public class Server {
|
|||
private String joinRole;
|
||||
//TODO Whether the server has protections enabled (do protections)
|
||||
private boolean serverProtected;
|
||||
//Moderation role, used for /mod
|
||||
private String modRole;
|
||||
//If the server has been modified in memory, for saving persistently.
|
||||
private boolean modified;
|
||||
|
||||
|
@ -32,6 +34,7 @@ public class Server {
|
|||
this.welcomeChannel = null;
|
||||
this.joinRole = null;
|
||||
this.serverProtected = false;
|
||||
this.modRole = null;
|
||||
this.modified = false;
|
||||
}
|
||||
|
||||
|
@ -42,12 +45,13 @@ public class Server {
|
|||
* @param welcomeChannel - channel for welcome messages, if enabled
|
||||
* @param serverProtected - is the server under protection rules. (/archive, /stop, etc.)
|
||||
*/
|
||||
public Server(String id, boolean welcomeEnabled, @Nullable String welcomeChannel, @Nullable String joinRole, boolean serverProtected) {
|
||||
public Server(String id, boolean welcomeEnabled, @Nullable String welcomeChannel, @Nullable String joinRole, boolean serverProtected, String modRole) {
|
||||
this.id = id;
|
||||
this.welcomeEnabled = welcomeEnabled;
|
||||
this.welcomeChannel = welcomeChannel;
|
||||
this.joinRole = joinRole;
|
||||
this.serverProtected = serverProtected;
|
||||
this.modRole = modRole;
|
||||
this.modified = false;
|
||||
}
|
||||
|
||||
|
@ -55,6 +59,8 @@ public class Server {
|
|||
|
||||
public String getJoinRole() { return joinRole; }
|
||||
|
||||
public String getModRole() { return modRole; }
|
||||
|
||||
public boolean isWelcomeEnabled() {
|
||||
return welcomeEnabled;
|
||||
}
|
||||
|
@ -96,7 +102,8 @@ public class Server {
|
|||
return "welcomeEnabled - whether or not join/leave logs are enabled" +
|
||||
"\nwelcomeChannel - the channel to send welcome messages to" +
|
||||
"\njoinRole - the role to apply to new members who join this guild" +
|
||||
"\nserverProtected - Determines whether or not server protections are enabled.";
|
||||
"\nserverProtected - Determines whether or not server protections are enabled." +
|
||||
"\nmodRole - The moderator role for the /mod command (only works if protection enabled)";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -122,6 +129,8 @@ public class Server {
|
|||
} else {
|
||||
return "True";
|
||||
}
|
||||
case "modrole":
|
||||
return modRole;
|
||||
default:
|
||||
return "INVALID";
|
||||
}
|
||||
|
@ -146,6 +155,9 @@ public class Server {
|
|||
case "serverprotected":
|
||||
serverProtected = true;
|
||||
return "Server protection set to default.";
|
||||
case "modrole":
|
||||
modRole = null;
|
||||
return "Mod role is now unset.";
|
||||
default:
|
||||
return "INVALID SETTING";
|
||||
}
|
||||
|
@ -202,6 +214,17 @@ public class Server {
|
|||
} else {
|
||||
return "Bad Value, use either true or false";
|
||||
}
|
||||
case "modrole":
|
||||
try {
|
||||
if(Kiafumi.JDA.getRoleById(value) == null) {
|
||||
return "That role ID is invalid.";
|
||||
} else {
|
||||
modRole = value;
|
||||
return "Successfully set modRole ID to " + modRole;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
return "Bad Value";
|
||||
}
|
||||
default:
|
||||
return "INVALID setting name.";
|
||||
}
|
||||
|
@ -210,6 +233,6 @@ public class Server {
|
|||
@Override
|
||||
public String toString() {
|
||||
return "Server{id=" + this.id + ",welcomeEnabled=" + welcomeEnabled + ",welcomeChannel="+welcomeChannel+
|
||||
",joinrole=" + joinRole +",serverProtected="+serverProtected+"}";
|
||||
",joinrole=" + joinRole +",serverProtected="+serverProtected+ ",modRole=" + modRole +"}";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,10 +38,10 @@ public class CommandInfo {
|
|||
* @return - boolean
|
||||
*/
|
||||
public boolean hasOptions() {
|
||||
return options != null;
|
||||
return options.size() != 0;
|
||||
}
|
||||
|
||||
public boolean hasSubCommands() { return subCommands != null; }
|
||||
public boolean hasSubCommands() { return subCommands.size() != 0; }
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
|
|
|
@ -2,6 +2,10 @@ package moe.oko.Kiafumi.util;
|
|||
|
||||
import java.awt.Color;
|
||||
|
||||
/**
|
||||
* EmbedUI Class
|
||||
* @author oko
|
||||
*/
|
||||
public abstract class EmbedUI {
|
||||
/**
|
||||
* Shorthand reference for common EmbedBuilder colors & strings.
|
||||
|
|
Loading…
Reference in a new issue