Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.31 KB | None | 0 0
  1. package de.spark61.structurevoid.utils.command;
  2.  
  3. import de.spark61.structurevoid.DiscordBotSystem;
  4. import de.spark61.structurevoid.events.GlobalChat;
  5. import de.spark61.structurevoid.utils.SimpleEmbed;
  6. import de.spark61.structurevoid.utils.logs.ConsoleColor;
  7. import net.dv8tion.jda.api.EmbedBuilder;
  8. import net.dv8tion.jda.api.Permission;
  9. import net.dv8tion.jda.api.entities.Guild;
  10. import net.dv8tion.jda.api.entities.Member;
  11. import net.dv8tion.jda.api.entities.Message;
  12. import net.dv8tion.jda.api.entities.TextChannel;
  13. import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
  14. import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
  15. import net.dv8tion.jda.api.hooks.ListenerAdapter;
  16.  
  17. import java.awt.*;
  18. import java.sql.ResultSet;
  19. import java.sql.SQLException;
  20. import java.time.Instant;
  21. import java.time.OffsetDateTime;
  22. import java.util.HashMap;
  23. import java.util.Map;
  24. import java.util.Objects;
  25. import java.util.concurrent.TimeUnit;
  26.  
  27. public class CommandHandler extends ListenerAdapter {
  28. private Map<String, Command> commands;
  29.  
  30. public CommandHandler() {
  31. this.commands = new HashMap<>();
  32. }
  33.  
  34. public boolean existsCommand(String command) {
  35. return commands.containsKey(command.toLowerCase());
  36. }
  37.  
  38. public void registerCommand(String name, Command command) {
  39. commands.put(name.toLowerCase(), command);
  40. }
  41.  
  42. public String getPrefix(Guild guild) {
  43. return createRowIfNotExists(guild);
  44. }
  45.  
  46. private String createRowIfNotExists(Guild guild) {
  47. ResultSet resultSet = DiscordBotSystem.getMySQL().query("SELECT * FROM `guilds` WHERE `botid`='" + guild.getJDA().getSelfUser().getId() + "'&&`guildid`='" + guild.getId() + "'");
  48.  
  49. try {
  50. if (resultSet.next()) {
  51. return resultSet.getString("prefix");
  52. }
  53. resultSet.close();
  54. DiscordBotSystem.getMySQL().update("INSERT INTO `guilds` (`botid`, `guildid`, `prefix`, `language`, `isBetaGuild`, `isPremiumGuild`) VALUES ('" + guild.getJDA().getSelfUser().getId() + "', '" + guild.getId() + "', '!', 'German', '0', '0')");
  55. } catch (SQLException e) {
  56. e.printStackTrace();
  57. }
  58.  
  59. return "!";
  60. }
  61.  
  62. public void setPrefix(String prefix, Guild guild) {
  63. createRowIfNotExists(guild);
  64. DiscordBotSystem.getMySQL().update("UPDATE `guilds` SET `prefix`='" + prefix + "' WHERE `botid`='" + guild.getJDA().getSelfUser().getId() + "'&&`guildid`='" + guild.getId() + "'");
  65. System.out.println("changed " + guild.getName() + " prefix to " + prefix);
  66. }
  67.  
  68. @Override
  69. public void onMessageReceived(MessageReceivedEvent event) {
  70. if(!event.getChannelType().isGuild()) return;
  71.  
  72. executeCommand(event.getMessage(), event.getMember(), event.getTextChannel());
  73. }
  74.  
  75. @Override
  76. public void onMessageUpdate(MessageUpdateEvent event) {
  77. if(!event.getChannelType().isGuild()) return;
  78.  
  79. executeCommand(event.getMessage(), Objects.requireNonNull(event.getMember()), event.getTextChannel());
  80. }
  81.  
  82. private void executeCommand(Message message, Member member, TextChannel textChannel){
  83. if(member.getUser().isBot()) return;
  84.  
  85. if(GlobalChat.isGlobalTextChannel(textChannel)) return;
  86.  
  87. Member selfUser = member.getGuild().getMemberById(member.getJDA().getSelfUser().getId());
  88.  
  89. assert selfUser != null;
  90.  
  91. String messageString = message.getContentRaw();
  92. String prefix = getPrefix(member.getGuild());
  93.  
  94. if (messageString.startsWith(prefix)) {
  95. messageString = messageString.substring(prefix.length());
  96. String command = messageString.split(" ")[0].toLowerCase();
  97.  
  98. if (commands.containsKey(command.toLowerCase())) {
  99. if(selfUser.hasPermission(Permission.MESSAGE_MANAGE)) message.delete().queue();
  100. if (!isDeactivated(member.getGuild().getId(), member.getJDA().getSelfUser().getId(), command)) {
  101. if (!canExecuteCommand(command, member, textChannel)) return;
  102.  
  103. if(!selfUser.hasPermission(Permission.ADMINISTRATOR)){
  104. if(selfUser.hasPermission(Permission.MESSAGE_WRITE)){
  105. DiscordBotSystem.getLanguageSystem().getMessages(member, "error", "needAdministratorPermission").queue(message1 ->
  106. new SimpleEmbed()
  107. .setColor(Color.RED)
  108. .setCurrentTimeStamp()
  109. .setTitle(message1.getTranslation("error"))
  110. .setDescription(message1.getTranslation("needAdministratorPermission"))
  111. .setFooter(message.getAuthor())
  112. .send(textChannel, 15, TimeUnit.SECONDS));
  113. }
  114. return;
  115. }
  116.  
  117. OffsetDateTime time = message.getTimeCreated().plusHours(1);
  118. System.out.println(ConsoleColor.GREEN + "[" + time.getHour() + ":" + time.getMinute() + " " + time.getDayOfMonth() + "." + time.getMonth().getValue() + "." + time.getYear() + "] " + message.getAuthor().getAsTag() + " execute " + message.getContentRaw());
  119.  
  120. String args = "";
  121. if (command.length() + 1 < messageString.length()) {
  122. args = messageString.substring(command.length() + 1);
  123. }
  124. commands.get(command).execute(new CommandEvent(message, args, prefix));
  125. } else {
  126. DiscordBotSystem.getLanguageSystem().getMessages(member, "disabled", "disabledCommand").queue(message1 ->
  127. new SimpleEmbed()
  128. .setColor(Color.RED)
  129. .setCurrentTimeStamp()
  130. .setTitle(message1.getTranslation("disabled"))
  131. .setDescription(message1.getTranslation("disabledCommand"))
  132. .setFooter(message.getAuthor())
  133. .send(textChannel, 15, TimeUnit.SECONDS));
  134. }
  135. }
  136. }
  137. }
  138.  
  139. private boolean canExecuteCommand(String command, Member member, TextChannel channel) {
  140. ResultSet resultSet = DiscordBotSystem.getMySQL().query("SELECT * FROM `commands` WHERE `name`='" + command + "'");
  141.  
  142. try {
  143. if (resultSet.next()) {
  144. if (resultSet.getBoolean("isBeta")) {
  145. if (isBetaGuild(member.getGuild())) return true;
  146.  
  147. DiscordBotSystem.getLanguageSystem().getMessages(member, "error", "betaCommandError").queue(languageMessages -> {
  148. channel.sendMessage(new EmbedBuilder()
  149. .setTimestamp(Instant.now())
  150. .setFooter(member.getUser().getAsTag(), member.getUser().getAvatarUrl())
  151. .setColor(Color.RED)
  152. .setTitle(languageMessages.getTranslation("error"))
  153. .setDescription(languageMessages.getTranslation("betaCommandError"))
  154. .build()).queue(message1 -> message1.delete().queueAfter(15, TimeUnit.SECONDS));
  155. });
  156.  
  157. return false;
  158. } else if (resultSet.getBoolean("isPremium")) {
  159. if (isPremiumGuild(member.getGuild())) return true;
  160. DiscordBotSystem.getLanguageSystem().getMessages(member, "error", "premiumCommandError").queue(languageMessages -> {
  161. channel.sendMessage(new EmbedBuilder()
  162. .setTimestamp(Instant.now())
  163. .setFooter(member.getUser().getAsTag(), member.getUser().getAvatarUrl())
  164. .setColor(Color.RED)
  165. .setTitle(languageMessages.getTranslation("error"))
  166. .setDescription(languageMessages.getTranslation("premiumCommandError"))
  167. .build()).queue(message1 -> message1.delete().queueAfter(15, TimeUnit.SECONDS));
  168. });
  169. return false;
  170. }
  171. }
  172. resultSet.next();
  173. } catch (SQLException e) {
  174. e.printStackTrace();
  175. }
  176.  
  177.  
  178. return true;
  179. }
  180.  
  181. private boolean isBetaGuild(Guild guild) {
  182. ResultSet resultSet = DiscordBotSystem.getMySQL().query("SELECT * FROM `guilds` WHERE `botid`='" + guild.getJDA().getSelfUser().getId() + "'&&`guildid`='" + guild.getId() + "'");
  183.  
  184. try {
  185. boolean returned = false;
  186. if (resultSet.next()) {
  187. returned = resultSet.getBoolean("isBetaGuild");
  188. }
  189. resultSet.close();
  190. return returned;
  191. } catch (SQLException e) {
  192. e.printStackTrace();
  193. }
  194. return false;
  195. }
  196.  
  197. private boolean isPremiumGuild(Guild guild) {
  198. ResultSet resultSet = DiscordBotSystem.getMySQL().query("SELECT * FROM `guilds` WHERE `botid`='" + guild.getJDA().getSelfUser().getId() + "'&&`guildid`='" + guild.getId() + "'");
  199.  
  200. try {
  201. boolean returned = false;
  202. if (resultSet.next()) {
  203. returned = resultSet.getBoolean("isPremiumGuild");
  204. }
  205. resultSet.close();
  206. return returned;
  207. } catch (SQLException e) {
  208. e.printStackTrace();
  209. }
  210. return false;
  211. }
  212.  
  213. private boolean isDeactivated(String guildId, String botId, String command) {
  214. ResultSet resultSet = DiscordBotSystem.getMySQL().query("SELECT * FROM `botv3`.`guildcommands` WHERE guildcommands.`botid`='" + botId + "'&&`guildcommands`.`guildid`='" + guildId + "'&&guildcommands.`isDeactivated`='1'&&guildcommands.`command`='" + command + "'");
  215. try {
  216. if (resultSet.next()) {
  217. return resultSet.getBoolean("isDeactivated");
  218. }
  219. resultSet.close();
  220. } catch (SQLException e) {
  221. e.printStackTrace();
  222. }
  223. return false;
  224. }
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement