Implemented MuteCommand, default role is now applied when user joins

This commit is contained in:
Savvy 2018-02-21 13:53:52 -05:00
parent cfe7ec22e2
commit bbd09c7972
5 changed files with 571 additions and 486 deletions

View File

@ -14,6 +14,10 @@
<name>jcenter-bintray</name>
<url>http://jcenter.bintray.com</url>
</repository>
<repository>
<id>onarandombox</id>
<url>http://repo.onarandombox.com/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
@ -67,6 +71,11 @@
<version>1.4.7</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.dumptruckman</groupId>
<artifactId>taskmin</artifactId>
<version>0.1.0</version>
</dependency>
</dependencies>
<build>

View File

@ -10,16 +10,18 @@ import io.rixa.bot.user.RixaUser;
import io.rixa.bot.user.manager.UserManager;
import io.rixa.bot.utils.DiscordUtils;
import io.rixa.bot.utils.MessageFactory;
import net.dv8tion.jda.core.entities.*;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
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 org.apache.commons.lang3.StringUtils;
public class ConfigCommand extends Command {
private Pagination pagination;
public ConfigCommand(String command, RixaPermission rixaPermission, String description) {
super(command, rixaPermission, description);
@ -49,7 +51,8 @@ public class ConfigCommand extends Command {
}
@Override
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel,
String[] args) {
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
if (args.length == 2) {
switch (args[0].toLowerCase()) {
@ -85,7 +88,7 @@ public class ConfigCommand extends Command {
// Role not found
return;
}
switch(args[1].toLowerCase()) {
switch (args[1].toLowerCase()) {
case "muterole":
rixaGuild.getSettings().setMuteRole(role);
break;
@ -171,13 +174,15 @@ public class ConfigCommand extends Command {
case "addpermissions":
RixaPermission permission = searchPerms(args);
if (permission == null) {
MessageFactory.create("That permission does not exist!").setColor(member.getColor()).queue(channel);
MessageFactory.create("That permission does not exist!").setColor(member.getColor())
.queue(channel);
return;
}
if (args[1].equalsIgnoreCase("role")) {
role = DiscordUtils.searchFirstRole(guild, string);
if (role == null) {
MessageFactory.create("That role does not exist!").setColor(member.getColor()).queue(channel);
MessageFactory.create("That role does not exist!").setColor(member.getColor())
.queue(channel);
return;
}
rixaGuild.addPermission(role.getId(), permission);
@ -189,7 +194,8 @@ public class ConfigCommand extends Command {
if (args[1].equalsIgnoreCase("user")) {
List<Member> targets = DiscordUtils.memberSearch(guild, string, false);
if (targets.isEmpty()) {
MessageFactory.create("Could not find that user!").setColor(member.getColor()).queue(channel);
MessageFactory.create("Could not find that user!").setColor(member.getColor())
.queue(channel);
return;
}
RixaUser targetUser = UserManager.getInstance().getUser(targets.get(0).getUser());
@ -199,7 +205,9 @@ public class ConfigCommand extends Command {
guild.getIconUrl()).setColor(member.getColor()).queue(channel);
return;
}
MessageFactory.create("Incorrect Usage! Try " + commandLabel + " addPerm <user/role> <permission>!").setColor(member.getColor())
MessageFactory
.create("Incorrect Usage! Try " + commandLabel + " addPerm <user/role> <permission>!")
.setColor(member.getColor())
.queue(channel);
break;
case "removeperm":
@ -208,13 +216,15 @@ public class ConfigCommand extends Command {
case "removeperms":
permission = searchPerms(args);
if (permission == null) {
MessageFactory.create("That permission does not exist!").setColor(member.getColor()).queue(channel);
MessageFactory.create("That permission does not exist!").setColor(member.getColor())
.queue(channel);
return;
}
if (args[1].equalsIgnoreCase("role")) {
role = DiscordUtils.searchFirstRole(guild, string);
if (role == null) {
MessageFactory.create("That role does not exist!").setColor(member.getColor()).queue(channel);
MessageFactory.create("That role does not exist!").setColor(member.getColor())
.queue(channel);
return;
}
rixaGuild.removePermission(role.getId(), permission);
@ -226,7 +236,8 @@ public class ConfigCommand extends Command {
if (args[1].equalsIgnoreCase("user")) {
List<Member> targets = DiscordUtils.memberSearch(guild, string, false);
if (targets.isEmpty()) {
MessageFactory.create("Could not find that user!").setColor(member.getColor()).queue(channel);
MessageFactory.create("Could not find that user!").setColor(member.getColor())
.queue(channel);
return;
}
RixaUser targetUser = UserManager.getInstance().getUser(targets.get(0).getUser());
@ -236,7 +247,9 @@ public class ConfigCommand extends Command {
guild.getIconUrl()).setColor(member.getColor()).queue(channel);
return;
}
MessageFactory.create("Incorrect Usage! Try " + commandLabel + " addPerm <user/role> <permission>!").setColor(member.getColor())
MessageFactory
.create("Incorrect Usage! Try " + commandLabel + " addPerm <user/role> <permission>!")
.setColor(member.getColor())
.queue(channel);
break;
default:
@ -255,7 +268,8 @@ public class ConfigCommand extends Command {
messageFactory.addField(object.split(" ; ")[0].replace("%p", prefix),
object.split(" ; ")[1], false);
});
messageFactory.footer("Page: (" + page + " / " + (pagination.getMaxPage()) + ")", member.getGuild().getIconUrl())
messageFactory.footer("Page: (" + page + " / " + (pagination.getMaxPage()) + ")",
member.getGuild().getIconUrl())
.setColor(member.getColor()).selfDestruct(0).send(member.getUser(), success ->
success.addReaction("\u2B05").queue(v -> success.addReaction("\u27A1").queue()));
}

View File

@ -1,25 +1,36 @@
package io.rixa.bot.commands.cmds.moderator;
import com.dumptruckman.taskmin.Task;
import com.dumptruckman.taskmin.TaskManager;
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.DiscordUtils;
import io.rixa.bot.utils.MessageFactory;
import io.rixa.bot.utils.Utils;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
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;
public class MuteCommand extends Command {
private RixaPermission rixaPermission;
private TaskManager taskManager;
public MuteCommand(String command, RixaPermission rixaPermission, String description) {
super(command, rixaPermission, description);
this.rixaPermission = rixaPermission;
this.taskManager = TaskManager.createBasicTaskManager();
}
@Override
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) {
// RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
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) {
@ -40,8 +51,48 @@ public class MuteCommand extends Command {
}
String time = args[0].trim();
argumentString = String.join(" ", args).replaceFirst(time, "");
if (argumentString.length() > 255) {
MessageFactory.create(
"Sorry your `reason` exceeds the maximum character length of 255!")
.setColor(member.getColor()).queue(channel);
return;
}
long milliseconds = Utils.toMilliSec(time);
MessageFactory.create("Duration: " + time + "\nReason: " + argumentString + "\nDuration in Milliseconds: " + milliseconds)
.queue(channel);
String reason = argumentString;
guild.getController().addRolesToMember(targetMember, rixaGuild.getSettings().getMuteRole())
.queue(onSuccess -> MessageFactory.create(String.format(
"Temporarily muted %s for %s\n Reason: %s",
this.getUser(targetMember.getUser()),
this.getTime(milliseconds),
reason))
.setColor(member.getColor()).setTimestamp().queue(channel),
onFailure -> MessageFactory.create(
"Could not successfully mute user `" + targetMember.getUser().getName() + "#"
+ targetMember.getUser()
.getDiscriminator() + "`. Reason: " + onFailure.getMessage())
.setColor(member.getColor()).setTimestamp().queue(channel));
this.taskManager
.addTask(Task.builder(() ->
guild.getController()
.removeRolesFromMember(targetMember, rixaGuild.getSettings().getMuteRole()).queue())
.executeAt(LocalDateTime.now().plus(milliseconds, ChronoUnit.MILLIS)));
}
private String getTime(long milliseconds) {
long seconds, minutes, hours, days;
seconds = milliseconds / 1000;
minutes = seconds / 60;
seconds = seconds % 60;
hours = minutes / 60;
days = hours / 24;
minutes = minutes % 60;
return(String.format("%s days, %s hours, %s minutes, %s seconds", days, hours, minutes, seconds));
}
private String getUser(User member) {
return member.getName() + "#" + member.getDiscriminator();
}
}

View File

@ -27,6 +27,10 @@ public class UserListener {
.selfDestruct(0).queue(rixaGuild.getSettings().getGreetings());
}
if (!rixaGuild.getSettings().isJoinVerification()) {
if (rixaGuild.getSettings().getDefaultRole() != null) {
event.getGuild().getController()
.addRolesToMember(event.getMember(), rixaGuild.getSettings().getDefaultRole()).queue();
}
return;
}
if (!rixaGuild.getConfirmationUsers().contains(event.getUser().getId())) {

View File

@ -1,14 +1,12 @@
package io.rixa.bot.utils;
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.VoiceChannel;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
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.VoiceChannel;
public class DiscordUtils {
@ -16,16 +14,20 @@ public class DiscordUtils {
List<Member> members = new ArrayList<>();
String finalString = string.toLowerCase();
for (Member member : guild.getMembers()) {
if ((member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator()).contains(finalString)
if ((member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator())
.contains(finalString)
|| (member.getEffectiveName().toLowerCase().contains(finalString))
|| finalString.contains(member.getUser().getId())
|| finalString.contains(member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator())
|| finalString.contains(
member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator())
|| finalString.contains(member.getEffectiveName().toLowerCase())
|| finalString.contains(member.getUser().getName().toLowerCase())
|| finalString.equalsIgnoreCase(member.getEffectiveName().toLowerCase())
|| finalString.equalsIgnoreCase(member.getUser().getName().toLowerCase())) {
if (!bots && member.getUser().isBot()) continue;
if (!bots && member.getUser().isBot()) {
continue;
}
members.add(member);
}
}
@ -38,7 +40,8 @@ public class DiscordUtils {
String finalString = string.toLowerCase().trim();
for (Member member : guild.getMembers()) {
//String nameDescrim = member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator().toLowerCase();
if (finalString.contains(member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator())) {
if (finalString.contains(
member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator())) {
array[0] = member.getEffectiveName();
array[1] = member;
break;
@ -46,7 +49,7 @@ public class DiscordUtils {
array[0] = member.getEffectiveName();
array[1] = member;
break;
}else if (finalString.contains(member.getEffectiveName().toLowerCase())) {
} else if (finalString.contains(member.getEffectiveName().toLowerCase())) {
array[0] = member.getEffectiveName();
array[1] = member;
break;
@ -66,10 +69,12 @@ public class DiscordUtils {
public static List<Role> roleSearch(Guild guild, String string) {
List<Role> roles = new ArrayList<>();
guild.getRoles().forEach(role -> {
if (role.getName().toLowerCase().contains(string.toLowerCase())
if (role.getName().equalsIgnoreCase(string)
|| role.getName().toLowerCase().contains(string.toLowerCase())
|| string.contains(role.getId())
|| string.toLowerCase().contains(role.getName().toLowerCase()))
|| string.toLowerCase().contains(role.getName().toLowerCase())) {
roles.add(role);
}
});
return roles;
}
@ -90,14 +95,14 @@ public class DiscordUtils {
if (!voiceChannels.isEmpty()) {
return voiceChannels.get(0);
}
Optional<VoiceChannel> optional = guild.getVoiceChannels().stream().sorted().filter(voiceChannel -> voiceChannel.getId().equalsIgnoreCase(string) ||
Optional<VoiceChannel> optional = guild.getVoiceChannels().stream().sorted()
.filter(voiceChannel -> voiceChannel.getId().equalsIgnoreCase(string) ||
voiceChannel.getName().equalsIgnoreCase(string) ||
voiceChannel.getName().contains(string)).findFirst();
return optional.orElse(null);
}
public static int getLevelFromExperience(int xp) {
int level = 0;
while (xp >= getNeededXP(level)) {
@ -108,7 +113,9 @@ public class DiscordUtils {
}
public static Double getNeededXP(double n) {
if (n < 0) return 0.0;
if (n < 0) {
return 0.0;
}
return (6 * Math.pow(n, 3) + 119 * n + 100);
}