Compare commits

...

2 commits

Author SHA1 Message Date
unknown f210240bd5 Merge branch 'main' of https://fem.mint.lgbt/oko/kiafumi 2022-03-30 13:58:23 -07:00
unknown 5bb2346da3 Mrow 2022-03-30 13:58:01 -07:00
8 changed files with 235 additions and 11 deletions

View file

@ -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>

View file

@ -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;

View 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;
}
}

View 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;
}
}

View file

@ -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++;
}

View file

@ -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 +"}";
}
}

View file

@ -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;

View file

@ -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.