Skip to content

Commit

Permalink
h
Browse files Browse the repository at this point in the history
  • Loading branch information
NazrinNya committed Jul 6, 2023
1 parent a73c7ee commit 9068f1f
Show file tree
Hide file tree
Showing 10 changed files with 192 additions and 71 deletions.
18 changes: 5 additions & 13 deletions src/main/java/plugin/Ploogin.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,13 @@

import static mindustry.Vars.mods;
import static mindustry.Vars.player;
import static plugin.ConfigJson.discordurl;
import static plugin.commands.BanMenu.loadBanMenu;
import static plugin.functions.MongoDB.MongoDbPlayerCreation;
import static plugin.functions.MongoDB.MongoDbPlayerRankCheck;
import static plugin.functions.Other.kickIfBanned;
import static plugin.functions.Other.welcomeMenu;
import static plugin.utils.Checks.isConsole;


public class Ploogin extends Plugin implements ApplicationListener{
Expand All @@ -38,7 +41,6 @@ public class Ploogin extends Plugin implements ApplicationListener{
public static MongoCollection<Document> playerCollection;
public static Player victim;
public static String reason;
public static Player moderator;

public static long time;

Expand All @@ -63,16 +65,7 @@ public void init() {
MongoDbPlayerRankCheck(plr.uuid());
});
Events.on(EventType.PlayerConnect.class, event -> {
Document user = playerCollection.find(Filters.eq("uuid", event.player.uuid())).first();
if (user == null){
return;
}
long lastBan = user.getLong("lastBan");
Date date = new Date();
if (lastBan > date.getTime()) {
String timeUntilUnban = Bundle.formatDuration(lastBan - date.getTime());
event.player.con.kick("You have been banned! Wait " + timeUntilUnban + " more for unban!", 0);
}
kickIfBanned(event.player);
});
}

Expand Down Expand Up @@ -104,8 +97,7 @@ public void registerClientCommands(CommandHandler handler){
});
handler.<Player>register("js", "<code...>", "Execute JavaScript code.", (args, player) -> {
Document user = playerCollection.find(Filters.eq("uuid", player.uuid())).first();
boolean isConsole = user.getInteger("rank") == 2;
if (player.admin() && isConsole) {
if (player.admin() && isConsole(player.uuid())) {
try {
String output = mods.getScripts().runConsole(args[0]);
player.sendMessage("> " + ("[#ff341c]" + output));
Expand Down
18 changes: 7 additions & 11 deletions src/main/java/plugin/commands/BanMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,19 @@
import useful.text.TextInput;
import useful.State.StateKey;

import java.awt.*;
import java.time.Duration;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import static mindustry.Vars.*;
import static plugin.ConfigJson.discordurl;
import static plugin.discord.Embed.banEmbed;

public class BanMenu {

public static final StateKey<Player> TARGET = new StateKey<>("target");
public static final StateKey<Integer> DURATION = new StateKey<>("duration");
public static Player moderator = Ploogin.moderator;

public static final TextInput
durationInput = new TextInput(),
Expand Down Expand Up @@ -111,23 +113,17 @@ public static void loadBanMenu() {
input.result((view, text) -> {
var target = view.state.get(TARGET);
long duration = view.state.get(DURATION);
Document usr = Ploogin.playerCollection.find(Filters.eq("uuid", target.uuid())).first();
Document user = Ploogin.playerCollection.find(Filters.eq("uuid", target.uuid())).first();
Date date = new Date();
long banTime = date.getTime() + TimeUnit.DAYS.toMillis(duration);
String timeUntilUnban = Bundle.formatDuration(Duration.ofDays(duration));
target.con.kick("You have been banned for: " + text + ". Wait " + timeUntilUnban + " until unban!", 0);
target.con.kick("[red]You have been banned!\n\n" + "[white]Reason: " + text +"\nDuration: " + timeUntilUnban + " until unban\nIf you think this is a mistake, make sure to appeal ban in our discord: " + discordurl, 0);
Call.sendMessage(target.plainName() + " has been banned for: " + text);
Bson updates = Updates.combine(
Updates.set("lastBan", banTime)
);
Ploogin.playerCollection.updateOne(usr, updates, new UpdateOptions().upsert(true));
EmbedBuilder embed = new EmbedBuilder()
.setTitle("Ban event")
.setDescription(target.plainName() + " has been banned for: " + text)
.addField("Moderator", moderator.plainName());
Bot.banchannel.sendMessage(embed);


Ploogin.playerCollection.updateOne(user, updates, new UpdateOptions().upsert(true));
Bot.banchannel.sendMessage(banEmbed(user,text,banTime, view.player.plainName()));
});
});
}
Expand Down
109 changes: 71 additions & 38 deletions src/main/java/plugin/discord/Bot.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,59 +3,57 @@
import arc.Core;
import arc.Events;
import arc.util.Log;
import arc.util.Strings;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.UpdateOptions;
import com.mongodb.client.model.Updates;
import mindustry.Vars;
import mindustry.content.Blocks;
import mindustry.core.GameState;
import mindustry.game.EventType;
import mindustry.game.Team;
import mindustry.gen.Call;
import mindustry.gen.Groups;
import mindustry.maps.Map;
import mindustry.net.Packets;
import mindustry.gen.Player;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.javacord.api.*;
import mindustry.mod.*;
import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder;
import org.javacord.api.entity.channel.TextChannel;
import org.javacord.api.entity.intent.Intent;
import org.javacord.api.entity.message.Message;
import org.javacord.api.entity.message.embed.EmbedBuilder;
import org.javacord.api.entity.permission.PermissionType;
import org.javacord.api.event.interaction.SlashCommandCreateEvent;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.interaction.*;
import org.javacord.api.interaction.SlashCommand;
import org.javacord.api.interaction.SlashCommandInteractionOption;
import org.javacord.api.interaction.SlashCommandOption;
import org.javacord.api.interaction.SlashCommandOptionType;
import plugin.ConfigJson;
import plugin.Ploogin;
import plugin.utils.MenuHandler;
import plugin.utils.Utilities;
import useful.Bundle;

import java.awt.*;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import mindustry.gen.Player;
import plugin.ConfigJson;
import useful.Action;
import useful.Bundle;

import static arc.util.Strings.stripColors;
import static mindustry.Vars.*;
import static plugin.ConfigJson.discordurl;
import static plugin.Ploogin.playerCollection;
import static plugin.discord.Embed.banEmbed;
import static plugin.utils.Checks.isAdmin;
import static plugin.utils.FindDocument.getDoc;
import static plugin.utils.MenuHandler.loginMenu;
import static plugin.utils.MenuHandler.loginMenuFunction;
import static plugin.utils.Utilities.findPlayerByName;
import static plugin.utils.Utilities.*;

public class Bot {
// variables for load function
public static DiscordApi api;
public static TextChannel channel;
public static TextChannel banchannel;
// main bot
@SuppressWarnings("UnnecessaryLocalVariable")
public static void load(){
api = new DiscordApiBuilder()
.setToken(ConfigJson.token)
Expand Down Expand Up @@ -121,7 +119,7 @@ private static void registerSlashCommands(){
SlashCommand listCommand = SlashCommand.with("list", "Lists the players"
).createGlobal(api).join();
SlashCommand adminaddCommand = SlashCommand.with("adminadd", "gives admin to player (use it carefully)",
Arrays.asList(
Collections.singletonList(
SlashCommandOption.create(
SlashCommandOptionType.STRING,
"name",
Expand All @@ -134,14 +132,27 @@ private static void registerSlashCommands(){
).setDefaultEnabledForPermissions(PermissionType.KICK_MEMBERS)
.createGlobal(api).join();
SlashCommand loginCommand = SlashCommand.with("login", "Connects your discord and mindustry account!",
Arrays.asList(
SlashCommandOption.create(
SlashCommandOptionType.LONG,
"id",
"id",
true
))
Collections.singletonList(
SlashCommandOption.create(
SlashCommandOptionType.LONG,
"id",
"id",
true
))
).createGlobal(api).join();
SlashCommand getInfoCommand = SlashCommand.with("stats", "Gets stats of player",
Arrays.asList(
SlashCommandOption.create(
SlashCommandOptionType.LONG,
"id",
"Player id"
),
SlashCommandOption.create(
SlashCommandOptionType.STRING,
"name",
"Player name"
))
).createGlobal(api).join();
}
// calling slash command functions once they got used
private static void addSlashCommandListener(SlashCommandCreateEvent listener) {
Expand All @@ -160,7 +171,7 @@ private static void addSlashCommandListener(SlashCommandCreateEvent listener) {
Date date = new Date();
long banTime = date.getTime() + TimeUnit.DAYS.toMillis(time);
String timeUntilUnban = Bundle.formatDuration(Duration.ofDays(time));
Document user = playerCollection.find(Filters.eq("id", id)).first();
Document user = getDoc(id);
if (user == null) {
response = "Could not find that player.";
listener.getSlashCommandInteraction()
Expand All @@ -169,30 +180,27 @@ private static void addSlashCommandListener(SlashCommandCreateEvent listener) {
return;
}
Player plr = Groups.player.find(p -> p.uuid().equals(user.getString("uuid")));
if (user.getInteger("rank") == 2 || user.getInteger("rank") == 1){
listener.getSlashCommandInteraction().createImmediateResponder().setContent("You cant ban an admin!").respond(); return;
if (isAdmin(id)) {
listener.getSlashCommandInteraction().createImmediateResponder().setContent("You cant ban an admin!").respond();
return;
}
if (plr == null) {
Log.info("Player is offline, not kicking him");
} else {
plr.con.kick("You have been banned for: " + reason + ". Wait " + timeUntilUnban + " until unban!", 0);
plr.con.kick("[red]You have been banned!\n\n" + "[white]Reason: " + reason + "\nDuration: " + timeUntilUnban + " until unban\nIf you think this is a mistake, make sure to appeal ban in our discord: " + discordurl, 0);
}
listener.getSlashCommandInteraction()
.createImmediateResponder().setContent("Banned: " + user.getString("name"))
.respond();

Call.sendMessage(user.getString("name") +" has been banned for: " + reason);
Call.sendMessage(user.getString("name") + " has been banned for: " + reason);
Bson updates = Updates.combine(
Updates.set("lastBan", banTime)
);
Ploogin.playerCollection.updateOne(user, updates, new UpdateOptions().upsert(true));
EmbedBuilder embed = new EmbedBuilder()
.setTitle("Ban event")
.setDescription(user.getString("name") + " has been banned for: " + reason)
.addField("Moderator", listener.getInteraction().getUser().getName());
Bot.banchannel.sendMessage(embed);
Bot.banchannel.sendMessage(banEmbed(user, reason, banTime, listener.getInteraction().getUser().getName()));
return;
}
}
case "exit" -> {
Log.info("Stopping server");
api.disconnect();
Expand Down Expand Up @@ -235,7 +243,7 @@ private static void addSlashCommandListener(SlashCommandCreateEvent listener) {
}
case "login" -> {
int id = Math.toIntExact(listener.getSlashCommandInteraction().getOptionByName("id").get().getLongValue().get());
Document user = playerCollection.find(Filters.eq("id", id)).first();
Document user = getDoc(id);
if (user == null){
listener.getSlashCommandInteraction().createImmediateResponder().setContent("This player doesnt exists!").respond();
return;
Expand All @@ -249,6 +257,31 @@ private static void addSlashCommandListener(SlashCommandCreateEvent listener) {
Call.menu(player.con, loginMenu, "Request", listener.getInteraction().getUser().getName() + " requests to connect your mindustry account", new String[][]{{"Connect"}, {"Cancel"}});
listener.getSlashCommandInteraction().createImmediateResponder().setContent("req sended!").respond();
}
case "stats" -> {
int id = Math.toIntExact(listener.getSlashCommandInteraction().getOptionByName("id").flatMap(SlashCommandInteractionOption::getLongValue).orElse(2147483647L));
String name= listener.getSlashCommandInteraction().getOptionByName("name").flatMap(SlashCommandInteractionOption::getStringValue).orElse("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa");
Player player = notNullElse(findPlayerByName(name), findPlayerByID(id));
if (player == null) {

}
Document user = notNullElse(getDoc(id), getDoc(player.uuid()));
if (user == null){
listener.getSlashCommandInteraction().createImmediateResponder().setContent("Could not find that player!").respond();
return;
}
String discordId = String.valueOf(user.getLong("discordid"));
if (discordId == null){
discordId = "none";
}
EmbedBuilder embed = new EmbedBuilder()
.setTitle("Information")
.setColor(Color.RED)
.addField("Name", stripColors(user.getString("name")))
.addField("ID", String.valueOf(user.getInteger("id")))
.addField("Rank", String.valueOf(user.getInteger("rank")))
.addField("Discord (if linked)", "<@" +discordId +">");
listener.getSlashCommandInteraction().createImmediateResponder().addEmbed(embed).respond();
}
}
}
}
21 changes: 21 additions & 0 deletions src/main/java/plugin/discord/Embed.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package plugin.discord;

import org.bson.Document;
import org.javacord.api.entity.message.embed.EmbedBuilder;
import org.javacord.api.event.interaction.SlashCommandCreateEvent;

import java.awt.*;

import static arc.util.Strings.stripColors;

public class Embed {

public static EmbedBuilder banEmbed(Document user, String reason, long banTime, String moderator){
return new EmbedBuilder()
.setTitle("Ban event")
.setColor(Color.RED)
.addField("**Name**", stripColors(user.getString("name")))
.addField("**Reason**", reason)
.addField("**Expires**", "<t:" + banTime/1000 +":D>")
.addField("**Moderator**", moderator);
}}
5 changes: 4 additions & 1 deletion src/main/java/plugin/functions/MongoDB.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,12 @@ public static void MongoDbPlayerRankCheck(String uuid){
eventPlayer.name = "[white]<P> [orange]" + tempName;
}
case 1 ->{
eventPlayer.name = "[#f]<A> [orange]" + tempName;
eventPlayer.name = "[blue]<T> [orange]" + tempName;
}
case 2 ->{
eventPlayer.name = "[#f]<A> [orange]" + tempName;
}
case 3 ->{
eventPlayer.name = "[purple]<C> [orange]" + tempName;
}
}
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/plugin/functions/Other.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
package plugin.functions;

import com.mongodb.client.model.Filters;
import mindustry.gen.Call;
import mindustry.gen.Player;
import org.bson.Document;
import plugin.utils.MenuHandler;
import useful.Bundle;

import java.util.Date;

import static plugin.ConfigJson.discordurl;
import static plugin.Ploogin.playerCollection;

public class Other {

public static void welcomeMenu(Player player){
String title = "\uE86B Welcome!";
String description = "[orange]Welcome to our server!\n\n" +
Expand All @@ -19,4 +28,17 @@ public static void welcomeMenu(Player player){
String button2 = "[blue]\uE80D Join our discord!";
Call.menu(player.con, MenuHandler.welcomeMenu, title, description, new String[][]{{button1}, {button2}});
}
public static void kickIfBanned(Player player){
Document user = playerCollection.find(Filters.eq("uuid", player.uuid())).first();
if (user == null){
return;
}
long lastBan = user.getLong("lastBan");
Date date = new Date();
if (lastBan > date.getTime()) {
String timeUntilUnban = Bundle.formatDuration(lastBan - date.getTime());
player.con.kick("[red]You have been banned!\n\n" +"[white]Duration: " + timeUntilUnban + " until unban\n\nIf you think this is a mistake, make sure to appeal ban in our discord: " + discordurl, 0);
}
}

}
Loading

0 comments on commit 9068f1f

Please sign in to comment.