Merge pull request #282 from BigBotNetwork/greg-dev

Merged!
This commit is contained in:
Skidder 2019-12-30 19:30:31 +01:00 committed by GitHub
commit d528716b5b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
58 changed files with 356 additions and 98 deletions

13
pom.xml
View file

@ -19,7 +19,7 @@
<dependency> <dependency>
<groupId>net.dv8tion</groupId> <groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId> <artifactId>JDA</artifactId>
<version>4.1.0_87</version> <version>4.1.0_88</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.json</groupId> <groupId>org.json</groupId>
@ -36,11 +36,6 @@
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<version>2.8.6</version> <version>2.8.6</version>
</dependency> </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId> <artifactId>slf4j-simple</artifactId>
@ -61,7 +56,6 @@
<artifactId>lavaplayer</artifactId> <artifactId>lavaplayer</artifactId>
<version>1.3.32</version> <version>1.3.32</version>
</dependency> </dependency>
</dependencies> </dependencies>
<repositories> <repositories>
@ -83,10 +77,6 @@
<artifactId>maven-resources-plugin</artifactId> <artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version> <version>3.1.0</version>
</plugin> </plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin> <plugin>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version> <version>2.22.2</version>
@ -125,6 +115,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration> <configuration>
<source>13</source> <source>13</source>
<target>13</target> <target>13</target>

View file

@ -10,7 +10,6 @@ import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack; import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message;
@ -26,13 +25,13 @@ import java.util.concurrent.TimeUnit;
public class AudioManager { public class AudioManager {
public Map<String, Map.Entry<AudioPlayer, TrackManager>> players = new HashMap<>();
private final AudioPlayerManager myManager = new DefaultAudioPlayerManager();
public AudioManager() { public AudioManager() {
AudioSourceManagers.registerRemoteSources(myManager); AudioSourceManagers.registerRemoteSources(myManager);
} }
public Map<String, Map.Entry<AudioPlayer, TrackManager>> players = new HashMap<>();
private final AudioPlayerManager myManager = new DefaultAudioPlayerManager();
public boolean hasPlayer(Guild guild) { public boolean hasPlayer(Guild guild) {
return players.containsKey(guild.getId()); return players.containsKey(guild.getId());
} }

View file

@ -6,7 +6,12 @@ package com.bbn.hadder.commands;
public interface Command { public interface Command {
void executed(String[] args, CommandEvent event); void executed(String[] args, CommandEvent event);
String[] labels(); String[] labels();
String description(); String description();
String usage(); String usage();
String example();
} }

View file

@ -9,7 +9,6 @@ import com.bbn.hadder.utils.EventWaiter;
import com.bbn.hadder.utils.MessageEditor; import com.bbn.hadder.utils.MessageEditor;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.events.Event;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;

View file

@ -66,6 +66,11 @@ public class AvatarCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "user/id"; return "[User]";
}
@Override
public String example() {
return "@Skidder";
} }
} }

View file

@ -73,6 +73,11 @@ public class ClydeCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "content"; return "[Content]";
}
@Override
public String example() {
return "Hey I am Clyde";
} }
} }

View file

@ -58,6 +58,11 @@ public class GifCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "searchterm"; return "[Term]";
}
@Override
public String example() {
return "Cute cat";
} }
} }

View file

@ -57,6 +57,11 @@ public class MemeCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -34,6 +34,11 @@ public class AboutCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -50,6 +50,11 @@ public class EqualsCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -9,6 +9,7 @@ import net.dv8tion.jda.api.Permission;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional;
public class HelpCommand implements Command { public class HelpCommand implements Command {
@ -59,14 +60,20 @@ public class HelpCommand implements Command {
public void sendHelp(Command cmd, CommandEvent event) { public void sendHelp(Command cmd, CommandEvent event) {
if (!cmd.getClass().getPackageName().endsWith("owner") || (cmd.getClass().getPackageName().endsWith("owner") && if (!cmd.getClass().getPackageName().endsWith("owner") || (cmd.getClass().getPackageName().endsWith("owner") &&
(event.getAuthor().getId().equals("477141528981012511") || event.getAuthor().getId().equals("261083609148948488")))) { (event.getAuthor().getId().equals("477141528981012511") || event.getAuthor().getId().equals("261083609148948488")))) {
String name = cmd.labels()[0]; String name = labels()[0];
StringBuilder b = new StringBuilder();
b.append(event.getMessageEditor().getTerm("commands.general.help.description")).append(" ").append(event.getMessageEditor().getTerm(cmd.description())).append("\n");
if (cmd.usage() != null) {
b.append(event.getMessageEditor().getTerm("commands.general.help.usage")).append(" ").append(event.getRethink().getGuildPrefix(event.getGuild().getId())).append(name).append(" ").append(cmd.usage()).append("\n");
}
if (cmd.example() != null) {
b.append(event.getMessageEditor().getTerm("commands.general.help.example")).append(" ").append(event.getRethink().getGuildPrefix(event.getGuild().getId())).append(name).append(" ").append(cmd.example());
}
event.getChannel().sendMessage(event.getMessageEditor().getMessage( event.getChannel().sendMessage(event.getMessageEditor().getMessage(
MessageEditor.MessageType.INFO, "", cmd.description()) MessageEditor.MessageType.INFO)
.setTitle(name.replaceFirst(String.valueOf(name.charAt(0)), String.valueOf(name.charAt(0)).toUpperCase())) .setTitle(cmd.labels()[0])
.addField(MessageEditor.getTerm(event, "commands.general.help.field.usage", "", ""), .setDescription(b.toString())
event.getRethink().getUserPrefix(event.getAuthor().getId()) + cmd.labels()[0] + " " + event.getMessageEditor().getTerm(cmd.usage()), false)
.build()).queue(); .build()).queue();
} }
} }
@ -82,6 +89,11 @@ public class HelpCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "commands.general.help.help.label"; return "[Command name]";
}
@Override
public String example() {
return "ban";
} }
} }

View file

@ -37,6 +37,11 @@ public class InviteCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -31,6 +31,11 @@ public class PingCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -65,6 +65,11 @@ public class FeedbackCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -99,6 +99,11 @@ public class GitHubCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "username"; return "[GH-name]";
}
@Override
public String example() {
return "GregTCLTK";
} }
} }

View file

@ -82,6 +82,11 @@ public class ScreenShareCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "vc-name/id"; return "[Channel]";
}
@Override
public String example() {
return "Gaming-Lounge";
} }
} }

View file

@ -92,6 +92,11 @@ public class BanCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "user"; return "[User(s)]";
}
@Override
public String example() {
return "@Skidder";
} }
} }

View file

@ -97,6 +97,11 @@ public class ClearCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "number"; return "[Amount]";
}
@Override
public String example() {
return "69";
} }
} }

View file

@ -93,6 +93,11 @@ public class EditRulesCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -70,6 +70,11 @@ public class InviteDetectCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "<on/off>"; return "[on/off]";
}
@Override
public String example() {
return "on";
} }
} }

View file

@ -77,6 +77,11 @@ public class KickCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "user"; return "[User(s)]";
}
@Override
public String example() {
return "@Skidder";
} }
} }

View file

@ -105,6 +105,11 @@ public class NickCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "user+nickname"; return "[User(s)] [New nickname]";
}
@Override
public String example() {
return "@Skidder Cutie";
} }
} }

View file

@ -46,6 +46,11 @@ public class PrefixCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "prefix"; return "[New Prefix]";
}
@Override
public String example() {
return "!";
} }
} }

View file

@ -117,6 +117,11 @@ public class RegionChangeCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "region"; return "[New region]";
}
@Override
public String example() {
return "frankfurt";
} }
} }

View file

@ -95,6 +95,11 @@ public class RoleCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "add/remove <@role> <@user>"; return "[add/remove] [Role>] [User]";
}
@Override
public String example() {
return "add @Skidder @Epic-Gamer";
} }
} }

View file

@ -230,6 +230,11 @@ public class RulesCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -45,6 +45,11 @@ public class StarBoardCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "<Channel id or channel mention> [Needed stars]"; return "[Channel] [Needed stars]";
}
@Override
public String example() {
return "#starboard 4";
} }
} }

View file

@ -40,6 +40,11 @@ public class InfoCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -74,6 +74,11 @@ public class JoinCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -40,6 +40,11 @@ public class LeaveCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -52,6 +52,11 @@ public class PlayCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "song"; return "[Song URL/Name]";
}
@Override
public String example() {
return "Last Christmas";
} }
} }

View file

@ -44,6 +44,11 @@ public class QueueCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -36,6 +36,11 @@ public class SkipCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -39,6 +39,11 @@ public class StopCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -24,7 +24,6 @@ public class AnalCommand implements Command {
Request request = new Request.Builder().url("https://api.nekos.dev/api/v3/images/nsfw/gif/anal/").build(); Request request = new Request.Builder().url("https://api.nekos.dev/api/v3/images/nsfw/gif/anal/").build();
try { try {
Response response = caller.newCall(request).execute(); Response response = caller.newCall(request).execute();
JSONObject json = new JSONObject(response.body().string()); JSONObject json = new JSONObject(response.body().string());
JSONObject data = json.getJSONObject("data"); JSONObject data = json.getJSONObject("data");
@ -58,6 +57,11 @@ public class AnalCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -24,7 +24,6 @@ public class BDSMCommand implements Command {
Request request = new Request.Builder().url("https://api.nekos.dev/api/v3/images/nsfw/img/bdsm_lewd").build(); Request request = new Request.Builder().url("https://api.nekos.dev/api/v3/images/nsfw/img/bdsm_lewd").build();
try { try {
Response response = caller.newCall(request).execute(); Response response = caller.newCall(request).execute();
JSONObject json = new JSONObject(response.body().string()); JSONObject json = new JSONObject(response.body().string());
JSONObject data = json.getJSONObject("data"); JSONObject data = json.getJSONObject("data");
@ -58,6 +57,11 @@ public class BDSMCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -54,6 +54,11 @@ public class BlowjobCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -58,6 +58,11 @@ public class BoobsCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -58,6 +58,11 @@ public class CumCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -54,6 +54,11 @@ public class EroticCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -58,6 +58,11 @@ public class FeetCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -58,6 +58,11 @@ public class FingeringCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -58,6 +58,11 @@ public class LickingCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -58,6 +58,11 @@ public class PornCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -54,6 +54,11 @@ public class PussyCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -62,6 +62,11 @@ public class RandomPornCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -31,8 +31,8 @@ public class SoloCommand implements Command {
JSONObject response1 = data.getJSONObject("response"); JSONObject response1 = data.getJSONObject("response");
String url = response1.toString().replace("{\"url\":\"", ""); String url = response1.toString().replace("{\"url\":\"", "");
event.getTextChannel().sendMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO) event.getTextChannel().sendMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO)
.setAuthor(event.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url.replace("\"}", "")) .setAuthor(event.getMessageEditor().getTerm("commands.nsfw.gif.error.title"), url.replace("\"}", ""))
.setImage(url.replace("\"}", "")) .setImage(url.replace("\"}", ""))
.setFooter("Solo") .setFooter("Solo")
.build()).queue(); .build()).queue();
@ -58,6 +58,11 @@ event.getTextChannel().sendMessage(event.getMessageEditor().getMessage(MessageEd
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -59,6 +59,11 @@ public class SpankCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -55,6 +55,11 @@ public class TransCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -5,7 +5,6 @@ package com.bbn.hadder.commands.owner;
*/ */
import com.bbn.hadder.Hadder; import com.bbn.hadder.Hadder;
import com.bbn.hadder.audio.AudioManager;
import com.bbn.hadder.commands.Command; import com.bbn.hadder.commands.Command;
import com.bbn.hadder.commands.CommandEvent; import com.bbn.hadder.commands.CommandEvent;
import com.bbn.hadder.core.Perm; import com.bbn.hadder.core.Perm;
@ -33,19 +32,19 @@ public class EvalCommand implements Command {
ex.printStackTrace(); ex.printStackTrace();
} }
engine.put("msg", event.getMessage()); engine.put("msg".toLowerCase(), event.getMessage());
engine.put("shardmanager", Hadder.shardManager); engine.put("shardmanager".toLowerCase(), Hadder.shardManager);
engine.put("rethink", event.getRethink()); engine.put("rethink".toLowerCase(), event.getRethink());
engine.put("event", event); engine.put("event".toLowerCase(), event);
engine.put("jda", event.getJDA()); engine.put("jda".toLowerCase(), event.getJDA());
engine.put("message", event.getMessage()); engine.put("message".toLowerCase(), event.getMessage());
engine.put("guild", event.getGuild()); engine.put("guild".toLowerCase(), event.getGuild());
engine.put("channel", event.getChannel()); engine.put("channel".toLowerCase(), event.getChannel());
engine.put("author", event.getAuthor()); engine.put("author".toLowerCase(), event.getAuthor());
engine.put("member", event.getMember()); engine.put("member".toLowerCase(), event.getMember());
engine.put("self", event.getGuild().getSelfMember()); engine.put("self".toLowerCase(), event.getGuild().getSelfMember());
engine.put("audio", event.getAudioManager()); engine.put("audio".toLowerCase(), event.getAudioManager());
engine.put("out", System.out); engine.put("out".toLowerCase(), System.out);
ScheduledExecutorService service = Executors.newScheduledThreadPool(1); ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
@ -103,6 +102,11 @@ public class EvalCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "commands.owner.eval.help.usage"; return "[Code]";
}
@Override
public String example() {
return "System.out.println(\"Hey\")";
} }
} }

View file

@ -46,6 +46,11 @@ public class GuildLeaveCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "guildid"; return "[Guild-ID]";
}
@Override
public String example() {
return "366971954244354048";
} }
} }

View file

@ -29,6 +29,11 @@ public class RebootCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -33,6 +33,11 @@ public class ShutdownCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -2,6 +2,7 @@ package com.bbn.hadder.commands.owner;
import com.bbn.hadder.commands.Command; import com.bbn.hadder.commands.Command;
import com.bbn.hadder.commands.CommandEvent; import com.bbn.hadder.commands.CommandEvent;
import com.bbn.hadder.commands.general.HelpCommand;
import com.bbn.hadder.utils.MessageEditor.MessageType; import com.bbn.hadder.utils.MessageEditor.MessageType;
/* /*
@ -27,6 +28,11 @@ public class TestCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return ""; return null;
}
@Override
public String example() {
return null;
} }
} }

View file

@ -64,6 +64,11 @@ public class LanguageCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "commands.settings.language.help.usage"; return "[Language code]";
}
@Override
public String example() {
return "de";
} }
} }

View file

@ -36,6 +36,11 @@ public class UserPrefixCommand implements Command {
@Override @Override
public String usage() { public String usage() {
return "userprefix"; return "[New Prefix]";
}
@Override
public String example() {
return "!";
} }
} }

View file

@ -113,10 +113,7 @@ public class MessageEditor {
return this.handle(rethink.getLanguage(user.getId()), string, extra, extra_two); return this.handle(rethink.getLanguage(user.getId()), string, extra, extra_two);
} }
public static String getTerm(CommandEvent event, String string, String extra, String extra_two) {
return new MessageEditor(null, null)
.handle(event.getRethink().getLanguage(event.getAuthor().getId()), string, extra, extra_two);
}
private String handle(String language_code, String string, String extra, String extra_two) { private String handle(String language_code, String string, String extra, String extra_two) {
Locale locale = new Locale(language_code); Locale locale = new Locale(language_code);

View file

@ -44,7 +44,9 @@ commands.general.equals.string.first = First string\:
commands.general.equals.string.second = Second string\: commands.general.equals.string.second = Second string\:
commands.general.equals.string.result = Result\: commands.general.equals.string.result = Result\:
commands.general.equals.help.description = Checks if two strings are the same. commands.general.equals.help.description = Checks if two strings are the same.
commands.general.help.field.usage = Usage\: commands.general.help.description = **Description:**
commands.general.help.usage = **Usage\:**
commands.general.help.example = **Example:**
commands.general.help.error.description = I need the Embed Links Permission to send the Help Menu\! commands.general.help.error.description = I need the Embed Links Permission to send the Help Menu\!
commands.general.help.help.description = Shows each command and explains its usage. commands.general.help.help.description = Shows each command and explains its usage.
commands.general.help.help.label = [CommandName] commands.general.help.help.label = [CommandName]