Added mmultiple commands including music, added Music Module as well as Pagination(s, needs cleaning) and more
This commit is contained in:
@@ -3,8 +3,12 @@ package io.rixa.bot.commands;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -32,5 +36,7 @@ public abstract class Command {
|
||||
setAliases(aliases);
|
||||
}
|
||||
|
||||
public abstract void execute(GuildMessageReceivedEvent event);
|
||||
// public abstract void execute(GuildMessageReceivedEvent event);
|
||||
|
||||
public abstract void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) throws IOException;
|
||||
}
|
||||
|
||||
48
src/main/java/io/rixa/bot/commands/cmds/admin/PMCommand.java
Normal file
48
src/main/java/io/rixa/bot/commands/cmds/admin/PMCommand.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package io.rixa.bot.commands.cmds.admin;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.DiscordUtils;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import lombok.Getter;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.Role;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.exceptions.ErrorResponseException;
|
||||
import net.dv8tion.jda.core.requests.ErrorResponse;
|
||||
|
||||
public class PMCommand extends Command {
|
||||
|
||||
@Getter private RixaPermission rixaPermission;
|
||||
public PMCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
this.rixaPermission = rixaPermission;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
String msg = String.join(" ", args);
|
||||
Role role = DiscordUtils.getMentionedRole(guild, msg);
|
||||
if (role == null) {
|
||||
MessageFactory.create(String.format
|
||||
("You must mention a role to private message! Example: `%s @role this is a test private message!`",
|
||||
commandLabel)).queue(channel);
|
||||
return;
|
||||
}
|
||||
msg = msg.replaceFirst(role.getAsMention(), "").replaceFirst("@" + role.getName(),"");
|
||||
int usersWithRole = 0;
|
||||
int sendingFailed = 0;
|
||||
for (Member memberWithRole : guild.getMembersWithRoles(role)) {
|
||||
try {
|
||||
memberWithRole.getUser().openPrivateChannel().complete().sendMessage(msg).queue();
|
||||
usersWithRole++;
|
||||
} catch (ErrorResponseException ex) {
|
||||
if (ex.getErrorResponse() == ErrorResponse.CANNOT_SEND_TO_USER)
|
||||
sendingFailed++;
|
||||
}
|
||||
}
|
||||
MessageFactory.create("```" + msg + "```")
|
||||
.footer("Successful Deliveries: " + usersWithRole + " | Failed Deliveries: " + sendingFailed, guild.getIconUrl()).queue(channel);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import io.rixa.bot.utils.WebUtil;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class AdviceCommand extends Command {
|
||||
|
||||
public AdviceCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
MessageFactory.create(getAdvice()).setTitle("Advice Request").footer("Requested by: " + member.getEffectiveName(), member.getUser().getEffectiveAvatarUrl())
|
||||
.setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
|
||||
private String getAdvice() {
|
||||
String json;
|
||||
try {
|
||||
json = WebUtil.getWebPage("http://api.adviceslip.com/advice");
|
||||
} catch (IOException e) {
|
||||
return "Could not find any advice for you.";
|
||||
}
|
||||
|
||||
JSONObject obj = new JSONObject(json);
|
||||
JSONObject slip = obj.getJSONObject("slip");
|
||||
return slip.getString("advice");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.guild.RixaGuild;
|
||||
import io.rixa.bot.guild.manager.GuildManager;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
|
||||
public class FeaturesCommand extends Command {
|
||||
|
||||
private String[] features = {
|
||||
"Music", "Economy", "Moderation", "Server List", "User Profiles",
|
||||
"Role Management", "Fun Commands", "Custom Commands", "Games", "& more."
|
||||
};
|
||||
|
||||
public FeaturesCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
|
||||
MessageFactory.create((features == null || features.length == 0) ? "There are currently no features listed." :
|
||||
"Rixa Features: " + String.join("\n", features
|
||||
)).setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,10 @@ import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.EmbedBuilder;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.Message;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
import net.dv8tion.jda.core.exceptions.ErrorResponseException;
|
||||
import net.dv8tion.jda.core.exceptions.PermissionException;
|
||||
@@ -16,24 +19,21 @@ public class HelpCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(GuildMessageReceivedEvent event) {
|
||||
try {
|
||||
event.getMessage().delete().complete();
|
||||
} catch (PermissionException ignored) {}
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
||||
String stringBuilder = "\u2753" +
|
||||
" **Help**" +
|
||||
"\n" +
|
||||
"Click the corresponding number for more information about the command menu.";
|
||||
embedBuilder.setTitle(String.format("Help: %s", event.getGuild().getId()))
|
||||
embedBuilder.setTitle(String.format("Help: %s", guild.getId()))
|
||||
.setDescription(stringBuilder)
|
||||
.addField("1 - General Commands", "Reveals usable commands intended for `everyone`", false)
|
||||
.addField("2 - Staff Commands", "Reveals usable commands intended for `staff` use only", false)
|
||||
.addField("3 - Music Commands", "Reveals usable commands to configure Rixa for your discord!", false)
|
||||
.setColor(event.getMember().getColor());
|
||||
Message message = event.getAuthor().openPrivateChannel().complete().sendMessage(embedBuilder.build()).complete();
|
||||
MessageFactory.create(event.getMember().getAsMention()
|
||||
+ ", the help menu has been private messaged to you!").setColor(event.getMember().getColor()).queue(event.getChannel());
|
||||
.setColor(member.getColor());
|
||||
Message message = member.getUser().openPrivateChannel().complete().sendMessage(embedBuilder.build()).complete();
|
||||
MessageFactory.create(member.getAsMention()
|
||||
+ ", the help menu has been private messaged to you!").setColor(member.getColor()).queue(channel);
|
||||
try {
|
||||
message.addReaction("\u0031\u20E3").queue();
|
||||
message.addReaction("\u0032\u20E3").queue();
|
||||
|
||||
@@ -8,15 +8,14 @@ import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.EmbedBuilder;
|
||||
import net.dv8tion.jda.core.JDA;
|
||||
import net.dv8tion.jda.core.JDAInfo;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.Message;
|
||||
import net.dv8tion.jda.core.entities.MessageEmbed;
|
||||
import net.dv8tion.jda.core.entities.User;
|
||||
import net.dv8tion.jda.core.entities.*;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class InfoCommand extends Command {
|
||||
@@ -26,33 +25,32 @@ public class InfoCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(GuildMessageReceivedEvent event) {
|
||||
System.out.println("INFO COMMAND TRIGGERED");
|
||||
String[] messages = event.getMessage().getContent().split(" ");
|
||||
System.out.println(messages.length);
|
||||
if(messages.length >= 2) {
|
||||
Member member = DiscordUtils.memberSearch(event.getGuild(), event.getMessage().getContent(), false).get(0);
|
||||
public void execute(String commandLabel, Guild guild, Member author, TextChannel channel, String[] args) {
|
||||
if(args.length >= 1) {
|
||||
Member member = DiscordUtils.memberSearch(guild, String.join(" ", args), false).get(0);
|
||||
User user = member.getUser();
|
||||
OffsetDateTime time = user.getCreationTime();
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM/dd/yyyy HH:mm:ss");
|
||||
List<String> roles = new ArrayList<>();
|
||||
member.getRoles().forEach(role -> roles.add(role.getName()));
|
||||
MessageFactory.create("Playing **" + (member.getGame() == null ? "Unknown" : member.getGame().getName()) + "**")
|
||||
.setColor(member.getColor())
|
||||
.setThumbnail(user.getAvatarUrl())
|
||||
.setAuthor("User Information: " + user.getName(), null, user.getAvatarUrl())
|
||||
.addField("User", user.getAsMention(), true)
|
||||
.addField("ID", user.getId(), true)
|
||||
.addField("Roles", String.valueOf(member.getRoles().size()), true)
|
||||
.addField("Roles: "+ member.getRoles().size(), String.join(" **,** " + roles), true)
|
||||
.addField("Status", member.getOnlineStatus().name(), true)
|
||||
.addField("Mutual Guilds", String.valueOf(user.getMutualGuilds().size()), true)
|
||||
.addField("Nickname", member.getNickname() == null ? "None" : member.getNickname(), true)
|
||||
.addField("Created", time.format(formatter), true)
|
||||
.addField("Joined", member.getJoinDate().format(formatter), true)
|
||||
.queue(event.getChannel());
|
||||
.queue(channel);
|
||||
return;
|
||||
}
|
||||
User botOwner = event.getJDA().getUserById("202944101333729280");
|
||||
User botOwner = guild.getJDA().getUserById("202944101333729280");
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
|
||||
Date date1 = new Date(Rixa.getTimeUp());
|
||||
Date date1 = new Date(Rixa.getInstance().getTimeUp());
|
||||
long difference = new Date().getTime() - date1.getTime();
|
||||
long seconds = difference / 1000;
|
||||
int day = (int) TimeUnit.SECONDS.toDays(seconds);
|
||||
@@ -71,13 +69,14 @@ public class InfoCommand extends Command {
|
||||
"levels, and more. Rixa was created to bring ease and simplicity to managing Discord servers, and has since grown into much more than just a bot used for " +
|
||||
"moderation.")
|
||||
.setTitle("Rixa Discord Bot", "http://rixa.io/")
|
||||
.addField("Created", event.getJDA().getSelfUser().getCreationTime().format(formatter), true)
|
||||
.addField("Created", guild.getJDA().getSelfUser().getCreationTime().format(formatter), true)
|
||||
.addField("Bot Uptime ", uptime, true)
|
||||
.addField("Total Guilds", String.valueOf(guildCount), true)
|
||||
.addField("Total Users", String.valueOf(userCount), true)
|
||||
.addField("JDA Version", JDAInfo.VERSION, true)
|
||||
.addField("Rixa Developer", botOwner.getName() + "#" + botOwner.getDiscriminator(), true)
|
||||
.footer("Requested by " + event.getAuthor().getName() + "#" + event.getAuthor().getDiscriminator(), event.getAuthor().getAvatarUrl())
|
||||
.queue(event.getChannel());
|
||||
.footer("Requested by " + author.getUser().getName() + "#" + author.getUser().getDiscriminator(), author.getUser().getAvatarUrl())
|
||||
.queue(channel);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import io.rixa.bot.utils.WebUtil;
|
||||
import net.dv8tion.jda.core.entities.Channel;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
public class MinecraftCommand extends Command {
|
||||
|
||||
public MinecraftCommand(String command, RixaPermission rixaPermission, String description, List<String>aliases) {
|
||||
super(command, rixaPermission, description, aliases);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
if (args.length == 0) {
|
||||
MessageFactory.create("Incorrect Usage! Try " + args[0] + " {IP}:{PORT}").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
|
||||
String ipAddress = args[1];
|
||||
|
||||
JSONObject object = get(ipAddress);
|
||||
if (object == null || !object.getBoolean("status")) {
|
||||
// Not correct
|
||||
MessageFactory.create("Server Information not found!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
JSONObject onlineObject = object.getJSONObject("players");
|
||||
MessageFactory.create(
|
||||
object.getJSONObject("motds").getString("clean"))
|
||||
.setTitle(ipAddress)
|
||||
.addField("Version", object.getString("version"), true)
|
||||
.addField("Online Players", (onlineObject == null) ? "0/0" : onlineObject.getInt("online") + "/" + onlineObject.getInt("max"), true)
|
||||
.addField("Ping", String.valueOf(object.getInt("ping")), true)
|
||||
.setImage(String.format("https://use.gameapis.net/mc/query/banner/%s/night,caps", ipAddress))
|
||||
.addThumbnail("https://use.gameapis.net/mc/query/icon/" + ipAddress)
|
||||
.queue(channel);
|
||||
}
|
||||
|
||||
private JSONObject get(String ip) {
|
||||
String json;
|
||||
try {
|
||||
json = WebUtil.getWebPage("https://use.gameapis.net/mc/query/info/" + ip);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
return new JSONObject(json);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.guild.RixaGuild;
|
||||
import io.rixa.bot.guild.manager.GuildManager;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ModulesCommand extends Command {
|
||||
|
||||
public ModulesCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
|
||||
List<String> modules = new ArrayList<>();
|
||||
rixaGuild.getModules().values().forEach
|
||||
(module -> modules.add(String.format("%s [%s]", module.getName(), (module.isEnabled()) ? "Enabled" : "Disabled")));
|
||||
String moduleMessage = String.format(
|
||||
"Modules: \n%s",
|
||||
String.join(",\n", modules));
|
||||
MessageFactory.create(moduleMessage).setColor(member.getColor()).setThumbnail(guild.getIconId()).queue(channel);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,344 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
||||
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.bandcamp.BandcampAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.beam.BeamAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.http.HttpAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.local.LocalAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.soundcloud.SoundCloudAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.twitch.TwitchStreamAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.vimeo.VimeoAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
import io.rixa.bot.apis.YoutubeSearch;
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.guild.RixaGuild;
|
||||
import io.rixa.bot.guild.manager.GuildManager;
|
||||
import io.rixa.bot.guild.modules.module.MusicModule;
|
||||
import io.rixa.bot.guild.modules.module.music.MusicManager;
|
||||
import io.rixa.bot.pagination.QueuePagination;
|
||||
import io.rixa.bot.utils.DiscordUtils;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.MessageBuilder;
|
||||
import net.dv8tion.jda.core.Permission;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.entities.VoiceChannel;
|
||||
import net.dv8tion.jda.core.exceptions.PermissionException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class MusicCommand extends Command {
|
||||
|
||||
private final int DEFAULT_VOLUME = 35;
|
||||
private final AudioPlayerManager playerManager;
|
||||
|
||||
public MusicCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
this.playerManager = new DefaultAudioPlayerManager();
|
||||
this.playerManager.registerSourceManager(new YoutubeAudioSourceManager());
|
||||
this.playerManager.registerSourceManager(new SoundCloudAudioSourceManager());
|
||||
this.playerManager.registerSourceManager(new BandcampAudioSourceManager());
|
||||
this.playerManager.registerSourceManager(new VimeoAudioSourceManager());
|
||||
this.playerManager.registerSourceManager(new TwitchStreamAudioSourceManager());
|
||||
this.playerManager.registerSourceManager(new HttpAudioSourceManager());
|
||||
this.playerManager.registerSourceManager(new LocalAudioSourceManager());
|
||||
this.playerManager.registerSourceManager(new BeamAudioSourceManager());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
|
||||
MusicManager musicManager = getMusicManager(rixaGuild);
|
||||
AudioPlayer player = musicManager.getPlayer();
|
||||
QueuePagination queuePagination = musicManager.getScheduler().getQueuePagination();
|
||||
if (args.length == 1) {
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "leave":
|
||||
MessageFactory.create("Leaving voice channel...").setColor(member.getColor()).queue(channel);
|
||||
reset(guild, musicManager);
|
||||
channel.getGuild().getAudioManager().closeAudioConnection();
|
||||
break;
|
||||
case "join":
|
||||
case "summon":
|
||||
if (member.getVoiceState().getChannel() == null) {
|
||||
MessageFactory.create("You must be in a voice channel to summon me!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
VoiceChannel voiceChannel = member.getVoiceState().getChannel();
|
||||
joinVoice(voiceChannel, member, channel);
|
||||
break;
|
||||
case "pause":
|
||||
case "resume":
|
||||
case "play":
|
||||
if (player.isPaused()) {
|
||||
player.setPaused(false);
|
||||
MessageFactory.create("MusicPlayer resumed track: " + player.getPlayingTrack().getInfo().title).setColor(member.getColor()).queue(channel);
|
||||
} else if (!(player.isPaused())) {
|
||||
player.setPaused(false);
|
||||
MessageFactory.create("MusicPlayer paused track: " + player.getPlayingTrack().getInfo().title).setColor(member.getColor()).queue(channel);
|
||||
} else if (player.getPlayingTrack() != null) {
|
||||
MessageFactory.create("MusicPlayer already playing track: " + player.getPlayingTrack().getInfo().title).setColor(member.getColor()).queue(channel);
|
||||
} else if (musicManager.getScheduler().getQueue().isEmpty()) {
|
||||
MessageFactory.create("The audio queue is empty! Add a track to the queue first!").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
break;
|
||||
case "stop":
|
||||
musicManager.getScheduler().getQueue().clear();
|
||||
player.stopTrack();
|
||||
player.setPaused(false);
|
||||
MessageFactory.create("The music player has been stopped and queue has been cleared.").setColor(member.getColor()).queue(channel);
|
||||
break;
|
||||
case "skip":
|
||||
AudioTrack audioTrack = musicManager.getScheduler().nextTrack();
|
||||
if (audioTrack == null) {
|
||||
MessageFactory.create("The queue is now empty, add more to continue to listen to music!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
MessageFactory.create("Successfully skipped current track. Now playing: " + audioTrack.getInfo().title).setColor(member.getColor()).queue(channel);
|
||||
break;
|
||||
case "nowplaying":
|
||||
case "np":
|
||||
audioTrack = musicManager.getScheduler().getPlayer().getPlayingTrack();
|
||||
if (audioTrack == null) {
|
||||
MessageFactory.create("The audio queue is empty! Add a track to the queue first!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
MessageFactory.create().setAuthor(audioTrack.getInfo().title, "https://i.imgur.com/lOoybhD.png")
|
||||
.addField("Author", audioTrack.getInfo().author, true)
|
||||
.addField("Duration", getTimestamp(audioTrack.getInfo().length), true)
|
||||
.addField("Position", getTimestamp(audioTrack.getPosition()), true).queue(channel);
|
||||
break;
|
||||
case "playlist":
|
||||
case "queue":
|
||||
case "list":
|
||||
if (musicManager.getScheduler().getQueue().size() == 0) {
|
||||
MessageFactory.create("The audio queue is empty! Add a track to the queue first!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
List<AudioTrack> firstPage = queuePagination.getPage(1);
|
||||
if (firstPage == null || firstPage.isEmpty()) {
|
||||
MessageFactory.create("The audio queue is empty! Add a track to the queue first!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
List<String> titles = new ArrayList<>();
|
||||
for (int i = 0; i < firstPage.size(); i++) {
|
||||
if (firstPage.get(i) == null) continue;
|
||||
titles.add("`" + (i + 1) + ")` " + firstPage.get(i).getInfo().title);
|
||||
}
|
||||
MessageFactory.create(String.join("\n", titles)).setAuthor("Music Queue", "https://i.imgur.com/lOoybhD.png").queue(channel);
|
||||
break;
|
||||
case "restart":
|
||||
audioTrack = player.getPlayingTrack();
|
||||
if (audioTrack == null) {
|
||||
audioTrack = musicManager.getScheduler().getLastTrack();
|
||||
}
|
||||
if (audioTrack == null) {
|
||||
MessageFactory.create("No track has been previously played.").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
MessageFactory.create("Restarting Track: " + audioTrack.getInfo().title).setColor(member.getColor()).queue(channel);
|
||||
player.playTrack(audioTrack.makeClone());
|
||||
break;
|
||||
case "repeat":
|
||||
musicManager.getScheduler().setRepeating(!musicManager.getScheduler().isRepeating());
|
||||
MessageFactory.create("Music repeat has been " + (musicManager.getScheduler().isRepeating() ? "enabled" : "disabled"))
|
||||
.setColor(member.getColor()).queue(channel);
|
||||
break;
|
||||
case "playlistrepeat":
|
||||
case "pr":
|
||||
musicManager.getScheduler().setPlaylistRepeat(!musicManager.getScheduler().isPlaylistRepeat());
|
||||
MessageFactory.create("Playlist repeat has been " + (musicManager.getScheduler().isPlaylistRepeat() ? "enabled" : "disabled"))
|
||||
.setColor(member.getColor()).queue(channel);
|
||||
break;
|
||||
case "reset":
|
||||
reset(guild, musicManager);
|
||||
guild.getAudioManager().setSendingHandler(musicManager.getSendHandler());
|
||||
MessageFactory.create("The player has been completely reset!").setColor(member.getColor()).queue(channel);
|
||||
break;
|
||||
case "shuffle":
|
||||
if (musicManager.getScheduler().getQueue().isEmpty()) {
|
||||
MessageFactory.create("The queue is currently empty!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
musicManager.getScheduler().shuffle();
|
||||
MessageFactory.create("The queue has been shuffled!").setColor(member.getColor()).queue(channel);
|
||||
break;
|
||||
}
|
||||
} else if (args.length == 2) {
|
||||
String string = StringUtils.join(args, " ", 1, args.length);
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "join":
|
||||
VoiceChannel voiceChannel = DiscordUtils.voiceChannelSearch(guild, string);
|
||||
if (voiceChannel == null) {
|
||||
return;
|
||||
}
|
||||
joinVoice(voiceChannel, member, channel);
|
||||
break;
|
||||
case "play":
|
||||
case "playlist":
|
||||
case "pplay":
|
||||
if (member.getVoiceState().getChannel() == null) {
|
||||
MessageFactory.create("You must be in a voice channel to summon me!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
if (guild.getSelfMember().getVoiceState().getChannel() == null) {
|
||||
joinVoice(member.getVoiceState().getChannel(), member, channel);
|
||||
}
|
||||
loadAndPlay(musicManager, channel, args[1], (args[1].toLowerCase().contains("playlist")
|
||||
|| args[0].equalsIgnoreCase("playlist")
|
||||
|| args[0].equalsIgnoreCase("pplay")));
|
||||
break;
|
||||
case "volume":
|
||||
case "vol":
|
||||
try {
|
||||
int newVolume = Math.max(10, Math.min(100, Integer.parseInt(args[1])));
|
||||
int oldVolume = player.getVolume();
|
||||
player.setVolume(newVolume);
|
||||
MessageFactory.create("Music player volume updated from `" + oldVolume + "` to `" + newVolume + "`").setColor(member.getColor()).queue(channel);
|
||||
} catch (NumberFormatException e) {
|
||||
MessageFactory.create(args[1] + " is not a valid integer. Try a number between 10 and 100.").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
break;
|
||||
case "forward":
|
||||
if (player.getPlayingTrack() == null) {
|
||||
MessageFactory.create("The audio queue is empty! Add a track to the queue first!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
player.getPlayingTrack().setPosition(Math.max(0, player.getPlayingTrack().getPosition() + (Integer.parseInt(args[1]) * 1000)));
|
||||
} catch (NumberFormatException e) {
|
||||
MessageFactory.create(args[1] + " is not a valid integer. Try `10`!").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
break;
|
||||
case "back":
|
||||
if (player.getPlayingTrack() == null) {
|
||||
MessageFactory.create("The audio queue is empty! Add a track to the queue first!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
player.getPlayingTrack().setPosition(Math.max(0, player.getPlayingTrack().getPosition() - (Integer.parseInt(args[1]) * 1000)));
|
||||
} catch (NumberFormatException e) {
|
||||
MessageFactory.create(args[1] + " is not a valid integer. Try `10`!").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else if (args.length >= 3) {
|
||||
String string = StringUtils.join(args, " ", 1, args.length);
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "join":
|
||||
VoiceChannel voiceChannel = DiscordUtils.voiceChannelSearch(guild, string);
|
||||
if (voiceChannel == null) {
|
||||
MessageFactory.create("Sorry I was unable to find the VoiceChannel: `" + string + "`.").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
joinVoice(voiceChannel, member, channel);
|
||||
break;
|
||||
case "youtube":
|
||||
case "ytsearch":
|
||||
case "yt":
|
||||
case "search":
|
||||
try {
|
||||
YoutubeSearch ytSearch = new YoutubeSearch(string);
|
||||
loadAndPlay(musicManager, channel, ytSearch.getUrl(0), false);
|
||||
} catch (IOException e) {
|
||||
MessageFactory.create("Error Occurred: Could not play youtube video.").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void joinVoice(VoiceChannel voiceChannel, Member member, TextChannel channel) {
|
||||
try {
|
||||
channel.getGuild().getAudioManager().openAudioConnection(voiceChannel);
|
||||
MessageFactory.create("Entering Voice Channel: " + voiceChannel.getName()).setColor(member.getColor()).queue(channel);
|
||||
} catch (PermissionException e) {
|
||||
if (e.getPermission() == Permission.VOICE_CONNECT) {
|
||||
MessageFactory.create("I do not have permission to join the requested voice channel.").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void reset(Guild guild, MusicManager musicManager) {
|
||||
synchronized (musicManager) {
|
||||
musicManager.getScheduler().getQueue().clear();
|
||||
musicManager.getScheduler().getPlayer().destroy();
|
||||
guild.getAudioManager().setSendingHandler(null);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadAndPlay(MusicManager mng, final TextChannel channel, final String trackUrl, final boolean addPlaylist) {
|
||||
playerManager.loadItemOrdered(mng, trackUrl, new AudioLoadResultHandler() {
|
||||
@Override
|
||||
public void trackLoaded(AudioTrack track) {
|
||||
String msg = "Adding to queue: " + track.getInfo().title;
|
||||
mng.getScheduler().queue(track);
|
||||
MessageFactory.create(msg).setColor(Color.decode("#4CC276")).queue(channel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playlistLoaded(AudioPlaylist playlist) {
|
||||
AudioTrack firstTrack = playlist.getSelectedTrack();
|
||||
List<AudioTrack> tracks = playlist.getTracks();
|
||||
|
||||
if (firstTrack == null) {
|
||||
firstTrack = playlist.getTracks().get(0);
|
||||
}
|
||||
|
||||
if (addPlaylist) {
|
||||
MessageFactory.create("Adding (" + playlist.getTracks().size() + ") tracks to queue from playlist: " + playlist.getName()).setColor(Color.decode("#4CC276")).queue(channel);
|
||||
tracks.forEach(mng.getScheduler()::queue);
|
||||
} else {
|
||||
MessageFactory.create("Adding to queue " + firstTrack.getInfo().title + " (first track of playlist " + playlist.getName() + ")").setColor(Color.decode("#4CC276")).queue(channel);
|
||||
mng.getScheduler().queue(firstTrack);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noMatches() {
|
||||
MessageFactory.create("Nothing found by " + trackUrl).setColor(Color.decode("#4CC276")).queue(channel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFailed(FriendlyException exception) {
|
||||
MessageFactory.create("Could not play: " + exception.getMessage()).setColor(Color.decode("#4CC276")).queue(channel);
|
||||
exception.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public MusicManager getMusicManager(RixaGuild guild) {
|
||||
MusicModule musicModule = (MusicModule) guild.getModule("Music");
|
||||
if (musicModule.getMusicManager() != null) {
|
||||
return musicModule.getMusicManager();
|
||||
}
|
||||
MusicManager musicManager = new MusicManager(this.playerManager);
|
||||
musicManager.getPlayer().setVolume(DEFAULT_VOLUME);
|
||||
musicModule.setMusicManager(musicManager);
|
||||
return musicManager;
|
||||
}
|
||||
|
||||
private String getTimestamp(long milliseconds) {
|
||||
int seconds = (int) (milliseconds / 1000) % 60;
|
||||
int minutes = (int) ((milliseconds / (1000 * 60)) % 60);
|
||||
int hours = (int) ((milliseconds / (1000 * 60 * 60)) % 24);
|
||||
|
||||
if (hours > 0)
|
||||
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
|
||||
else
|
||||
return String.format("%02d:%02d", minutes, seconds);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,9 @@ package io.rixa.bot.commands.cmds.general;
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
|
||||
public class PingCommand extends Command {
|
||||
@@ -12,7 +15,7 @@ public class PingCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(GuildMessageReceivedEvent event) {
|
||||
MessageFactory.create("Pong! [" + event.getJDA().getPing() + "ms]").setColor(event.getMember().getColor()).queue(event.getChannel());
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
MessageFactory.create("Pong! [" + guild.getJDA().getPing() + "ms]").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import io.rixa.bot.utils.WebUtil;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class QuoteCommand extends Command {
|
||||
|
||||
public QuoteCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
|
||||
}
|
||||
|
||||
public void execute(GuildMessageReceivedEvent event) {
|
||||
String[] quote = getAdvice();
|
||||
MessageFactory.create(quote[0]).setTitle("Author: " + quote[1]).footer("Requested by: " + event.getMember().getEffectiveName(), event.getAuthor().getEffectiveAvatarUrl())
|
||||
.setColor(event.getMember().getColor()).queue(event.getChannel());
|
||||
}
|
||||
|
||||
private String[] getAdvice() {
|
||||
String[] strings = new String[2];
|
||||
String json;
|
||||
try {
|
||||
json = WebUtil.getWebPage("https://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=json");
|
||||
} catch (IOException e) {
|
||||
strings[0] = "Could not find any quotes for you.";
|
||||
strings[1] = "Author not found";
|
||||
return strings;
|
||||
}
|
||||
|
||||
JSONObject obj = new JSONObject(json);
|
||||
String quote = obj.getString("quoteText");
|
||||
String author = obj.getString("quoteAuthor");
|
||||
strings[0] = quote;
|
||||
strings[1] = author;
|
||||
return strings;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.DiscordUtils;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.Role;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RoleMemberList extends Command {
|
||||
|
||||
public RoleMemberList(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
String string = String.join(" ", args);
|
||||
Role role = DiscordUtils.searchFirstRole(guild, string);
|
||||
if (role == null) {
|
||||
MessageFactory.create("Incorrect Usage! Example: " + commandLabel + " Member!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
List<Member> roleMembers = guild.getMembersWithRoles(role);
|
||||
if (roleMembers.isEmpty()) {
|
||||
MessageFactory.create("Could not find any users with the role " + role.getName()).setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
StringBuilder builder = new StringBuilder("Users With Role `").append(role.getName()).append("`: ");
|
||||
List<String> membersWithRole = new ArrayList<>();
|
||||
roleMembers.forEach(roleMember -> membersWithRole.add(format(roleMember)));
|
||||
builder.append(String.join(", ", membersWithRole));
|
||||
MessageFactory.create(builder.toString().trim()).setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
|
||||
private String format(Member member) {
|
||||
String name = member.getUser().getName() + "#" + member.getUser().getDiscriminator();
|
||||
if (member.getNickname() != null && !member.getNickname().isEmpty()) {
|
||||
name = name + String.format(" [%s]", member.getNickname());
|
||||
}
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,9 @@ import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.guild.RixaGuild;
|
||||
import io.rixa.bot.guild.manager.GuildManager;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.entities.User;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
|
||||
@@ -17,25 +20,25 @@ public class ServerInfoCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(GuildMessageReceivedEvent event) {
|
||||
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getGuild());
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
|
||||
User owner = event.getGuild().getOwner().getUser();
|
||||
User owner = guild.getOwner().getUser();
|
||||
MessageFactory
|
||||
.create(rixaGuild.getDescription())
|
||||
.setTitle(event.getGuild().getName(), String.format("http://rixa.io/servers/%s", event.getGuild().getId()))
|
||||
.addField("Created", event.getGuild().getCreationTime().format(formatter), true)
|
||||
.addField("Region", event.getGuild().getRegion().toString(), true)
|
||||
.addField("Users", String.valueOf(event.getGuild().getMembers().size()), true)
|
||||
.addField("Channel Categories", String.valueOf(event.getGuild().getCategories().size()), true)
|
||||
.addField("Text Channels", String.valueOf(event.getGuild().getTextChannels().size()), true)
|
||||
.addField("Voice Channels", String.valueOf(event.getGuild().getVoiceChannels().size()), true)
|
||||
.addField("Verification Level", event.getGuild().getVerificationLevel().toString(), true)
|
||||
.addField("Roles", String.valueOf(event.getGuild().getRoles().size()), true)
|
||||
.setTitle(guild.getName(), String.format("http://rixa.io/servers/%s", guild.getId()))
|
||||
.addField("Created", guild.getCreationTime().format(formatter), true)
|
||||
.addField("Region", guild.getRegion().toString(), true)
|
||||
.addField("Users", String.valueOf(guild.getMembers().size()), true)
|
||||
.addField("Channel Categories", String.valueOf(guild.getCategories().size()), true)
|
||||
.addField("Text Channels", String.valueOf(guild.getTextChannels().size()), true)
|
||||
.addField("Voice Channels", String.valueOf(guild.getVoiceChannels().size()), true)
|
||||
.addField("Verification Level", guild.getVerificationLevel().toString(), true)
|
||||
.addField("Roles", String.valueOf(guild.getRoles().size()), true)
|
||||
.addField("Owner", owner.getName() + "#" + owner.getDiscriminator(), true)
|
||||
.addField("Enlisted", String.valueOf(true), true)
|
||||
.setThumbnail(event.getGuild().getIconUrl())
|
||||
.footer("Server Id: " + event.getGuild().getId(), event.getGuild().getIconUrl())
|
||||
.queue(event.getChannel());
|
||||
.setThumbnail(guild.getIconUrl())
|
||||
.footer("Server Id: " + guild.getId(), guild.getIconUrl())
|
||||
.queue(channel);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.apis.UrbanDictionary;
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.MessageBuilder;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
public class UrbanDictionaryCommand extends Command {
|
||||
|
||||
public UrbanDictionaryCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) throws IOException {
|
||||
String searchQuery = String.join(" ", args);
|
||||
UrbanDictionary urbanDictionary = null;
|
||||
try {
|
||||
urbanDictionary = new UrbanDictionary(URLEncoder.encode(searchQuery, "UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if(urbanDictionary == null || !urbanDictionary.search()) {
|
||||
MessageFactory.create("Search term not found.").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
MessageFactory.create(urbanDictionary.getDefinition()).setAuthor(
|
||||
String.format("Definition: %s", urbanDictionary.getWordToSearch()),
|
||||
"https://s-media-cache-ak0.pinimg.com/originals/f2/aa/37/f2aa3712516cfd0cf6f215301d87a7c2.jpg").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package io.rixa.bot.commands.cmds.general;
|
||||
|
||||
import io.rixa.bot.apis.YoutubeSearch;
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class YoutubeCommand extends Command {
|
||||
|
||||
public YoutubeCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
String searchQuery = String.join(" ", args);
|
||||
try {
|
||||
YoutubeSearch ytSearch = new YoutubeSearch(searchQuery);
|
||||
channel.sendMessage(ytSearch.getUrl(0)).queue();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package io.rixa.bot.commands.cmds.moderator;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.guild.RixaGuild;
|
||||
import io.rixa.bot.guild.manager.GuildManager;
|
||||
import io.rixa.bot.user.RixaUser;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import io.rixa.bot.utils.Utils;
|
||||
import lombok.Getter;
|
||||
import net.dv8tion.jda.core.Permission;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.Message;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.exceptions.PermissionException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ClearCommand extends Command {
|
||||
|
||||
@Getter
|
||||
private RixaPermission rixaPermission;
|
||||
public ClearCommand(String command, RixaPermission rixaPermission, String description, List<String> aliases) {
|
||||
super(command, rixaPermission, description, aliases);
|
||||
this.rixaPermission = rixaPermission;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
|
||||
if (args == null || args.length == 0 || !Utils.isInteger(args[0])) {
|
||||
MessageFactory.create(String.format("Incorrect Usage! Example: `%s%s 10`", rixaGuild.getSettings().getPrefix(),
|
||||
commandLabel)).setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
RixaUser user = new RixaUser();
|
||||
if (!(user.hasPermission(rixaPermission))) {
|
||||
MessageFactory.create("Sorry! You do not have permission for this command!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
int amount = Integer.parseInt(args[0]);
|
||||
if (amount < 1 || amount > 100) {
|
||||
MessageFactory.create("Please try a number less than 100 and greater than 1 and :grimacing:").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
int i = deleteMessages(channel, amount);
|
||||
MessageFactory.create("Successfully deleted *" + i + "* messages in " + channel.getAsMention())
|
||||
.footer("Requested by: " + member.getEffectiveName(), member.getUser().getEffectiveAvatarUrl())
|
||||
.setColor(member.getColor())
|
||||
.queue(channel);
|
||||
}
|
||||
|
||||
private int deleteMessages(TextChannel channel, int amount) {
|
||||
List<Message> messageHistory= channel.getHistory().retrievePast(amount).complete();
|
||||
List<Message> pinnedMessages = channel.getPinnedMessages().complete();
|
||||
List<Message> newMessages = new ArrayList<>();
|
||||
int i = 0;
|
||||
messageHistory.forEach(message -> {
|
||||
if (!(pinnedMessages.contains(message))) {
|
||||
newMessages.add(message);
|
||||
}
|
||||
});
|
||||
// !mute Savvy 10s Hello Savvy!
|
||||
try {
|
||||
channel.deleteMessages(newMessages).queue();
|
||||
i++;
|
||||
} catch (PermissionException ex) {
|
||||
if (ex.getPermission() == Permission.MESSAGE_MANAGE)
|
||||
MessageFactory.create("I do not have permission to clear messages within this channel!").queue(channel);
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package io.rixa.bot.commands.cmds.moderator;
|
||||
|
||||
import io.rixa.bot.commands.Command;
|
||||
import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.utils.DiscordUtils;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import io.rixa.bot.utils.Utils;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
|
||||
public class MuteCommand extends Command {
|
||||
|
||||
private RixaPermission rixaPermission;
|
||||
public MuteCommand(String command, RixaPermission rixaPermission, String description) {
|
||||
super(command, rixaPermission, description);
|
||||
this.rixaPermission = rixaPermission;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
// RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
|
||||
String argumentString = String.join(" ", args);
|
||||
Object[] objArray = DiscordUtils.memberSearchArray(guild, argumentString, false);
|
||||
if (objArray.length == 0) {
|
||||
MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel);
|
||||
}
|
||||
Member targetMember = (Member) objArray[1];
|
||||
String targetMemberName = String.valueOf(objArray[0]);
|
||||
if (targetMember == null) {
|
||||
MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
argumentString = argumentString.replaceFirst(targetMemberName, "").trim();
|
||||
args = argumentString.split(" ");
|
||||
String time = args[0].trim();
|
||||
argumentString = String.join(" ", args).replaceFirst(time, "");
|
||||
long milliseconds = Utils.toMilliSec(time);
|
||||
MessageFactory.create("Duration: " + time + "\nReason: " + argumentString + "\nDuration in Milliseconds: " + milliseconds).queue(channel);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,9 @@ import io.rixa.bot.commands.perms.RixaPermission;
|
||||
import io.rixa.bot.guild.RixaGuild;
|
||||
import io.rixa.bot.guild.manager.GuildManager;
|
||||
import io.rixa.bot.utils.MessageFactory;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
||||
|
||||
public class ShutdownCommand extends Command {
|
||||
@@ -15,13 +18,14 @@ public class ShutdownCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(GuildMessageReceivedEvent event) {
|
||||
if (!(Rixa.getInstance().getConfiguration().isBotAdmin(event.getAuthor().getId()))) {
|
||||
new MessageFactory(event.getMember().getAsMention() + ", you do not have permission for this command.").setColor(event.getMember().getColor()).queue(event.getChannel());
|
||||
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
|
||||
if (!(Rixa.getInstance().getConfiguration().isBotAdmin(member.getUser().getId()))) {
|
||||
new MessageFactory(member.getAsMention()
|
||||
+ ", you do not have permission for this command.").setColor(member.getColor()).queue(channel);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
MessageFactory.create("Shutting down...").queue(event.getChannel());
|
||||
MessageFactory.create("Shutting down...").selfDestruct(0).queue(channel);
|
||||
for (RixaGuild rixaGuild : GuildManager.getInstance().getGuilds().values()) {
|
||||
Thread.sleep(50);
|
||||
rixaGuild.save();
|
||||
|
||||
@@ -22,7 +22,7 @@ public class CommandHandler {
|
||||
}
|
||||
|
||||
public Command getCommand(String commandName) throws CommandNotFoundException {
|
||||
if (commandMap.containsKey(commandName)) return commandMap.get(commandName);
|
||||
if (commandMap.containsKey(commandName.toLowerCase())) return commandMap.get(commandName.toLowerCase());
|
||||
for(Command command: commandMap.values()) {
|
||||
if (command.getAliases().contains(commandName)) {
|
||||
return command;
|
||||
|
||||
Reference in New Issue
Block a user