diff --git a/.gitignore b/.gitignore index a1c2a23..1171e99 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,81 @@ +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + # Compiled class file *.class @@ -21,3 +99,9 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* +replay_pid* + +build/* + +.gradle/* +.idea/* \ No newline at end of file diff --git a/src/main/java/com/softawii/capivara/Main.java b/src/main/java/com/softawii/capivara/Main.java index 36fe473..058ba14 100644 --- a/src/main/java/com/softawii/capivara/Main.java +++ b/src/main/java/com/softawii/capivara/Main.java @@ -1,9 +1,9 @@ package com.softawii.capivara; -import com.softawii.capivara.core.*; -import com.softawii.capivara.listeners.CategoryGroup.TemplateGroup; +import com.softawii.capivara.core.DroneManager; +import com.softawii.capivara.core.EmbedManager; +import com.softawii.capivara.core.VoiceManager; import com.softawii.capivara.listeners.EchoGroup; -import com.softawii.capivara.listeners.PackageGroup; import com.softawii.capivara.listeners.VoiceGroup.Dynamic; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Activity; @@ -28,10 +28,7 @@ public static void main(String[] args) { LOGGER.info(buildProperties.getVersion() + " Bot is ready as " + jda.getSelfUser().getName()); // Beans - PackageGroup.packageManager = context.getBean(PackageManager.class); EchoGroup.embedManager = context.getBean(EmbedManager.class); - PackageGroup.embedManager = EchoGroup.embedManager; - TemplateGroup.templateManager = context.getBean(TemplateManager.class); Dynamic.voiceManager = context.getBean(VoiceManager.class); Dynamic.droneManager = context.getBean(DroneManager.class); } diff --git a/src/main/java/com/softawii/capivara/config/SpringConfig.java b/src/main/java/com/softawii/capivara/config/SpringConfig.java index e9cee54..71092fc 100644 --- a/src/main/java/com/softawii/capivara/config/SpringConfig.java +++ b/src/main/java/com/softawii/capivara/config/SpringConfig.java @@ -1,7 +1,5 @@ package com.softawii.capivara.config; -import com.softawii.capivara.listeners.CategoryGroup.TemplateGroup; -import com.softawii.capivara.listeners.PackageGroup; import com.softawii.capivara.listeners.events.VoiceEvents; import com.softawii.capivara.utils.CapivaraExceptionHandler; import com.softawii.curupira.core.Curupira; @@ -72,8 +70,6 @@ public JDA jda(VoiceEvents voiceEvents) { builder.setMemberCachePolicy(MemberCachePolicy.ALL); builder.enableCache(CacheFlag.EMOJI, CacheFlag.ROLE_TAGS, CacheFlag.MEMBER_OVERRIDES, CacheFlag.STICKER); builder.addEventListeners( - new PackageGroup.AutoCompleter(), - new TemplateGroup.AutoCompleter(), voiceEvents ); jda = builder.build(); diff --git a/src/main/java/com/softawii/capivara/core/PackageManager.java b/src/main/java/com/softawii/capivara/core/PackageManager.java deleted file mode 100644 index fba1d58..0000000 --- a/src/main/java/com/softawii/capivara/core/PackageManager.java +++ /dev/null @@ -1,280 +0,0 @@ -package com.softawii.capivara.core; - -import com.softawii.capivara.entity.Package; -import com.softawii.capivara.exceptions.*; -import com.softawii.capivara.services.PackageService; -import com.softawii.capivara.services.RoleService; -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.ISnowflake; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.entities.Role; -import net.dv8tion.jda.api.entities.emoji.Emoji; -import net.dv8tion.jda.api.entities.emoji.RichCustomEmoji; -import net.dv8tion.jda.api.interactions.commands.Command; -import net.dv8tion.jda.api.interactions.components.selections.SelectMenu; -import net.dv8tion.jda.api.interactions.components.selections.SelectOption; -import org.springframework.stereotype.Component; - -import java.awt.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; - -@Component -public class PackageManager { - - private PackageService packageService; - private RoleService roleService; - - public PackageManager(PackageService packageService, RoleService roleService) { - this.packageService = packageService; - this.roleService = roleService; - } - - public void create(Long guildId, String packageName, boolean unique, String description, String emojiId, boolean emojiUnicode) throws PackageAlreadyExistsException { - Package pkg = new Package(guildId, packageName, unique, description, emojiId, emojiUnicode); - this.packageService.create(pkg); - } - - public void update(Long guildId, String packageName, Boolean unique, String description, String emojiId, boolean emojiUnicode) throws PackageDoesNotExistException { - Package pkg = this.packageService.findByPackageId(new Package.PackageKey(guildId, packageName)); - - if (unique != null) pkg.setSingleChoice(unique); - if (description != null) pkg.setDescription(description); - if (emojiId != null) { - pkg.setEmojiId(emojiId); - pkg.setEmojiUnicode(emojiUnicode); - } - - this.packageService.update(pkg); - } - - public void destroy(Long guildId, String packageName) throws PackageDoesNotExistException { - this.packageService.destroy(guildId, packageName); - } - - public void addRole(Long guildId, String packageName, Role role, String name, String description, String emojiId, boolean emojiUnicode) throws PackageDoesNotExistException, RoleAlreadyAddedException, KeyAlreadyInPackageException { - Package.PackageKey key = new Package.PackageKey(guildId, packageName); - com.softawii.capivara.entity.Role.RoleKey roleKey = new com.softawii.capivara.entity.Role.RoleKey(key, name); - if (roleService.exists(roleKey)) throw new RoleAlreadyAddedException(); - - com.softawii.capivara.entity.Role roleEntity = roleService.create(new com.softawii.capivara.entity.Role(roleKey, description, role.getIdLong(), emojiId, emojiUnicode)); - Package pkg = this.packageService.findByPackageId(key); - pkg.addRole(roleEntity); - - this.packageService.update(pkg); - } - - public void editRole(Long guildId, String packageName, String name, Role role, String description, String emojiId, boolean emojiUnicode) throws PackageDoesNotExistException, RoleDoesNotExistException, RoleAlreadyAddedException { - Package.PackageKey key = new Package.PackageKey(guildId, packageName); - com.softawii.capivara.entity.Role.RoleKey roleKey = new com.softawii.capivara.entity.Role.RoleKey(key, name); - if (!roleService.exists(roleKey)) throw new RoleDoesNotExistException(); - - com.softawii.capivara.entity.Role roleEntity = roleService.findById(roleKey); - - if (emojiId != null) { - roleEntity.setEmojiId(emojiId); - roleEntity.setEmojiUnicode(emojiUnicode); - } - if (description != null) roleEntity.setDescription(description); - - if (role != null) { - Package pkg = this.packageService.findByPackageId(key); - - if (pkg.contains(role.getIdLong())) throw new RoleAlreadyAddedException(); - - roleEntity.setRoleId(role.getIdLong()); - } - - roleService.update(roleEntity); - } - - public void removeRole(Long guildId, String packageName, String roleName) throws RoleDoesNotExistException, PackageDoesNotExistException, RoleNotFoundException { - // roleService.remove(new Package.PackageKey(guildId, packageName), roleName); - Package.PackageKey key = new Package.PackageKey(guildId, packageName); - com.softawii.capivara.entity.Role.RoleKey roleKey = new com.softawii.capivara.entity.Role.RoleKey(key, roleName); - - if (!roleService.exists(roleKey)) throw new RoleDoesNotExistException(); - - Package pkg = this.packageService.findByPackageId(key); - pkg.removeRole(roleKey); - - this.packageService.update(pkg); - - if (roleService.exists(roleKey)) { - roleService.remove(roleKey.getPackageKey(), roleKey.getName()); - } - } - - public MessageEmbed getGuildPackages(Long guildId, List roles, boolean showError) { - List packages = packageService.findAllByGuildId(guildId); - AtomicBoolean failed = new AtomicBoolean(false); - StringBuilder failBuilder = new StringBuilder(); - - EmbedBuilder builder = new EmbedBuilder(); - builder.setTitle("Packages"); - builder.setDescription("List of packages in this guild"); - builder.setColor(Color.GREEN); - - packages.forEach(pkg -> { - StringBuilder sb = new StringBuilder(); - - Package.PackageKey key = pkg.getPackageKey(); - String name = key.getName(); - String description = pkg.getDescription(); - - if (!description.isBlank()) sb.append("*").append(description).append("*\n\n"); - - pkg.getRoles().forEach(role -> { - Long roleId = role.getRoleId(); - - Optional optional = roles.stream().filter(r -> roleId == r.getIdLong()).findFirst(); - - if (optional.isEmpty()) { - failed.set(true); - failBuilder.append("Role '").append(role.getRoleKey().getName()) - .append("' from package '").append(name) - .append("' with RoleId '").append(role.getRoleId()).append("' not found in this guild\n"); - } - - if (optional.isPresent()) { - Role roleJda = optional.get(); - String line = "**" + role.getRoleKey().getName() + "**" + ": " + roleJda.getAsMention() + "\n"; - - if (!role.getDescription().isBlank()) { - line += "*" + role.getDescription() + "*\n\n"; - } - - sb.append(line); - } - }); - - builder.addField(name, sb.toString(), false); - }); - - - if (failed.get() && showError) { - builder.addField("Failed to find roles", failBuilder.toString(), false); - } - - return builder.build(); - } - - public SelectMenu getGuildPackagesMenu(Long guildId, List packages_ids, String customId, List emotes) { - List packages = packageService.findAllByGuildId(guildId); - - // Filtering by packages_ids - if (packages_ids != null && !packages_ids.isEmpty()) { - packages = packages.stream().filter(pkg -> packages_ids.contains(pkg.getPackageKey().getName())).collect(Collectors.toList()); - } - - SelectMenu.Builder builder = SelectMenu.create(customId); - - // Select Just one Package - builder.setRequiredRange(1, 1); - // TODO: Customize the message - builder.setPlaceholder("Select a package"); - - for (Package pkg : packages) { - SelectOption option = SelectOption.of(pkg.getPackageKey().getName(), pkg.getPackageKey().getName()); - option = option.withDescription(pkg.getDescription()); - - if (!pkg.getEmojiId().isBlank()) { - if (pkg.isEmojiUnicode()) option = option.withEmoji(Emoji.fromUnicode(pkg.getEmojiId())); - else { - RichCustomEmoji emote = emotes.stream().filter( - emote1 -> emote1.getAsMention().equals(pkg.getEmojiId()) - ).findFirst().orElse(null); - if (emote != null) option = option.withEmoji(Emoji.fromCustom(emote)); - } - } - - builder.addOptions(option); - } - - return builder.build(); - } - - public SelectMenu getGuildPackageRoleMenu(Long guildId, String packageName, String customId, Member member, List guildRoles, List emotes) throws PackageDoesNotExistException { - Package pkg = packageService.findByPackageId(new Package.PackageKey(guildId, packageName)); - SelectMenu.Builder builder = SelectMenu.create(customId); - - // Select Just one Package - if (pkg.isSingleChoice()) builder.setRequiredRange(0, 1); - else builder.setRequiredRange(0, 25); - - builder.setPlaceholder("Select a role"); - - // Getting user roles and checking if the role is in the package (comparing ids) - List roleIds = member.getRoles().stream().map(ISnowflake::getIdLong).collect(Collectors.toList()); - - pkg.getRoles().forEach(role -> { - // If the roleId isn't in the guild role ids, it means the role is not in the guild - if (guildRoles.contains(role.getRoleId())) { - - SelectOption option = SelectOption.of(role.getRoleKey().getName(), role.getRoleId().toString()); - option = option.withDescription(role.getDescription()); - - // This role has an emote???? - if (!role.getEmojiId().isBlank()) { - if (role.isEmojiUnicode()) { - option = option.withEmoji(Emoji.fromUnicode(role.getEmojiId())); - } else { - RichCustomEmoji emote = emotes.stream().filter( - emote1 -> emote1.getAsMention().equals(role.getEmojiId()) - ).findFirst().orElse(null); - - if (emote != null) option = option.withEmoji(Emoji.fromCustom(emote)); - } - - } - - if (roleIds.contains(role.getRoleId())) option = option.withDefault(true); - builder.addOptions(option); - } - }); - - return builder.build(); - } - - public boolean checkIfAllPackagesExist(Long guildId, List packageNames) { - return packageNames.stream().allMatch(packageName -> this.checkIfPackageExists(guildId, packageName)); - } - - public boolean checkIfPackageExists(Long guildId, String packageName) { - try { - return packageService.findByPackageId(new Package.PackageKey(guildId, packageName)) != null; - } catch (PackageDoesNotExistException e) { - return false; - } - } - - public List autoCompletePackageName(Long guildId, String packageName) { - List pkgNames = packageService.findAllByGuildId(guildId).stream().map(pkg -> pkg.getPackageKey().getName()).toList(); - - List choices = pkgNames - .stream() - .filter(c -> c.startsWith(packageName)) - .map(c -> new Command.Choice(c, c)) - .toList(); - - return choices; - } - - public List autoCompleteRolePackageName(Long guildId, String packageName, String roleName) { - List packages = packageService.findAllByGuildId(guildId); - - Package target = packages.stream().filter(pkg -> pkg.getPackageKey().getName().equals(packageName)).findFirst().orElse(null); - - if (target == null) return new ArrayList<>(); - - return target.getRoles() - .stream() - .filter(role -> role.getRoleKey().getName().startsWith(roleName)) - .map(role -> new Command.Choice(role.getRoleKey().getName(), role.getRoleKey().getName())) - .toList(); - } -} diff --git a/src/main/java/com/softawii/capivara/core/TemplateManager.java b/src/main/java/com/softawii/capivara/core/TemplateManager.java deleted file mode 100644 index d7dbb16..0000000 --- a/src/main/java/com/softawii/capivara/core/TemplateManager.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.softawii.capivara.core; - -import com.softawii.capivara.entity.Template; -import com.softawii.capivara.entity.Template.TemplateKey; -import com.softawii.capivara.exceptions.TemplateAlreadyExistsException; -import com.softawii.capivara.exceptions.TemplateDoesNotExistException; -import com.softawii.capivara.services.TemplateService; -import net.dv8tion.jda.api.interactions.commands.Command; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -public class TemplateManager { - - private final TemplateService templateService; - - public TemplateManager(TemplateService templateService) { - this.templateService = templateService; - } - - public Template create(Long guildId, String name, String json) throws TemplateAlreadyExistsException { - return templateService.create(new Template(new TemplateKey(guildId, name), json)); - } - - public Template update(Long guildId, String name, String json) throws TemplateDoesNotExistException { - Template template = templateService.findById(new TemplateKey(guildId, name)); - template.setJson(json); - return templateService.update(template); - } - - public void destroy(Long guildId, String name) throws TemplateDoesNotExistException { - templateService.destroy(guildId, name); - } - - public List