Created a bot for BG-Software auto responder. Still needs cleanup. And i will move it to it's own project soon.
This commit is contained in:
parent
c14d0bc10f
commit
971f71b78d
26
bgsoftware-discordbot/build.gradle.kts
Normal file
26
bgsoftware-discordbot/build.gradle.kts
Normal file
@ -0,0 +1,26 @@
|
||||
dependencies {
|
||||
implementation(project(":core"))
|
||||
implementation("net.dv8tion:JDA:4.2.0_228")
|
||||
implementation("com.jagrosh:jda-utilities:3.0.5")
|
||||
implementation("javax.json:javax.json-api:1.0")
|
||||
}
|
||||
|
||||
val jar by tasks.getting(Jar::class) {
|
||||
manifest {
|
||||
attributes["Main-Class"] = "zone.themcgamer.discordbot.MGZBot"
|
||||
}
|
||||
}
|
||||
|
||||
tasks {
|
||||
processResources {
|
||||
val tokens = mapOf("version" to project.version)
|
||||
from(sourceSets["main"].resources.srcDirs) {
|
||||
filter<org.apache.tools.ant.filters.ReplaceTokens>("tokens" to tokens)
|
||||
}
|
||||
}
|
||||
|
||||
shadowJar {
|
||||
archiveFileName.set("${project.rootProject.name}-${project.name}-v${project.version}.jar")
|
||||
destinationDir = file("$rootDir/output")
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package zone.themcgamer.discordbot;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandClientBuilder;
|
||||
import lombok.Getter;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.JDABuilder;
|
||||
import net.dv8tion.jda.api.OnlineStatus;
|
||||
import net.dv8tion.jda.api.entities.Activity;
|
||||
import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||
import zone.themcgamer.discordbot.command.impl.*;
|
||||
import zone.themcgamer.discordbot.events.GuildListener;
|
||||
import zone.themcgamer.discordbot.events.HasteBinListener;
|
||||
import zone.themcgamer.discordbot.events.MainGuildListener;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
@Getter
|
||||
public class BGSoftwareBot {
|
||||
@Getter private static BGSoftwareBot instance;
|
||||
|
||||
private JDA jda;
|
||||
|
||||
public BGSoftwareBot() {
|
||||
instance = this;
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
CommandClientBuilder commandClientBuilder = new CommandClientBuilder();
|
||||
commandClientBuilder.setPrefix(BotConstants.PREFIX);
|
||||
commandClientBuilder.setActivity(Activity.playing("BG-Software Harold"));
|
||||
commandClientBuilder.setStatus(OnlineStatus.ONLINE);
|
||||
commandClientBuilder.setOwnerId(BotConstants.OWNER_ID);
|
||||
for (String botAdmin : BotConstants.BOT_ADMINS)
|
||||
commandClientBuilder.setCoOwnerIds(botAdmin);
|
||||
commandClientBuilder.useHelpBuilder(false);
|
||||
|
||||
commandClientBuilder.addCommand(new SetActivityCommand());
|
||||
commandClientBuilder.addCommand(new InviteCommand());
|
||||
commandClientBuilder.addCommand(new MessageCommand());
|
||||
commandClientBuilder.addCommand(new EditMessageCommand());
|
||||
commandClientBuilder.addCommand(new AddReactionToMessageCommand());
|
||||
commandClientBuilder.addCommand(new MemberCountCommand());
|
||||
commandClientBuilder.addCommand(new PingCommand());
|
||||
|
||||
try {
|
||||
jda = JDABuilder.createDefault(BotConstants.TOKEN)
|
||||
.setCallbackPool(Executors.newScheduledThreadPool(10))
|
||||
.setActivity(Activity.playing("Booting up..."))
|
||||
.setStatus(OnlineStatus.IDLE)
|
||||
.enableIntents(GatewayIntent.GUILD_MEMBERS, GatewayIntent.GUILD_EMOJIS)
|
||||
.addEventListeners(
|
||||
commandClientBuilder.build(),
|
||||
new MainGuildListener(this),
|
||||
new GuildListener(this),
|
||||
new HasteBinListener())
|
||||
.build();
|
||||
jda.awaitReady();
|
||||
} catch (LoginException | InterruptedException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
System.out.println("Done (" + (System.currentTimeMillis() - time) + ")! For help, type \"help\" or \"?\"\n");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new BGSoftwareBot();
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package zone.themcgamer.discordbot;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
/**
|
||||
* @author Nicholas
|
||||
*/
|
||||
public class BotConstants {
|
||||
public static final String TOKEN = "ODQ1Njk2NDk0ODA3OTQxMTcx.YKkuPA.g9Xhoc_r-tnlf8sYes9LAIL2vaE";
|
||||
public static final String PREFIX = ".";
|
||||
|
||||
public static final String OWNER_ID = "504069946528104471"; // Joel
|
||||
public static final String[] BOT_ADMINS = new String[] {
|
||||
"544533281992081408", // Omer_R
|
||||
};
|
||||
|
||||
// Default Lines
|
||||
public static final String COPYRIGHT = "© BG-Software - " + Calendar.getInstance().get(Calendar.YEAR);
|
||||
|
||||
// Channels
|
||||
public static final String HAROLD_LOG = "845706257779654656";
|
||||
public static final String WILDINSPECT = "554282614702211087";
|
||||
public static final String WILDBUSTER = "554282630779109377";
|
||||
public static final String WILDSTACKER = "554282642980470785";
|
||||
public static final String WILDTOOLS = "554282655441747998";
|
||||
public static final String WILDCHEST = "554282670272544769";
|
||||
public static final String WILDLOADERS = "751895102422777886";
|
||||
public static final String SUPERIORSKYBLOCK = "554282577322704896";
|
||||
|
||||
//Categories
|
||||
public static final String SUPPORT_CATEGORY = "554281400145281025";
|
||||
|
||||
//Role IDS
|
||||
public static final String SUPPORT_TEAM = "818064395636703243";
|
||||
|
||||
}
|
35
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/BaseCommand.java
Normal file
35
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/BaseCommand.java
Normal file
@ -0,0 +1,35 @@
|
||||
package zone.themcgamer.discordbot.command;
|
||||
|
||||
import com.jagrosh.jdautilities.command.Command;
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import zone.themcgamer.discordbot.BotConstants;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.GuildUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* @author Nicholas
|
||||
*/
|
||||
public abstract class BaseCommand extends Command {
|
||||
protected List<Guild> guilds; // The guilds the command can be executed in
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event) {
|
||||
if (!guilds.contains(GuildUtils.matchGuild(event.getGuild().getId())))
|
||||
return;
|
||||
List<String> args = new ArrayList<>();
|
||||
if (event.getArgs() != null && event.getArgs().length() > 0) {
|
||||
String[] split = event.getMessage().getContentRaw()
|
||||
.replaceFirst("(?i)" + Pattern.quote(BotConstants.PREFIX), "")
|
||||
.split("\\s+");
|
||||
args = Arrays.asList(split);
|
||||
}
|
||||
execute(event, args);
|
||||
}
|
||||
|
||||
protected abstract void execute(CommandEvent event, List<String> args);
|
||||
}
|
48
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/AddReactionToMessageCommand.java
Normal file
48
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/AddReactionToMessageCommand.java
Normal file
@ -0,0 +1,48 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import zone.themcgamer.discordbot.BGSoftwareBot;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
import zone.themcgamer.discordbot.utilities.MessageUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class AddReactionToMessageCommand extends BaseCommand {
|
||||
public AddReactionToMessageCommand() {
|
||||
name = "addreaction";
|
||||
aliases = new String[] { "react" };
|
||||
help = "Edit a message from the bot.";
|
||||
arguments = "<channelID> <messageID> <reaction>";
|
||||
userPermissions = new Permission[] { Permission.ADMINISTRATOR };
|
||||
guildOnly = true;
|
||||
guilds = Arrays.asList(Guild.MAIN, Guild.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
if (args.size() < 3) {
|
||||
MessageUtils.sendUsageMessage(event.getTextChannel(),this);
|
||||
return;
|
||||
}
|
||||
|
||||
TextChannel textChannelById = BGSoftwareBot.getInstance().getJda().getTextChannelById(args.get(1));
|
||||
if (textChannelById == null) {
|
||||
event.reply("Channel does not exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
textChannelById.addReactionById(args.get(2), args.get(3)).queue(message -> {
|
||||
|
||||
}, error -> {
|
||||
EmbedBuilder embedBuilder = EmbedUtils.errorEmbed();
|
||||
embedBuilder.setDescription(error.getLocalizedMessage());
|
||||
event.reply(embedBuilder.build());
|
||||
});
|
||||
}
|
||||
}
|
53
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/EditMessageCommand.java
Normal file
53
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/EditMessageCommand.java
Normal file
@ -0,0 +1,53 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import zone.themcgamer.discordbot.BGSoftwareBot;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
import zone.themcgamer.discordbot.utilities.MessageUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class EditMessageCommand extends BaseCommand {
|
||||
public EditMessageCommand() {
|
||||
name = "edit";
|
||||
aliases = new String[] { "editmessage" };
|
||||
help = "Edit a message from the bot.";
|
||||
arguments = "<channelID> <messageID> <title> <description>";
|
||||
userPermissions = new Permission[] { Permission.ADMINISTRATOR };
|
||||
guildOnly = true;
|
||||
guilds = Arrays.asList(Guild.MAIN, Guild.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
if (args.size() < 3) {
|
||||
MessageUtils.sendUsageMessage(event.getTextChannel(), this);
|
||||
return;
|
||||
}
|
||||
|
||||
TextChannel textChannelById = BGSoftwareBot.getInstance().getJda().getTextChannelById(args.get(1));
|
||||
if (textChannelById == null) {
|
||||
event.reply("Channel does not exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
EmbedBuilder embedBuilder = EmbedUtils.defaultEmbed();
|
||||
embedBuilder.setTitle(args.get(3).replace("_", " "));
|
||||
embedBuilder.setDescription(event.getMessage().getContentRaw()
|
||||
.replace("." + args.get(0), "")
|
||||
.replace(args.get(1), "")
|
||||
.replace(args.get(2), "")
|
||||
.replace(args.get(3), ""));
|
||||
textChannelById.editMessageById(args.get(2), embedBuilder.build()).queue(message -> {
|
||||
event.replySuccess("Message has been edited!");
|
||||
}, error -> {
|
||||
event.reply("Message with this ID does not exist, are you sure this is the right id?");
|
||||
});
|
||||
}
|
||||
}
|
42
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/InviteCommand.java
Normal file
42
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/InviteCommand.java
Normal file
@ -0,0 +1,42 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class InviteCommand extends BaseCommand {
|
||||
|
||||
public InviteCommand() {
|
||||
name = "invite";
|
||||
aliases = new String[]{"createinvite"};
|
||||
help = "Create invite link via the bot";
|
||||
guildOnly = true;
|
||||
guilds = Collections.singletonList(zone.themcgamer.discordbot.guild.Guild.MAIN);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
Guild guild = event.getGuild();
|
||||
|
||||
TextChannel textChannelById = guild.getTextChannelById(791015530001596456L);
|
||||
if (textChannelById == null)
|
||||
return;
|
||||
textChannelById.createInvite()
|
||||
.timeout(1, TimeUnit.DAYS)
|
||||
.setTemporary(true).queue(inviteLink -> {
|
||||
event.getMember().getUser().openPrivateChannel().queue(privateChannel -> {
|
||||
privateChannel.sendMessage("I have generated an invite link for you! This invite link will work for 24 hours! " + inviteLink.getUrl()).queue();
|
||||
event.reply("Check your dm's!");
|
||||
}, error -> {
|
||||
event.replyError("Could not sent you a dm!");
|
||||
}); }, error -> {
|
||||
event.replyError("Coulnd't create an invite link due an error!");
|
||||
});
|
||||
|
||||
}
|
||||
}
|
26
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/JsonParseCommand.java
Normal file
26
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/JsonParseCommand.java
Normal file
@ -0,0 +1,26 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.MessageUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class JsonParseCommand extends BaseCommand {
|
||||
public JsonParseCommand() {
|
||||
name = "jsonparse";
|
||||
help = "Parse your json!";
|
||||
arguments = "<json>";
|
||||
guildOnly = true;
|
||||
guilds = Arrays.asList(Guild.MAIN, Guild.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
if (args.size() < 1) {
|
||||
MessageUtils.sendUsageMessage(event.getTextChannel(), this);
|
||||
}
|
||||
}
|
||||
}
|
37
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/MemberCountCommand.java
Normal file
37
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/MemberCountCommand.java
Normal file
@ -0,0 +1,37 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class MemberCountCommand extends BaseCommand {
|
||||
|
||||
public MemberCountCommand() {
|
||||
name = "membercount";
|
||||
aliases = new String[]{"members"};
|
||||
help = "Shows the amount of members in the guild";
|
||||
cooldown = 10;
|
||||
arguments = "";
|
||||
guildOnly = true;
|
||||
guilds = Arrays.asList(Guild.MAIN, Guild.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
net.dv8tion.jda.api.entities.Guild guild = event.getGuild();
|
||||
guild.loadMembers().onSuccess(members -> {
|
||||
EmbedBuilder embedBuilder = EmbedUtils.defaultEmbed();
|
||||
embedBuilder.setTitle("Member Count");
|
||||
embedBuilder.addField("Humans", String.valueOf(members.stream().filter(member -> !member.getUser().isBot()).count()), true);
|
||||
embedBuilder.addField("Bots", String.valueOf(members.stream().filter(member -> member.getUser().isBot()).count()), true);
|
||||
|
||||
event.getChannel().sendMessage(embedBuilder.build()).queue();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
38
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/MessageCommand.java
Normal file
38
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/MessageCommand.java
Normal file
@ -0,0 +1,38 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
import zone.themcgamer.discordbot.utilities.MessageUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class MessageCommand extends BaseCommand {
|
||||
public MessageCommand() {
|
||||
name = "message";
|
||||
aliases = new String[] { "say" };
|
||||
help = "Announce something in an embed format.";
|
||||
arguments = "<title> <description>";
|
||||
userPermissions = new Permission[] { Permission.ADMINISTRATOR };
|
||||
guildOnly = true;
|
||||
guilds = Arrays.asList(Guild.MAIN, Guild.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
if (args.size() < 1) {
|
||||
MessageUtils.sendUsageMessage(event.getTextChannel(),this);
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO a way to add images, and such to the embeds.
|
||||
EmbedBuilder embedBuilder = EmbedUtils.defaultEmbed();
|
||||
embedBuilder.setTitle(args.get(1).replace("_", " "));
|
||||
embedBuilder.setDescription(event.getMessage().getContentRaw().replace(args.get(1), "").replace("." + args.get(0), ""));
|
||||
event.getChannel().sendMessage(embedBuilder.build()).queue();
|
||||
}
|
||||
}
|
50
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/PingCommand.java
Normal file
50
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/PingCommand.java
Normal file
@ -0,0 +1,50 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class PingCommand extends BaseCommand {
|
||||
|
||||
private static long inputTime;
|
||||
|
||||
public static void setInputTime(long inputTimeLong) {
|
||||
inputTime = inputTimeLong;
|
||||
}
|
||||
|
||||
private Color getColorByPing(long ping) {
|
||||
if (ping < 100)
|
||||
return Color.cyan;
|
||||
if (ping < 400)
|
||||
return Color.green;
|
||||
if (ping < 700)
|
||||
return Color.yellow;
|
||||
if (ping < 1000)
|
||||
return Color.orange;
|
||||
return Color.red;
|
||||
}
|
||||
|
||||
public PingCommand() {
|
||||
name = "ping";
|
||||
aliases = new String[]{"latency"};
|
||||
help = "Get the latency of the bot to the guild.";
|
||||
guildOnly = true;
|
||||
guilds = Arrays.asList(Guild.MAIN, Guild.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
long processing = new Date().getTime() - inputTime;
|
||||
long ping = event.getJDA().getGatewayPing();
|
||||
event.getTextChannel().sendMessage(EmbedUtils.defaultEmbed().setColor(getColorByPing(ping)).setDescription(
|
||||
String.format(":ping_pong: **Pong!**\n\nThe bot took `%s` milliseconds to response.\nIt took `%s` milliseconds to parse the command and the ping is `%s` milliseconds.",
|
||||
processing + ping, processing, ping)
|
||||
).build()).queue();
|
||||
}
|
||||
}
|
44
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/SetActivityCommand.java
Normal file
44
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/SetActivityCommand.java
Normal file
@ -0,0 +1,44 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Activity;
|
||||
import zone.themcgamer.discordbot.BGSoftwareBot;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
import zone.themcgamer.discordbot.utilities.MessageUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Nicholas
|
||||
*/
|
||||
public class SetActivityCommand extends BaseCommand {
|
||||
public SetActivityCommand() {
|
||||
name = "setactivity";
|
||||
help = "Set the bot activity.";
|
||||
arguments = "<message>";
|
||||
userPermissions = new Permission[] { Permission.ADMINISTRATOR };
|
||||
guildOnly = true;
|
||||
guilds = Arrays.asList(Guild.MAIN, Guild.TEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
if (args.size() < 1) {
|
||||
MessageUtils.sendUsageMessage(event.getTextChannel(),this);
|
||||
return;
|
||||
}
|
||||
String activity = args.stream().skip(1).collect(Collectors.joining(" "));
|
||||
BGSoftwareBot.getInstance().getJda().getPresence().setActivity(Activity.playing(activity));
|
||||
event.getChannel().sendMessage(EmbedUtils.successEmbed()
|
||||
.setThumbnail(event.getAuthor().getAvatarUrl())
|
||||
.setTitle("Activity updated!")
|
||||
.appendDescription(event.getAuthor().getAsTag() + " updated the bot activity to \"" + activity + "\".")
|
||||
.build()
|
||||
).queue();
|
||||
}
|
||||
}
|
55
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/GuildListener.java
Normal file
55
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/GuildListener.java
Normal file
@ -0,0 +1,55 @@
|
||||
package zone.themcgamer.discordbot.events;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.Category;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import zone.themcgamer.discordbot.BGSoftwareBot;
|
||||
import zone.themcgamer.discordbot.BotConstants;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
import zone.themcgamer.discordbot.utilities.GuildUtils;
|
||||
import zone.themcgamer.discordbot.utilities.Responses;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Arrays;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class GuildListener extends ListenerAdapter {
|
||||
private final BGSoftwareBot main;
|
||||
|
||||
@Override
|
||||
public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) {
|
||||
Member member = event.getMember();
|
||||
String contentRaw = event.getMessage().getContentRaw().toLowerCase();
|
||||
String name = event.getChannel().getName();
|
||||
|
||||
if (member == null)
|
||||
return;
|
||||
if (member.getUser().isBot())
|
||||
return;
|
||||
if (GuildUtils.hasRole(member, BotConstants.SUPPORT_TEAM) == null)
|
||||
return;
|
||||
|
||||
for (Responses value : Responses.values()) {
|
||||
if (Arrays.asList(value.getTriggerWords()).contains(contentRaw)) {
|
||||
if (!value.isRequireHelpCategory())
|
||||
return;
|
||||
if (!value.getRequiredChannel().equals(event.getChannel().getId()))
|
||||
return;
|
||||
EmbedBuilder embedBuilder = EmbedUtils.defaultEmbed();
|
||||
embedBuilder.setTitle(value.getTitle().replace("{plugin}", (isSupportCategory(event.getMessage().getCategory()) ? name : value.getDefaultReplace())));
|
||||
embedBuilder.setDescription(value.getDescription().replace("{plugin}", (isSupportCategory(event.getMessage().getCategory()) ? name : value.getDefaultReplace())));
|
||||
event.getMessage().reply(embedBuilder.build()).queue();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isSupportCategory(Category category) {
|
||||
if (category == null)
|
||||
return false;
|
||||
return (category.getId().equals(BotConstants.SUPPORT_CATEGORY));
|
||||
}
|
||||
}
|
39
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/HasteBinListener.java
Normal file
39
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/HasteBinListener.java
Normal file
@ -0,0 +1,39 @@
|
||||
package zone.themcgamer.discordbot.events;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
import zone.themcgamer.discordbot.utilities.HasteBinHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.IOException;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class HasteBinListener extends ListenerAdapter {
|
||||
|
||||
@Override
|
||||
public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) {
|
||||
Member member = event.getMember();
|
||||
if (member == null)
|
||||
return;
|
||||
if (member.getUser().isBot())
|
||||
return;
|
||||
|
||||
if (event.getMessage().getContentRaw().contains("java.lang.")) {
|
||||
HasteBinHandler hasteBinHandler = new HasteBinHandler();
|
||||
try {
|
||||
String url = hasteBinHandler.post(event.getMessage().getContentDisplay(), false);
|
||||
EmbedBuilder embedBuilder = EmbedUtils.warnEmbed();
|
||||
embedBuilder.setTitle("Hastebin");
|
||||
embedBuilder.setDescription("I've noticed you pasted an error, this error has been pasted in hastebin for you!\n" +
|
||||
"Please use this link and report it at github!");
|
||||
embedBuilder.addField("Error", url, false);
|
||||
} catch (IOException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
28
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/MainGuildListener.java
Normal file
28
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/MainGuildListener.java
Normal file
@ -0,0 +1,28 @@
|
||||
package zone.themcgamer.discordbot.events;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import zone.themcgamer.discordbot.BGSoftwareBot;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class MainGuildListener extends ListenerAdapter {
|
||||
private final BGSoftwareBot mgzBot;
|
||||
|
||||
@Override
|
||||
public void onGuildMemberJoin(@Nonnull GuildMemberJoinEvent event) {
|
||||
Member member = event.getMember();
|
||||
User user = event.getUser();
|
||||
Guild guild = event.getGuild();
|
||||
if (user.isBot())
|
||||
return;
|
||||
if (!guild.getId().equals(zone.themcgamer.discordbot.guild.Guild.MAIN.getGuildId()))
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
4
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/TestGuildListener.java
Normal file
4
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/events/TestGuildListener.java
Normal file
@ -0,0 +1,4 @@
|
||||
package zone.themcgamer.discordbot.events;
|
||||
|
||||
public class TestGuildListener {
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package zone.themcgamer.discordbot.guild;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author Nicholas
|
||||
*/
|
||||
@AllArgsConstructor @Getter
|
||||
public enum Guild {
|
||||
MAIN("554276823010246687"),
|
||||
TEST("845696905496363078");
|
||||
|
||||
private final String guildId;
|
||||
}
|
30
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/EmbedUtils.java
Normal file
30
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/EmbedUtils.java
Normal file
@ -0,0 +1,30 @@
|
||||
package zone.themcgamer.discordbot.utilities;
|
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import zone.themcgamer.discordbot.BGSoftwareBot;
|
||||
import zone.themcgamer.discordbot.BotConstants;
|
||||
|
||||
import java.awt.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class EmbedUtils {
|
||||
public static EmbedBuilder successEmbed() {
|
||||
return defaultEmbed().setColor(Color.decode("#41bc7f"));
|
||||
}
|
||||
|
||||
public static EmbedBuilder errorEmbed() {
|
||||
return defaultEmbed().setTitle("Oops!")
|
||||
.setColor(Color.decode("#d74742"));
|
||||
}
|
||||
|
||||
public static EmbedBuilder warnEmbed() {
|
||||
return defaultEmbed().setColor(Color.decode("#f85b2e"));
|
||||
}
|
||||
|
||||
public static EmbedBuilder defaultEmbed() {
|
||||
return new EmbedBuilder()
|
||||
.setColor(Color.decode("#1DD0D5"))
|
||||
.setTimestamp(LocalDateTime.now())
|
||||
.setFooter(BotConstants.COPYRIGHT, BGSoftwareBot.getInstance().getJda().getSelfUser().getEffectiveAvatarUrl());
|
||||
}
|
||||
}
|
25
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/GuildUtils.java
Normal file
25
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/GuildUtils.java
Normal file
@ -0,0 +1,25 @@
|
||||
package zone.themcgamer.discordbot.utilities;
|
||||
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author JohannesHQ
|
||||
*/
|
||||
public class GuildUtils {
|
||||
public static Guild matchGuild(String guildId) {
|
||||
return Arrays.stream(Guild.values()).filter(guild -> guild.getGuildId().equals(guildId)).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
public static Role hasRole(Member member, String id) {
|
||||
List<Role> roles = member.getRoles();
|
||||
return roles.stream()
|
||||
.filter(role -> role.getId().equals(id)) // filter by role name
|
||||
.findFirst() // take first result
|
||||
.orElse(null); // else return null
|
||||
}
|
||||
}
|
46
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/HasteBinHandler.java
Normal file
46
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/HasteBinHandler.java
Normal file
@ -0,0 +1,46 @@
|
||||
package zone.themcgamer.discordbot.utilities;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class HasteBinHandler {
|
||||
public String post(String text, boolean raw) throws IOException {
|
||||
byte[] postData = text.getBytes(StandardCharsets.UTF_8);
|
||||
int postDataLength = postData.length;
|
||||
|
||||
String requestURL = "https://hastebin.com/documents/";
|
||||
URL url = new URL(requestURL);
|
||||
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
|
||||
conn.setDoOutput(true);
|
||||
conn.setInstanceFollowRedirects(false);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setRequestProperty("User-Agent", "Hastebin Java Api");
|
||||
conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
|
||||
conn.setUseCaches(false);
|
||||
|
||||
String response = null;
|
||||
DataOutputStream wr;
|
||||
try {
|
||||
wr = new DataOutputStream(conn.getOutputStream());
|
||||
wr.write(postData);
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
response = reader.readLine();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (response.contains("\"key\"")) {
|
||||
response = response.substring(response.indexOf(":") + 2, response.length() - 2);
|
||||
|
||||
String postURL = raw ? "https://hastebin.com/raw/" : "https://hastebin.com/";
|
||||
response = postURL + response;
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
39
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/MessageUtils.java
Normal file
39
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/MessageUtils.java
Normal file
@ -0,0 +1,39 @@
|
||||
package zone.themcgamer.discordbot.utilities;
|
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import zone.themcgamer.discordbot.BGSoftwareBot;
|
||||
import zone.themcgamer.discordbot.BotConstants;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class MessageUtils {
|
||||
public static void sendUsageMessage(TextChannel textChannel, BaseCommand command) {
|
||||
textChannel.sendMessage(EmbedUtils.errorEmbed()
|
||||
.appendDescription("Usage: " + BotConstants.PREFIX + command.getName() + " " + command.getArguments())
|
||||
.build()
|
||||
).queue();
|
||||
}
|
||||
|
||||
public static void sendLogMessage(Message message) {
|
||||
Objects.requireNonNull(getLogChannel()).sendMessage(message).queue();
|
||||
}
|
||||
|
||||
public static void sendLogMessage(EmbedBuilder embedBuilder) {
|
||||
Objects.requireNonNull(getLogChannel()).sendMessage(embedBuilder.build()).queue();
|
||||
}
|
||||
|
||||
private static TextChannel getLogChannel() {
|
||||
TextChannel logChannel = BGSoftwareBot.getInstance().getJda().getTextChannelById(BotConstants.HAROLD_LOG);
|
||||
if (logChannel == null) {
|
||||
Objects.requireNonNull(BGSoftwareBot.getInstance().getJda().getUserById("504069946528104471"))
|
||||
.openPrivateChannel().queue(privateChannel ->
|
||||
privateChannel.sendMessage("There was an error while sending a log message, the channel id is " +
|
||||
"invalid or does not exist.").queue());
|
||||
return null;
|
||||
}
|
||||
return logChannel;
|
||||
}
|
||||
}
|
87
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/Responses.java
Normal file
87
bgsoftware-discordbot/src/main/java/zone/themcgamer/discordbot/utilities/Responses.java
Normal file
@ -0,0 +1,87 @@
|
||||
package zone.themcgamer.discordbot.utilities;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import zone.themcgamer.discordbot.BotConstants;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum Responses {
|
||||
PURCHASE("Purchase",
|
||||
new String[] {"purchase", "buy"},
|
||||
"Premium plugins at no cost!",
|
||||
"Since 1st January, 2021, " +
|
||||
"{plugin} is free, with all the features included to make sure you get the best quality for no cost!\u200B\n"+
|
||||
"You can download the plugin [here](https://bg-software.com/{plugin})",
|
||||
"Are all plugins",
|
||||
false,
|
||||
null),
|
||||
ERROR("error",
|
||||
new String[] {"java.lang", "org.bukkit.event", "error occurred while enabling", "error"},
|
||||
"No errors!",
|
||||
"Please do not paste stack-traces and or errors here!\n" +
|
||||
"please report them at our [github](https://github.com/BG-Software-LLC)!",
|
||||
null,
|
||||
true,
|
||||
null),
|
||||
COMMANDS("commands",
|
||||
new String[] {"commands", "cmds"},
|
||||
"{plugin} - Commands",
|
||||
"You can find the list of commands [here](https://wiki.bg-software.com/#/{plugin}/?id=commands)",
|
||||
"not found",
|
||||
true,
|
||||
null),
|
||||
DISABLE("Disable Commands",
|
||||
new String[] {"disable command", "permissions"},
|
||||
"How to disable a command?",
|
||||
"All commands are based on permissions. If you want to disable or enable a command just give them the permission or not. You can find all permissions at the wiki of the plugin!\n" +
|
||||
"You can find the permissions [here](https://wiki.bg-software.com/#/{plugin}/?id=permissions)",
|
||||
"not found",
|
||||
true,
|
||||
null),
|
||||
WIKI("Wiki",
|
||||
new String[] {"wiki", "about"},
|
||||
"{plugin} - Wiki",
|
||||
"[Click here](https://bg-software.com/{plugin}/) for the wiki of the plugin {plugin}",
|
||||
"not found",
|
||||
true,
|
||||
null),
|
||||
PLACEHOLDERS("Placeholders",
|
||||
new String[] {"placeholders"},
|
||||
"{plugin} - Placeholders",
|
||||
"You can find all placeholders of this plugin [here](https://wiki.bg-software.com/#/{plugin}/?id=placeholders)",
|
||||
"not found",
|
||||
true,
|
||||
null),
|
||||
WILDSTACKER_LOOT_TABLES("Loot Tables",
|
||||
new String[] {"loot tables", "loot"},
|
||||
"Loot Tables",
|
||||
"Loot tables are used to store all the loot data of entities.\n" +
|
||||
"They cannot be disabled, and they are used to calculate loot faster.\n" +
|
||||
"They can be changed however you want, as long as you follow the formatting rules.\n" +
|
||||
"\n" +
|
||||
"Every file is represented as a \"loot table\". Loot tables contain global settings and pairs.\n" +
|
||||
"Pairs contain the items, and can be manipulated differently to get different results.\n" +
|
||||
"\n" +
|
||||
"[Click Here](https://wiki.bg-software.com/#/wildstacker/loot-tables/) for more information!",
|
||||
"not found",
|
||||
true,
|
||||
BotConstants.WILDSTACKER),
|
||||
NOT_SAVING("No data saving",
|
||||
new String[] {"not saving"},
|
||||
"Is your settings not saving?",
|
||||
"If you're using `/{plugin} settings` and you changed settings, make sure to go back to the main menu" +
|
||||
"and click the `Save Settings` button.",
|
||||
"pluginName",
|
||||
false,
|
||||
null);
|
||||
|
||||
private final String name;
|
||||
private final String[] triggerWords;
|
||||
private final String title;
|
||||
private final String description;
|
||||
private final String defaultReplace;
|
||||
private final boolean requireHelpCategory;
|
||||
private final String requiredChannel;
|
||||
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: zone.themcgamer.discordbot.MGZBot
|
||||
|
@ -10,6 +10,7 @@ import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||
import zone.themcgamer.discordbot.command.impl.*;
|
||||
import zone.themcgamer.discordbot.events.GuildsListener;
|
||||
import zone.themcgamer.discordbot.events.MainGuildListener;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
import java.util.concurrent.Executors;
|
||||
|
35
discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/CommandsCommand.java
Normal file
35
discordbot/src/main/java/zone/themcgamer/discordbot/command/impl/CommandsCommand.java
Normal file
@ -0,0 +1,35 @@
|
||||
package zone.themcgamer.discordbot.command.impl;
|
||||
|
||||
import com.jagrosh.jdautilities.command.Command;
|
||||
import com.jagrosh.jdautilities.command.CommandClientBuilder;
|
||||
import com.jagrosh.jdautilities.command.CommandEvent;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import zone.themcgamer.core.command.CommandManager;
|
||||
import zone.themcgamer.discordbot.BotConstants;
|
||||
import zone.themcgamer.discordbot.MGZBot;
|
||||
import zone.themcgamer.discordbot.command.BaseCommand;
|
||||
import zone.themcgamer.discordbot.guild.Guild;
|
||||
import zone.themcgamer.discordbot.utilities.EmbedUtils;
|
||||
import zone.themcgamer.discordbot.utilities.MessageUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Nicholas
|
||||
*/
|
||||
public class CommandsCommand extends BaseCommand {
|
||||
public CommandsCommand() {
|
||||
name = "commands";
|
||||
aliases = new String[] { "help" };
|
||||
help = "List of commands!";
|
||||
guildOnly = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(CommandEvent event, List<String> args) {
|
||||
EmbedBuilder embedBuilder = EmbedUtils.defaultEmbed();
|
||||
}
|
||||
}
|
@ -14,3 +14,4 @@ include("arcade")
|
||||
include("skyblock")
|
||||
include("discordbot")
|
||||
include("testing")
|
||||
include("bgsoftware-discordbot")
|
||||
|
Reference in New Issue
Block a user