Compare commits
84 Commits
93f232805e
...
master
Author | SHA1 | Date | |
---|---|---|---|
7f935da4b4 | |||
f3aad3925a | |||
ae741e1f13 | |||
b78ef6e96c | |||
d3661127cf | |||
fc1216be25 | |||
38089bdcd5 | |||
c424694068 | |||
b3a6284e40 | |||
5f099a97f0 | |||
577c895169 | |||
6db2a01bb3 | |||
4cc4334df4 | |||
a4acdc2ec1 | |||
7ca984e785 | |||
53730a82cf | |||
6f4a787ccb | |||
2b588a5940 | |||
fe4cf3bbf4 | |||
ede931f994 | |||
d5ed2b0b13 | |||
4479bce0a4 | |||
3c80b3ca4b | |||
65fd68f76c | |||
6640dd4368 | |||
96cb634fd4 | |||
0f9a23e4a2 | |||
eb3d8eea29 | |||
7e45b5d880 | |||
892b85ccb4 | |||
f291344c45 | |||
df9b0e2604 | |||
2695a2994a | |||
fa50eb9873 | |||
58bb976f96 | |||
3615ef4b92 | |||
5c78ec907f | |||
c380878039 | |||
cfaa501377 | |||
6f12062311 | |||
3edfab3adb | |||
25d4b247b3 | |||
393c7741ca | |||
001836c88b | |||
be7e03d641 | |||
db357a63f5 | |||
e50fe57ee6 | |||
2c017d0603 | |||
f32d278a6c | |||
b8ebc1de24 | |||
2b2e10d994 | |||
8526036044 | |||
f5c31195da | |||
d6175b3f92 | |||
96e7518f72 | |||
f1bc2b2aaa | |||
4ec65c8d6e | |||
38465f544d | |||
a3f4e2b918 | |||
bc57834366 | |||
87a56700ec | |||
6d98977198 | |||
1256d2ddf9 | |||
7cf970df77 | |||
52557b5c65 | |||
898a39e99c | |||
7a66ed4d87 | |||
5cc504d4ed | |||
29b44edc6b | |||
2a7e2acc88 | |||
0d92a49d95 | |||
2d8779d8e0 | |||
765805fa7a | |||
1d36479a82 | |||
9d6f3b9fef | |||
9be60fee4c | |||
cb82716a17 | |||
80439a3329 | |||
627062ef23 | |||
25dd6cb0dc | |||
217b284f14 | |||
843bb34fb4 | |||
8a01359f6e | |||
8f85ce91da |
2
.mvn/wrapper/maven-wrapper.properties
vendored
2
.mvn/wrapper/maven-wrapper.properties
vendored
@ -16,4 +16,4 @@
|
||||
# under the License.
|
||||
wrapperVersion=3.3.2
|
||||
distributionType=only-script
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Stage 1: Build the application
|
||||
FROM maven:3.9.6-eclipse-temurin-17-alpine AS builder
|
||||
FROM maven:3.9.9-eclipse-temurin-17-alpine AS builder
|
||||
|
||||
# Set the working directory
|
||||
WORKDIR /home/container
|
||||
@ -11,7 +11,7 @@ COPY . .
|
||||
RUN mvn package -q -Dmaven.test.skip -DskipTests -T2C
|
||||
|
||||
# Stage 2: Create the final lightweight image
|
||||
FROM eclipse-temurin:17.0.11_9-jre-focal
|
||||
FROM eclipse-temurin:17.0.13_11-jre-focal
|
||||
|
||||
# Set the working directory
|
||||
WORKDIR /home/container
|
||||
|
54
pom.xml
54
pom.xml
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>3.3.1</version>
|
||||
<version>3.4.1</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.5.3</version>
|
||||
<version>3.6.0</version>
|
||||
<configuration>
|
||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||
</configuration>
|
||||
@ -75,11 +75,6 @@
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>fascinated-repo-public</id>
|
||||
<name>Fascinated's Repository</name>
|
||||
<url>https://repo.fascinated.cc/public</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
@ -99,26 +94,7 @@
|
||||
<dependency>
|
||||
<groupId>io.sentry</groupId>
|
||||
<artifactId>sentry-spring-boot-starter-jakarta</artifactId>
|
||||
<version>7.10.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.mongock</groupId>
|
||||
<artifactId>mongock-bom</artifactId>
|
||||
<version>5.2.4</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.mongock</groupId>
|
||||
<artifactId>mongock-springboot-v3</artifactId>
|
||||
<version>5.4.4</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.mongock</groupId>
|
||||
<artifactId>mongodb-springdata-v4-driver</artifactId>
|
||||
<version>5.4.4</version>
|
||||
<scope>compile</scope>
|
||||
<version>7.16.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Redis for caching -->
|
||||
@ -142,7 +118,7 @@
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.32</version>
|
||||
<version>1.18.34</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@ -154,31 +130,19 @@
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.10.1</version>
|
||||
<version>2.11.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents.client5</groupId>
|
||||
<artifactId>httpclient5</artifactId>
|
||||
<version>5.3.1</version>
|
||||
<version>5.4.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.jodah</groupId>
|
||||
<artifactId>expiringmap</artifactId>
|
||||
<version>0.5.11</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>se.michaelthelin.spotify</groupId>
|
||||
<artifactId>spotify-web-api-java</artifactId>
|
||||
<version>8.4.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>uk.co.conoregan</groupId>
|
||||
<artifactId>themoviedbapi</artifactId>
|
||||
<version>2.1.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@ -187,9 +151,9 @@
|
||||
<version>1.12.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xyz.mcutils</groupId>
|
||||
<artifactId>mcutils-java-library</artifactId>
|
||||
<version>1.2.4</version>
|
||||
<groupId>com.github.Steppschuh</groupId>
|
||||
<artifactId>Java-Markdown-Generator</artifactId>
|
||||
<version>1.3.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -1,6 +1,3 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"local>Fascinated/renovate-config"
|
||||
]
|
||||
"extends": ["config:recommended", ":dependencyDashboard"]
|
||||
}
|
@ -5,7 +5,6 @@ import cc.fascinated.bat.event.EventListener;
|
||||
import cc.fascinated.bat.service.EventService;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import io.mongock.runner.springboot.EnableMongock;
|
||||
import lombok.NonNull;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
@ -21,7 +20,6 @@ import java.util.Objects;
|
||||
|
||||
@EnableScheduling
|
||||
@SpringBootApplication
|
||||
@EnableMongock
|
||||
@Log4j2(topic = "Bat")
|
||||
public class BatApplication {
|
||||
public static Gson GSON = new GsonBuilder().create();
|
||||
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.afk;
|
||||
package cc.fascinated.bat.afk;
|
||||
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.features.afk.command.AfkCommand;
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.afk.command.AfkCommand;
|
||||
import cc.fascinated.bat.service.CommandService;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,9 +1,9 @@
|
||||
package cc.fascinated.bat.features.afk;
|
||||
package cc.fascinated.bat.afk;
|
||||
|
||||
import cc.fascinated.bat.event.EventListener;
|
||||
import cc.fascinated.bat.features.afk.profile.AfkProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.afk.profile.AfkProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
@ -1,9 +1,9 @@
|
||||
package cc.fascinated.bat.features.afk;
|
||||
package cc.fascinated.bat.afk;
|
||||
|
||||
import cc.fascinated.bat.event.EventListener;
|
||||
import cc.fascinated.bat.features.afk.profile.AfkProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.afk.profile.AfkProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import org.springframework.stereotype.Component;
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.afk.command;
|
||||
package cc.fascinated.bat.afk.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.MemberUtils;
|
||||
import cc.fascinated.bat.features.afk.profile.AfkProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.afk.profile.AfkProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -29,14 +30,16 @@ public class AfkCommand extends BatCommand {
|
||||
/**
|
||||
* Fired when this command is executed.
|
||||
*
|
||||
* @param guild the guild the command was executed in, if any
|
||||
* @param user the user who executed the command
|
||||
* @param channel the channel the command was executed in
|
||||
* @param member the member who executed the command, null if not a guild
|
||||
* @param event the event that invoked this command
|
||||
* @param guild the guild the command was executed in, if any
|
||||
* @param user the user who executed the command
|
||||
* @param channel the channel the command was executed in
|
||||
* @param member the member who executed the command, null if not a guild
|
||||
* @param commandMessage
|
||||
* @param arguments
|
||||
* @param event the event that invoked this command
|
||||
*/
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
AfkProfile profile = guild.getProfile(AfkProfile.class);
|
||||
String reason = null;
|
||||
OptionMapping reasonOption = event.getOption("reason");
|
@ -1,7 +1,7 @@
|
||||
package cc.fascinated.bat.features.afk.profile;
|
||||
package cc.fascinated.bat.afk.profile;
|
||||
|
||||
import cc.fascinated.bat.common.Serializable;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import com.google.gson.Gson;
|
||||
import lombok.NoArgsConstructor;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.autorole;
|
||||
package cc.fascinated.bat.autorole;
|
||||
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.features.autorole.command.AutoRoleCommand;
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.autorole.command.AutoRoleCommand;
|
||||
import cc.fascinated.bat.service.CommandService;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
@ -1,9 +1,9 @@
|
||||
package cc.fascinated.bat.features.autorole;
|
||||
package cc.fascinated.bat.autorole;
|
||||
|
||||
import cc.fascinated.bat.event.EventListener;
|
||||
import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.FeatureService;
|
||||
import lombok.NonNull;
|
||||
import lombok.extern.log4j.Log4j2;
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.autorole.command;
|
||||
package cc.fascinated.bat.autorole.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.RoleUtils;
|
||||
import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
@ -30,7 +31,7 @@ public class AddSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
AutoRoleProfile profile = guild.getProfile(AutoRoleProfile.class);
|
||||
// Check if the guild has reached the maximum auto roles count
|
||||
int maxRoleSlots = AutoRoleProfile.getMaxRoleSlots(guild);
|
||||
@ -43,12 +44,7 @@ public class AddSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
OptionMapping option = event.getOption("role");
|
||||
if (option == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("Please provide a role to add")
|
||||
.build()).queue();
|
||||
return;
|
||||
}
|
||||
assert option != null;
|
||||
Role role = option.getAsRole();
|
||||
|
||||
// Check if the role is already in the auto roles list
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.autorole.command;
|
||||
package cc.fascinated.bat.autorole.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.autorole.command;
|
||||
package cc.fascinated.bat.autorole.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -19,7 +20,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "clear", description = "Clears all auto roles")
|
||||
public class ClearSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
AutoRoleProfile profile = guild.getProfile(AutoRoleProfile.class);
|
||||
|
||||
profile.reset();
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.autorole.command;
|
||||
package cc.fascinated.bat.autorole.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "list", description = "Lists all auto roles")
|
||||
public class ListSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
AutoRoleProfile profile = guild.getProfile(AutoRoleProfile.class);
|
||||
if (profile.getRoles().isEmpty()) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.autorole.command;
|
||||
package cc.fascinated.bat.autorole.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
@ -29,15 +30,10 @@ public class RemoveSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
AutoRoleProfile profile = guild.getProfile(AutoRoleProfile.class);
|
||||
OptionMapping option = event.getOption("role");
|
||||
if (option == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("Please provide a role to remove")
|
||||
.build()).queue();
|
||||
return;
|
||||
}
|
||||
assert option != null;
|
||||
|
||||
Role role = option.getAsRole();
|
||||
if (!profile.hasRole(role.getId())) {
|
@ -1,16 +1,17 @@
|
||||
package cc.fascinated.bat.features.autorole.command;
|
||||
package cc.fascinated.bat.autorole.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedDescriptionBuilder;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.autorole.profile.AutoRoleProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
@ -29,7 +30,7 @@ import java.util.Map;
|
||||
@CommandInfo(name = "sync", description = "Gives everyone their missing auto roles")
|
||||
public class SyncSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
AutoRoleProfile profile = guild.getProfile(AutoRoleProfile.class);
|
||||
if (profile.getRoles().isEmpty()) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
@ -90,7 +91,7 @@ public class SyncSubCommand extends BatCommand {
|
||||
|
||||
// We're finished giving all the roles
|
||||
if (finished == members.size()) {
|
||||
EmbedDescriptionBuilder description = new EmbedDescriptionBuilder(
|
||||
DescriptionBuilder description = new DescriptionBuilder(
|
||||
"Successfully gave auto roles to `%s` member%s".formatted(
|
||||
members.size(),
|
||||
members.size() == 1 ? "" : "s"
|
@ -1,7 +1,7 @@
|
||||
package cc.fascinated.bat.features.autorole.profile;
|
||||
package cc.fascinated.bat.autorole.profile;
|
||||
|
||||
import cc.fascinated.bat.common.Serializable;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.service.DiscordService;
|
||||
import com.google.gson.Gson;
|
||||
import lombok.Getter;
|
@ -1,18 +1,19 @@
|
||||
package cc.fascinated.bat.features.base;
|
||||
package cc.fascinated.bat.base;
|
||||
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.features.base.commands.botadmin.BotAdminCommand;
|
||||
import cc.fascinated.bat.features.base.commands.fun.EightBallCommand;
|
||||
import cc.fascinated.bat.features.base.commands.fun.PPSizeCommand;
|
||||
import cc.fascinated.bat.features.base.commands.fun.image.ImageCommand;
|
||||
import cc.fascinated.bat.features.base.commands.general.*;
|
||||
import cc.fascinated.bat.features.base.commands.general.avatar.AvatarCommand;
|
||||
import cc.fascinated.bat.features.base.commands.general.banner.BannerCommand;
|
||||
import cc.fascinated.bat.features.base.commands.server.MemberCountCommand;
|
||||
import cc.fascinated.bat.features.base.commands.server.PremiumCommand;
|
||||
import cc.fascinated.bat.features.base.commands.server.channel.ChannelCommand;
|
||||
import cc.fascinated.bat.features.base.commands.server.feature.FeatureCommand;
|
||||
import cc.fascinated.bat.base.commands.fun.*;
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.base.commands.botadmin.BotAdminCommand;
|
||||
import cc.fascinated.bat.base.commands.fun.image.ImageCommand;
|
||||
import cc.fascinated.bat.base.commands.general.*;
|
||||
import cc.fascinated.bat.base.commands.general.avatar.AvatarCommand;
|
||||
import cc.fascinated.bat.base.commands.general.banner.BannerCommand;
|
||||
import cc.fascinated.bat.base.commands.server.MemberCountCommand;
|
||||
import cc.fascinated.bat.base.commands.server.PremiumCommand;
|
||||
import cc.fascinated.bat.base.commands.server.channel.ChannelCommand;
|
||||
import cc.fascinated.bat.base.commands.server.feature.FeatureCommand;
|
||||
import cc.fascinated.bat.base.commands.utility.PastebinCommand;
|
||||
import cc.fascinated.bat.base.commands.utility.lookup.LookupCommand;
|
||||
import cc.fascinated.bat.service.CommandService;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -42,7 +43,11 @@ public class BaseFeature extends Feature {
|
||||
super.registerCommand(commandService, context.getBean(ImageCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(FeatureCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(EightBallCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(LookupUserCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(LookupCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(PPSizeCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(PastebinCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(CoinFlipCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(HowGayCommand.class));
|
||||
super.registerCommand(commandService, context.getBean(NerdDetectorCommand.class));
|
||||
}
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
package cc.fascinated.bat.features.base.commands.botadmin;
|
||||
package cc.fascinated.bat.base.commands.botadmin;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.features.base.commands.botadmin.premium.PremiumRemoveSubCommand;
|
||||
import cc.fascinated.bat.features.base.commands.botadmin.premium.PremiumSetSubCommand;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.base.commands.botadmin.premium.PremiumRemoveSubCommand;
|
||||
import cc.fascinated.bat.base.commands.botadmin.premium.PremiumSetSubCommand;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.botadmin.premium;
|
||||
package cc.fascinated.bat.base.commands.botadmin.premium;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.premium.PremiumProfile;
|
||||
import cc.fascinated.bat.service.GuildService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -31,7 +32,7 @@ public class PremiumRemoveSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping guildOption = event.getOption("guild");
|
||||
if (guildOption == null) {
|
||||
event.reply("Please provide a guild id").queue();
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.botadmin.premium;
|
||||
package cc.fascinated.bat.base.commands.botadmin.premium;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.premium.PremiumProfile;
|
||||
import cc.fascinated.bat.service.GuildService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -34,7 +35,7 @@ public class PremiumSetSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping guildOption = event.getOption("guild");
|
||||
if (guildOption == null) {
|
||||
event.reply("Please provide a guild id").queue();
|
@ -0,0 +1,40 @@
|
||||
package cc.fascinated.bat.base.commands.fun;
|
||||
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@CommandInfo(
|
||||
name = "coinflip",
|
||||
description = "Flips a coin",
|
||||
userInstall = true
|
||||
)
|
||||
@Component
|
||||
public class CoinFlipCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member,
|
||||
Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
event.reply("%s, you flipped a coin and got **%s**!".formatted(user.getDiscordUser().getAsMention(), flip())).queue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Flips a coin
|
||||
*
|
||||
* @return The result of the coin flip
|
||||
*/
|
||||
public String flip() {
|
||||
return new Random().nextBoolean() ? "heads" : "tails";
|
||||
}
|
||||
}
|
@ -1,15 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.fun;
|
||||
package cc.fascinated.bat.base.commands.fun;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||
@ -19,7 +19,13 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "8ball", description = "Ask the magic 8ball a question", guildOnly = false, userInstall = true, category = Category.FUN)
|
||||
@CommandInfo(
|
||||
name = "8ball", description = "Ask the magic 8ball a question",
|
||||
guildOnly = false,
|
||||
userInstall = true,
|
||||
prefixAllowed = true,
|
||||
category = Category.FUN
|
||||
)
|
||||
public class EightBallCommand extends BatCommand {
|
||||
private final String[] responses = new String[]{
|
||||
"It is certain",
|
||||
@ -49,16 +55,18 @@ public class EightBallCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
OptionMapping questionOption = event.getOption("question");
|
||||
if (questionOption == null) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
String question = super.getArgument("question", arguments, 0, true, event).getAsString();
|
||||
if (question == null) {
|
||||
super.replyEmbed(commandMessage, event, EmbedUtils.errorEmbed()
|
||||
.setDescription("You need to provide a question to ask the 8ball")
|
||||
);
|
||||
return;
|
||||
}
|
||||
String question = questionOption.getAsString();
|
||||
|
||||
String response = responses[(int) (Math.random() * responses.length)];
|
||||
event.replyEmbeds(EmbedUtils.successEmbed()
|
||||
.setDescription("You asked: `%s`\n\n:8ball: The magic 8ball says: `%s`".formatted(question, response))
|
||||
.build())
|
||||
.queue();
|
||||
super.replyEmbed(commandMessage, event, EmbedUtils.successEmbed()
|
||||
.setDescription("You asked: `%s`\n\n:8ball: The magic 8ball says: `%s`".formatted(question, response))
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package cc.fascinated.bat.base.commands.fun;
|
||||
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.MathUtils;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(
|
||||
name = "howgay",
|
||||
description = "Checks how gay someone is",
|
||||
userInstall = true,
|
||||
category = Category.FUN
|
||||
)
|
||||
public class HowGayCommand extends BatCommand {
|
||||
public HowGayCommand() {
|
||||
super.addOptions(new OptionData(OptionType.USER, "user", "The user you want to check the gayness of", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping userOption = event.getOption("user");
|
||||
assert userOption != null; // This should never be null
|
||||
User target = userOption.getAsUser();
|
||||
|
||||
event.replyEmbeds(EmbedUtils.genericEmbed()
|
||||
.setDescription(new DescriptionBuilder("How Gay?")
|
||||
.appendLine("%s is %s%% gay".formatted(
|
||||
target.getAsMention(),
|
||||
(int) MathUtils.random(0, 100)
|
||||
), false)
|
||||
.build())
|
||||
.build()).queue();
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package cc.fascinated.bat.base.commands.fun;
|
||||
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.MathUtils;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(
|
||||
name = "nerddetector",
|
||||
description = "Checks how much of a nerd someone is",
|
||||
userInstall = true,
|
||||
category = Category.FUN
|
||||
)
|
||||
public class NerdDetectorCommand extends BatCommand {
|
||||
public NerdDetectorCommand() {
|
||||
super.addOptions(new OptionData(OptionType.USER, "user", "The user you want to check how much of a nerd they are", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping userOption = event.getOption("user");
|
||||
assert userOption != null; // This should never be null
|
||||
User target = userOption.getAsUser();
|
||||
|
||||
event.replyEmbeds(EmbedUtils.genericEmbed()
|
||||
.setDescription(new DescriptionBuilder("Nerd Detector")
|
||||
.appendLine("%s is %s%% nerd 🤓".formatted(
|
||||
target.getAsMention(),
|
||||
(int) MathUtils.random(0, 100)
|
||||
), false)
|
||||
.build())
|
||||
.build()).queue();
|
||||
}
|
||||
}
|
@ -1,14 +1,16 @@
|
||||
package cc.fascinated.bat.features.base.commands.fun;
|
||||
package cc.fascinated.bat.base.commands.fun;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedDescriptionBuilder;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.MathUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
@ -24,28 +26,32 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(
|
||||
name = "ppsize",
|
||||
description = "Get the size of someone's pp",
|
||||
userInstall = true
|
||||
userInstall = true,
|
||||
category = Category.FUN
|
||||
)
|
||||
public class PPSizeCommand extends BatCommand {
|
||||
|
||||
public PPSizeCommand() {
|
||||
super.addOptions(new OptionData(OptionType.USER, "user", "The user you want to get the pp size of", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping userOption = event.getOption("user");
|
||||
assert userOption != null; // This should never be null
|
||||
User target = userOption.getAsUser();
|
||||
|
||||
int size = (int) MathUtils.random(1, 12);
|
||||
int maxSize = 12;
|
||||
int size = (int) MathUtils.random(1, maxSize);
|
||||
event.replyEmbeds(EmbedUtils.genericEmbed()
|
||||
.setDescription(new EmbedDescriptionBuilder("PP Size")
|
||||
.setDescription(new DescriptionBuilder("PP Size")
|
||||
.appendLine("""
|
||||
The size of %s's pp is %s inches
|
||||
The size of %s's pp is %s inches%s
|
||||
**8%sD**
|
||||
""".formatted(
|
||||
target.getAsMention(),
|
||||
size,
|
||||
size == maxSize ? " 😳" : "",
|
||||
"=".repeat(size)
|
||||
), false)
|
||||
.build())
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.fun.image;
|
||||
package cc.fascinated.bat.base.commands.fun.image;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.WebRequest;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.model.token.thecatapi.CatImageToken;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.token.thecatapi.CatImageToken;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "cat", description = "Get a random cat image")
|
||||
public class CatSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
CatImageToken[] responseEntity = WebRequest.getAsEntity("https://api.thecatapi.com/v1/images/search", CatImageToken[].class);
|
||||
if (responseEntity == null || responseEntity.length == 0) {
|
||||
event.reply("Failed to get a cat image!").queue();
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.fun.image;
|
||||
package cc.fascinated.bat.base.commands.fun.image;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.WebRequest;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.model.token.dogceo.RandomImage;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.token.dogceo.RandomImage;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "dog", description = "Get a random dog image")
|
||||
public class DogSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
RandomImage responseEntity = WebRequest.getAsEntity("https://dog.ceo/api/breeds/image/random", RandomImage.class);
|
||||
if (responseEntity == null) {
|
||||
event.reply("Failed to get a dog image!").queue();
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.fun.image;
|
||||
package cc.fascinated.bat.base.commands.fun.image;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.WebRequest;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.model.token.randomd.RandomDuck;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.token.randomd.RandomDuck;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "duck", description = "Get a random duck image")
|
||||
public class DuckSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
RandomDuck responseEntity = WebRequest.getAsEntity("https://random-d.uk/api/v2/random", RandomDuck.class);
|
||||
if (responseEntity == null) {
|
||||
event.reply("Failed to get a duck image!").queue();
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.fun.image;
|
||||
package cc.fascinated.bat.base.commands.fun.image;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.WebRequest;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.model.token.randomfox.RandomFoxToken;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.token.randomfox.RandomFoxToken;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "fox", description = "Get a random fox image")
|
||||
public class FoxSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
RandomFoxToken responseEntity = WebRequest.getAsEntity("https://randomfox.ca/floof/", RandomFoxToken.class);
|
||||
if (responseEntity == null) {
|
||||
event.reply("Failed to get a fox image!").queue();
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.base.commands.fun.image;
|
||||
package cc.fascinated.bat.base.commands.fun.image;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,20 +1,18 @@
|
||||
package cc.fascinated.bat.features.base.commands.general;
|
||||
package cc.fascinated.bat.base.commands.general;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedDescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.NumberFormatter;
|
||||
import cc.fascinated.bat.common.TimeUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.*;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.DiscordService;
|
||||
import cc.fascinated.bat.service.GuildService;
|
||||
import cc.fascinated.bat.service.UserService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -32,6 +30,7 @@ public class BotStatsCommand extends BatCommand {
|
||||
private final GuildService guildService;
|
||||
private final UserService userService;
|
||||
private final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
|
||||
private final Runtime runtime = Runtime.getRuntime();
|
||||
|
||||
@Autowired
|
||||
public BotStatsCommand(@NonNull GuildService guildService, @NonNull UserService userService) {
|
||||
@ -40,17 +39,19 @@ public class BotStatsCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
JDA jda = DiscordService.JDA;
|
||||
long memoryUsed = (runtime.totalMemory() - runtime.freeMemory());
|
||||
|
||||
event.replyEmbeds(EmbedUtils.genericEmbed().setDescription(
|
||||
new EmbedDescriptionBuilder("Bat Statistics")
|
||||
new DescriptionBuilder("Bat Statistics")
|
||||
.appendLine("Guilds: **%s**".formatted(NumberFormatter.format(jda.getGuilds().size())), true)
|
||||
.appendLine("Users: **%s**".formatted(NumberFormatter.format(jda.getUsers().size())), true)
|
||||
.appendLine("Gateway Ping: **%sms**".formatted(jda.getGatewayPing()), true)
|
||||
.emptyLine()
|
||||
.appendSubtitle("Bot Statistics")
|
||||
.appendLine("Uptime: **%s**".formatted(TimeUtils.format(bean.getUptime())), true)
|
||||
.appendLine("Memory Usage: **%s**".formatted(StringUtils.formatBytes(memoryUsed)), true)
|
||||
.appendLine("Cached Guilds: **%s**".formatted(NumberFormatter.format(guildService.getGuilds().size())), true)
|
||||
.appendLine("Cached Users: **%s**".formatted(NumberFormatter.format(userService.getUsers().size())), true)
|
||||
.build()
|
@ -0,0 +1,132 @@
|
||||
package cc.fascinated.bat.base.commands.general;
|
||||
|
||||
import cc.fascinated.bat.Consts;
|
||||
import cc.fascinated.bat.Emojis;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.InteractionBuilder;
|
||||
import cc.fascinated.bat.event.EventListener;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.CommandService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(
|
||||
name = "help",
|
||||
description = "View the bots command categories",
|
||||
userInstall = true,
|
||||
category = Category.GENERAL
|
||||
)
|
||||
public class HelpCommand extends BatCommand implements EventListener {
|
||||
private final CommandService commandService;
|
||||
|
||||
@Autowired
|
||||
public HelpCommand(@NonNull CommandService commandService) {
|
||||
this.commandService = commandService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
InteractionBuilder interactionBuilder = new InteractionBuilder();
|
||||
interactionBuilder.addUrlButton("Invite Me", Consts.INVITE_URL, null);
|
||||
interactionBuilder.addUrlButton("Support Server", Consts.SUPPORT_INVITE_URL, null);
|
||||
interactionBuilder.addStringSelect("Home", "Return Home", Emojis.HOME_EMOJI, (buttonEvent) -> {
|
||||
buttonEvent.editMessageEmbeds(createHomeEmbed(event.isFromGuild())).queue();
|
||||
});
|
||||
for (Category category : Category.getSortedByName()) {
|
||||
List<BatCommand> categoryCommands = commandService.getCommandsByCategory(category, event.isFromGuild());
|
||||
if (categoryCommands.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
interactionBuilder.addStringSelect(
|
||||
category.getName(),
|
||||
"View commands in the %s category".formatted(category.getName()),
|
||||
category.getEmoji(),
|
||||
(buttonEvent) -> {
|
||||
DescriptionBuilder description = new DescriptionBuilder(null);
|
||||
description.appendLine("Commands in the **%s** Category".formatted(category.getName()), false);
|
||||
description.emptyLine();
|
||||
|
||||
for (BatCommand command : categoryCommands) {
|
||||
if (!command.getSubCommands().isEmpty()) {
|
||||
for (BatCommand subCommand : command.getSubCommands().values()) {
|
||||
description.appendLine("`%s %s` - %s".formatted(
|
||||
command.getInfo().getName(),
|
||||
subCommand.getInfo().getName(),
|
||||
subCommand.getInfo().getDescription()
|
||||
), true);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
description.appendLine("`%s` - %s".formatted(
|
||||
command.getInfo().getName(),
|
||||
command.getInfo().getDescription()
|
||||
), true);
|
||||
}
|
||||
|
||||
buttonEvent.editMessageEmbeds(EmbedUtils.genericEmbed()
|
||||
.setDescription(description.build())
|
||||
.build()).queue();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
event.replyEmbeds(createHomeEmbed(event.isFromGuild()))
|
||||
.addComponents(interactionBuilder.build())
|
||||
.setEphemeral(true)
|
||||
.queue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the home embed for the help command
|
||||
*
|
||||
* @return The home embed
|
||||
*/
|
||||
private MessageEmbed createHomeEmbed(boolean ranInsideGuild) {
|
||||
StringBuilder categories = new StringBuilder();
|
||||
for (Category category : Category.values()) {
|
||||
if (commandService.getCommandsByCategory(category, ranInsideGuild).isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
long commandCount = commandService.getCommandsByCategory(category, ranInsideGuild).size();
|
||||
categories.append("- %s: **%s Command%s**\n".formatted(
|
||||
category.getName(),
|
||||
commandCount,
|
||||
commandCount == 1 ? "" : "s"
|
||||
));
|
||||
}
|
||||
|
||||
return EmbedUtils.genericEmbed()
|
||||
.setDescription("""
|
||||
**Welcome to the Bat Help Menu!**
|
||||
|
||||
Bat is a multi-purpose bot that has a variety of features to help you with your server. You can change the category be clicking on the category name in the list below.
|
||||
|
||||
%s%s
|
||||
*View our [TOS](%s) and [Privacy Policy](%s) for more information.*
|
||||
""".formatted(
|
||||
categories.toString(),
|
||||
!ranInsideGuild ? "\n*guild only commands won't be shown here*" : "",
|
||||
Consts.TERMS_OF_SERVICE_URL,
|
||||
Consts.PRIVACY_POLICY_URL
|
||||
))
|
||||
.build();
|
||||
}
|
||||
}
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.general;
|
||||
package cc.fascinated.bat.base.commands.general;
|
||||
|
||||
import cc.fascinated.bat.Consts;
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "invite", description = "Invite the bot to your server!", guildOnly = false, category = Category.GENERAL)
|
||||
public class InviteCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
event.replyEmbeds(EmbedUtils.genericEmbed()
|
||||
.setDescription("You can invite the bot to your server by clicking [here](%s)".formatted(Consts.INVITE_URL))
|
||||
.build())
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.general;
|
||||
package cc.fascinated.bat.base.commands.general;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.DiscordService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -16,10 +17,16 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "ping", description = "Gets the ping of the bot", guildOnly = false, userInstall = true, category = Category.GENERAL)
|
||||
@CommandInfo(
|
||||
name = "ping",
|
||||
description = "Gets the ping of the bot",
|
||||
guildOnly = false,
|
||||
userInstall = true,
|
||||
category = Category.GENERAL
|
||||
)
|
||||
public class PingCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
long time = System.currentTimeMillis();
|
||||
event.reply("Pinging...").queue(response -> {
|
||||
response.editOriginal("Gateway response time: `%sms`\nAPI response time `%sms`".formatted(
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.general;
|
||||
package cc.fascinated.bat.base.commands.general;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedDescriptionBuilder;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -25,8 +26,8 @@ public class VoteCommand extends BatCommand {
|
||||
};
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
EmbedDescriptionBuilder description = new EmbedDescriptionBuilder("Vote Links");
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
DescriptionBuilder description = new DescriptionBuilder("Vote Links");
|
||||
description.appendLine("Vote for the bot on the following websites to support us!", false);
|
||||
for (String link : VOTE_LINKS) {
|
||||
description.appendLine(link, true);
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.base.commands.general.avatar;
|
||||
package cc.fascinated.bat.base.commands.general.avatar;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.general.avatar;
|
||||
package cc.fascinated.bat.base.commands.general.avatar;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.utils.ImageProxy;
|
||||
@ -20,9 +21,8 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "guild", description = "View the avatar of the guild", category = Category.GENERAL)
|
||||
public class GuildSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
ImageProxy icon = guild.getDiscordGuild().getIcon();
|
||||
|
||||
if (icon == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("**%s** does not have an avatar!".formatted(guild.getName()))
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.general.avatar;
|
||||
package cc.fascinated.bat.base.commands.general.avatar;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
@ -27,17 +28,11 @@ public class UserSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping userOption = event.getOption("user");
|
||||
if (userOption == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("You must provide a user to view the avatar of!")
|
||||
.build())
|
||||
.queue();
|
||||
return;
|
||||
}
|
||||
|
||||
assert userOption != null;
|
||||
User target = userOption.getAsUser();
|
||||
|
||||
event.replyEmbeds(EmbedUtils.genericEmbed()
|
||||
.setAuthor("%s's Avatar".formatted(target.getName()), null, target.getEffectiveAvatarUrl())
|
||||
.setImage(target.getEffectiveAvatarUrl())
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.base.commands.general.banner;
|
||||
package cc.fascinated.bat.base.commands.general.banner;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.general.banner;
|
||||
package cc.fascinated.bat.base.commands.general.banner;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.utils.ImageProxy;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "guild", description = "View the banner of the guild", category = Category.GENERAL)
|
||||
public class GuildSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
ImageProxy banner = guild.getDiscordGuild().getBanner();
|
||||
if (banner == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.general.banner;
|
||||
package cc.fascinated.bat.base.commands.general.banner;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
@ -28,16 +29,9 @@ public class UserSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping userOption = event.getOption("user");
|
||||
if (userOption == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("You must provide a user to view the banner of!")
|
||||
.build())
|
||||
.queue();
|
||||
return;
|
||||
}
|
||||
|
||||
assert userOption != null;
|
||||
User target = userOption.getAsUser();
|
||||
ImageProxy banner = target.retrieveProfile().complete().getBanner();
|
||||
if (banner == null) {
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.base.commands.server;
|
||||
package cc.fascinated.bat.base.commands.server;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.NumberFormatter;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "membercount", description = "View the member count of the server!")
|
||||
public class MemberCountCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
Guild discordGuild = guild.getDiscordGuild();
|
||||
int totalMembers = 0, totalUsers = 0, totalBots = 0;
|
||||
for (Member guildMember : discordGuild.getMembers()) {
|
@ -1,15 +1,16 @@
|
||||
package cc.fascinated.bat.features.base.commands.server;
|
||||
package cc.fascinated.bat.base.commands.server;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.premium.PremiumProfile;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -21,7 +22,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "premium", description = "View the premium information for the guild", requiredPermissions = Permission.ADMINISTRATOR)
|
||||
public class PremiumCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
PremiumProfile premium = guild.getPremiumProfile();
|
||||
EmbedBuilder embed = EmbedUtils.genericEmbed().setAuthor("Premium Information");
|
||||
if (premium.hasPremium()) {
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.channel;
|
||||
package cc.fascinated.bat.base.commands.server.channel;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.channel;
|
||||
package cc.fascinated.bat.base.commands.server.channel;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.Channel;
|
||||
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
@ -27,7 +28,7 @@ public class RemoveTopicSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
Channel target = event.getOption("channel") == null ? channel : event.getOption("channel").getAsChannel();
|
||||
if (!(target instanceof TextChannel textChannel)) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.channel;
|
||||
package cc.fascinated.bat.base.commands.server.channel;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.Channel;
|
||||
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
@ -32,7 +33,7 @@ public class SetTopicSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
Channel target = event.getOption("channel") == null ? channel : Objects.requireNonNull(event.getOption("channel")).getAsChannel();
|
||||
if (!(target instanceof TextChannel textChannel)) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,12 +1,13 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.channel;
|
||||
package cc.fascinated.bat.base.commands.server.channel;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.Channel;
|
||||
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
@ -26,7 +27,7 @@ public class ViewTopicSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
Channel target = event.getOption("channel") == null ? channel : event.getOption("channel").getAsChannel();
|
||||
if (!(target instanceof TextChannel textChannel)) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,15 +1,16 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.feature;
|
||||
package cc.fascinated.bat.base.commands.server.feature;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.FeatureService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -30,7 +31,7 @@ public class DisableSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
FeatureProfile featureProfile = guild.getFeatureProfile();
|
||||
OptionMapping featureOption = event.getOption("feature");
|
||||
if (featureOption == null) {
|
@ -1,15 +1,16 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.feature;
|
||||
package cc.fascinated.bat.base.commands.server.feature;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.FeatureService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -30,7 +31,7 @@ public class EnableSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
FeatureProfile featureProfile = guild.getFeatureProfile();
|
||||
OptionMapping featureOption = event.getOption("feature");
|
||||
if (featureOption == null) {
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.feature;
|
||||
package cc.fascinated.bat.base.commands.server.feature;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
@ -1,15 +1,16 @@
|
||||
package cc.fascinated.bat.features.base.commands.server.feature;
|
||||
package cc.fascinated.bat.base.commands.server.feature;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.FeatureService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -21,7 +22,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "list", description = "Lists the features and their states")
|
||||
public class ListSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
StringBuilder featureStates = new StringBuilder();
|
||||
for (Feature feature : FeatureService.INSTANCE.getFeaturesSorted()) {
|
||||
FeatureProfile featureProfile = guild.getFeatureProfile();
|
@ -0,0 +1,54 @@
|
||||
package cc.fascinated.bat.base.commands.utility;
|
||||
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.PasteUtils;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(
|
||||
name = "pastebin",
|
||||
description = "Uploads the given text to Paste",
|
||||
userInstall = true,
|
||||
category = Category.UTILITY
|
||||
)
|
||||
public class PastebinCommand extends BatCommand {
|
||||
public PastebinCommand() {
|
||||
super.addOptions(
|
||||
new OptionData(OptionType.STRING, "text", "The text to upload to Paste", true)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping textOption = event.getOption("text");
|
||||
assert textOption != null;
|
||||
String text = textOption.getAsString();
|
||||
|
||||
// Upload the text to pastebin
|
||||
String url = PasteUtils.uploadPaste(text).getUrl();
|
||||
event.replyEmbeds(EmbedUtils.successEmbed()
|
||||
.setDescription(new DescriptionBuilder("The text has been uploaded to Paste!")
|
||||
.appendLine("URL: %s".formatted(url), true)
|
||||
.build())
|
||||
.build())
|
||||
.setEphemeral(true)
|
||||
.queue();
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package cc.fascinated.bat.base.commands.utility.lookup;
|
||||
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Nick (okNick)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(
|
||||
name = "lookup",
|
||||
description = "View the banner of the guild or a user",
|
||||
userInstall = true,
|
||||
category = Category.UTILITY
|
||||
)
|
||||
public class LookupCommand extends BatCommand {
|
||||
@Autowired
|
||||
public LookupCommand(@NonNull ApplicationContext context) {
|
||||
super.addSubCommands(
|
||||
context.getBean(UserSubCommand.class)
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package cc.fascinated.bat.base.commands.utility.lookup;
|
||||
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.DescriptionBuilder;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.UserService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component("lookup.user:sub")
|
||||
@CommandInfo(name = "user", description = "Lookup a user")
|
||||
public class UserSubCommand extends BatCommand {
|
||||
private final UserService userService;
|
||||
|
||||
@Autowired
|
||||
public UserSubCommand(@NonNull UserService userService) {
|
||||
this.userService = userService;
|
||||
super.addOptions(new OptionData(OptionType.STRING, "id", "The id of the user", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
OptionMapping idOption = event.getOption("id");
|
||||
if (idOption == null) {
|
||||
return;
|
||||
}
|
||||
User target = userService.getUser(idOption.getAsString()).getDiscordUser();
|
||||
if (target == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("User `%s` not found".formatted(idOption.getAsString()))
|
||||
.build())
|
||||
.setEphemeral(true)
|
||||
.queue();
|
||||
return;
|
||||
}
|
||||
|
||||
// The flags of the user (eg. Discord Partner, Hypesquad Events, etc.)
|
||||
StringBuilder flags = new StringBuilder();
|
||||
for (User.UserFlag flag : target.getFlags()) {
|
||||
flags.append("`").append(flag.getName()).append("`, ");
|
||||
}
|
||||
String name = target.getGlobalName() == null ? target.getName() : target.getGlobalName().replaceAll("`", "");
|
||||
target.retrieveProfile().queue(profile -> event.replyEmbeds(EmbedUtils.genericEmbed()
|
||||
.setDescription(new DescriptionBuilder("User Lookup")
|
||||
.appendLine("Name: `%s`".formatted(name), true)
|
||||
.appendLine("Username: `%s`".formatted(target.getName()), true)
|
||||
.appendLine("ID: `%s`".formatted(target.getId()), true)
|
||||
.appendLine("Flags: %s".formatted(flags.toString().isEmpty() ? "None" : flags.substring(0, flags.length() - 2)), true)
|
||||
.appendLine("Joined Discord: <t:%s:R>".formatted(target.getTimeCreated().toEpochSecond()), true)
|
||||
.appendLine("Avatar: %s".formatted(target.getAvatar() == null ? "None"
|
||||
: "[click here](%s)".formatted(target.getAvatar().getUrl(4096))), true)
|
||||
.appendLine("Banner: %s".formatted(profile.getBanner() == null ? "None"
|
||||
: "[click here](%s)".formatted(profile.getBanner().getUrl(4096))), true)
|
||||
.build())
|
||||
.setThumbnail(target.getAvatar() == null ? null : target.getAvatar().getUrl(4096))
|
||||
.build())
|
||||
.setEphemeral(true)
|
||||
.queue());
|
||||
}
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
package cc.fascinated.bat.features.birthday;
|
||||
package cc.fascinated.bat.birthday;
|
||||
|
||||
import cc.fascinated.bat.event.EventListener;
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.features.birthday.command.BirthdayCommand;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.birthday.command.BirthdayCommand;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.service.CommandService;
|
||||
import cc.fascinated.bat.service.DiscordService;
|
||||
import cc.fascinated.bat.service.GuildService;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.features.birthday;
|
||||
package cc.fascinated.bat.birthday;
|
||||
|
||||
import cc.fascinated.bat.common.Serializable;
|
||||
import com.google.gson.Gson;
|
@ -1,8 +1,8 @@
|
||||
package cc.fascinated.bat.features.birthday.command;
|
||||
package cc.fascinated.bat.birthday.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.Category;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
@ -1,15 +1,16 @@
|
||||
package cc.fascinated.bat.features.birthday.command;
|
||||
package cc.fascinated.bat.birthday.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.TextChannelUtils;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.ChannelType;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.entities.channel.unions.GuildChannelUnion;
|
||||
@ -32,7 +33,7 @@ public class ChannelSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
BirthdayProfile profile = guild.getBirthdayProfile();
|
||||
OptionMapping option = event.getOption("channel");
|
||||
if (option == null) {
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.birthday.command;
|
||||
package cc.fascinated.bat.birthday.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -30,17 +31,12 @@ public class MessageSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
BirthdayProfile profile = guild.getBirthdayProfile();
|
||||
OptionMapping messageOption = event.getOption("message");
|
||||
if (messageOption == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("You must provide a message")
|
||||
.build()).queue();
|
||||
return;
|
||||
}
|
||||
|
||||
assert messageOption != null;
|
||||
String message = messageOption.getAsString();
|
||||
|
||||
if (message.length() > 2000) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("The message must be less than 2000 characters")
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.birthday.command;
|
||||
package cc.fascinated.bat.birthday.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -30,17 +31,12 @@ public class PrivateSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
BirthdayProfile profile = guild.getBirthdayProfile();
|
||||
OptionMapping enabledOption = event.getOption("enabled");
|
||||
if (enabledOption == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("You must provide whether your birthday is private or not")
|
||||
.build()).queue();
|
||||
return;
|
||||
}
|
||||
|
||||
assert enabledOption != null;
|
||||
boolean enabled = enabledOption.getAsBoolean();
|
||||
|
||||
UserBirthday birthday = profile.getBirthday(user.getId());
|
||||
if (birthday == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,13 +1,14 @@
|
||||
package cc.fascinated.bat.features.birthday.command;
|
||||
package cc.fascinated.bat.birthday.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -20,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
@CommandInfo(name = "remove", description = "Remove your birthday from this guild")
|
||||
public class RemoveSubCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
BirthdayProfile profile = guild.getBirthdayProfile();
|
||||
|
||||
profile.removeBirthday(user.getId());
|
@ -1,14 +1,15 @@
|
||||
package cc.fascinated.bat.features.birthday.command;
|
||||
package cc.fascinated.bat.birthday.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -36,7 +37,7 @@ public class SetSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
BirthdayProfile profile = guild.getBirthdayProfile();
|
||||
if (!profile.hasChannelSetup()) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
@ -46,13 +47,9 @@ public class SetSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
OptionMapping birthdayOption = event.getOption("birthday");
|
||||
if (birthdayOption == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
||||
.setDescription("You must provide a birthday")
|
||||
.build()).queue();
|
||||
return;
|
||||
}
|
||||
assert birthdayOption != null;
|
||||
String birthdayString = birthdayOption.getAsString();
|
||||
|
||||
Date birthday = parseBirthday(birthdayString);
|
||||
if (birthday == null) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,15 +1,16 @@
|
||||
package cc.fascinated.bat.features.birthday.command;
|
||||
package cc.fascinated.bat.birthday.command;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.features.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import cc.fascinated.bat.service.UserService;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
@ -34,7 +35,7 @@ public class ViewSubCommand extends BatCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
BirthdayProfile profile = guild.getBirthdayProfile();
|
||||
if (!profile.hasChannelSetup()) {
|
||||
event.replyEmbeds(EmbedUtils.errorEmbed()
|
@ -1,9 +1,9 @@
|
||||
package cc.fascinated.bat.features.birthday.profile;
|
||||
package cc.fascinated.bat.birthday.profile;
|
||||
|
||||
import cc.fascinated.bat.common.ChannelUtils;
|
||||
import cc.fascinated.bat.common.Serializable;
|
||||
import cc.fascinated.bat.features.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.birthday.UserBirthday;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import com.google.gson.Gson;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
@ -1,146 +0,0 @@
|
||||
package cc.fascinated.bat.command;
|
||||
|
||||
import cc.fascinated.bat.features.Feature;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.IntegrationType;
|
||||
import net.dv8tion.jda.api.interactions.InteractionContextType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
|
||||
import net.dv8tion.jda.internal.interactions.CommandDataImpl;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Braydon
|
||||
*/
|
||||
@Getter
|
||||
public abstract class BatCommand {
|
||||
/**
|
||||
* The info of this command.
|
||||
*/
|
||||
@NonNull
|
||||
private final InternalCommandInfo info;
|
||||
|
||||
/**
|
||||
* The feature this command belongs to.
|
||||
*/
|
||||
@Setter
|
||||
private Feature feature;
|
||||
|
||||
/**
|
||||
* The snowflake of this command, set when
|
||||
* this command is registered with Discord.
|
||||
*/
|
||||
@Setter
|
||||
private long snowflake;
|
||||
|
||||
/**
|
||||
* The sub commands of this command, if any.
|
||||
*/
|
||||
private final Map<String, BatCommand> subCommands = Collections.synchronizedMap(new HashMap<>());
|
||||
|
||||
/**
|
||||
* The internal data for this command.
|
||||
*/
|
||||
@Setter(AccessLevel.PRIVATE)
|
||||
private CommandDataImpl commandData;
|
||||
|
||||
/**
|
||||
* The internal subcommand data for this command.
|
||||
*/
|
||||
@Setter(AccessLevel.PRIVATE)
|
||||
private SubcommandData subcommandData;
|
||||
|
||||
public BatCommand() {
|
||||
if (!getClass().isAnnotationPresent(CommandInfo.class)) {
|
||||
throw new IllegalStateException("Missing @CommandInfo annotation in " + getClass().getSimpleName());
|
||||
}
|
||||
info = new InternalCommandInfo(getClass().getAnnotation(CommandInfo.class));
|
||||
commandData = new CommandDataImpl(info.getName(), info.getDescription())
|
||||
.setIntegrationTypes(info.isUserInstall() ?
|
||||
EnumSet.of(IntegrationType.USER_INSTALL) :
|
||||
EnumSet.of(IntegrationType.GUILD_INSTALL)
|
||||
).setContexts(info.isGuildOnly() ?
|
||||
EnumSet.of(InteractionContextType.GUILD) :
|
||||
EnumSet.of(InteractionContextType.GUILD, InteractionContextType.BOT_DM, InteractionContextType.PRIVATE_CHANNEL)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fired when this command is executed.
|
||||
*
|
||||
* @param guild the guild the command was executed in, if any
|
||||
* @param user the user who executed the command
|
||||
* @param channel the channel the command was executed in
|
||||
* @param member the member who executed the command, null if not a guild
|
||||
* @param event the event that invoked this command
|
||||
*/
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction event) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the given sub commands.
|
||||
*
|
||||
* @param commands the commands to register
|
||||
*/
|
||||
protected final void addSubCommands(@NonNull BatCommand... commands) {
|
||||
for (BatCommand command : commands) {
|
||||
// Copy info from the parent command
|
||||
if (command.getInfo().getCategory() != info.getCategory()) {
|
||||
command.getInfo().setCategory(info.getCategory());
|
||||
}
|
||||
if (command.getInfo().getPermissions().length == 0) {
|
||||
command.getInfo().setPermissions(info.getPermissions());
|
||||
}
|
||||
if (command.getInfo().isGuildOnly() != info.isGuildOnly()) {
|
||||
command.getInfo().setGuildOnly(info.isGuildOnly());
|
||||
}
|
||||
if (command.getInfo().isBotOwnerOnly() != info.isBotOwnerOnly()) {
|
||||
command.getInfo().setBotOwnerOnly(info.isBotOwnerOnly());
|
||||
}
|
||||
|
||||
command.setSubcommandData(new SubcommandData(command.getInfo().getName(), command.getInfo().getDescription()));
|
||||
for (OptionData option : command.getCommandData().getOptions()) {
|
||||
command.getSubcommandData().addOptions(option);
|
||||
}
|
||||
commandData.addSubcommands(command.getSubcommandData());
|
||||
subCommands.put(command.getInfo().getName(), command);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the given options
|
||||
* to this command.
|
||||
*
|
||||
* @param options the options to add
|
||||
*/
|
||||
protected final void addOptions(OptionData... options) {
|
||||
commandData.addOptions(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the sub command by its class.
|
||||
*
|
||||
* @param clazz the class of the sub command
|
||||
* @return the sub command
|
||||
*/
|
||||
public BatCommand getSubCommand(Class<? extends BatCommand> clazz) {
|
||||
for (Map.Entry<String, BatCommand> entry : subCommands.entrySet()) {
|
||||
if (entry.getValue().getClass().equals(clazz)) {
|
||||
return entry.getValue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -3,12 +3,18 @@ package cc.fascinated.bat.common;
|
||||
import lombok.experimental.UtilityClass;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
@UtilityClass
|
||||
public class DateUtils {
|
||||
private static final ZoneId ZONE_ID = ZoneId.of("Europe/London");
|
||||
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_INSTANT;
|
||||
private static final DateTimeFormatter SIMPLE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z")
|
||||
.withLocale(Locale.UK)
|
||||
.withZone(ZONE_ID);
|
||||
|
||||
/**
|
||||
* Gets the date from a string.
|
||||
@ -19,4 +25,14 @@ public class DateUtils {
|
||||
public static Date getDateFromString(String date) {
|
||||
return Date.from(Instant.from(FORMATTER.parse(date)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a date to a string.
|
||||
*
|
||||
* @param date The date to format.
|
||||
* @return The formatted date.
|
||||
*/
|
||||
public String formatDate(Date date) {
|
||||
return SIMPLE_FORMATTER.format(date.toInstant());
|
||||
}
|
||||
}
|
||||
|
@ -5,13 +5,13 @@ import lombok.NonNull;
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
public class EmbedDescriptionBuilder {
|
||||
public class DescriptionBuilder {
|
||||
/**
|
||||
* Where the description is stored
|
||||
*/
|
||||
private final StringBuilder builder = new StringBuilder();
|
||||
|
||||
public EmbedDescriptionBuilder(String title) {
|
||||
public DescriptionBuilder(String title) {
|
||||
if (title == null) {
|
||||
return;
|
||||
}
|
||||
@ -19,19 +19,19 @@ public class EmbedDescriptionBuilder {
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public EmbedDescriptionBuilder appendLine(@NonNull String line, boolean arrow) {
|
||||
public DescriptionBuilder appendLine(@NonNull String line, boolean arrow) {
|
||||
builder.append(arrow ? "➜ " : "").append(line).append("\n");
|
||||
return this;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public EmbedDescriptionBuilder appendSubtitle(@NonNull String title) {
|
||||
public DescriptionBuilder appendSubtitle(@NonNull String title) {
|
||||
builder.append("**").append(title).append("**").append("\n");
|
||||
return this;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public EmbedDescriptionBuilder emptyLine() {
|
||||
public DescriptionBuilder emptyLine() {
|
||||
builder.append("\n");
|
||||
return this;
|
||||
}
|
105
src/main/java/cc/fascinated/bat/common/InteractionBuilder.java
Normal file
105
src/main/java/cc/fascinated/bat/common/InteractionBuilder.java
Normal file
@ -0,0 +1,105 @@
|
||||
package cc.fascinated.bat.common;
|
||||
|
||||
import cc.fascinated.bat.service.InteractionService;
|
||||
import lombok.Getter;
|
||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
|
||||
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.components.ActionRow;
|
||||
import net.dv8tion.jda.api.interactions.components.buttons.Button;
|
||||
import net.dv8tion.jda.api.interactions.components.selections.SelectOption;
|
||||
import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Getter
|
||||
public class InteractionBuilder {
|
||||
/**
|
||||
* The button interactions
|
||||
*/
|
||||
private final Map<Button, Consumer<ButtonInteractionEvent>> buttonInteractions = new HashMap<>();
|
||||
|
||||
/**
|
||||
* The select menu interactions
|
||||
*/
|
||||
private final Map<SelectOption, Consumer<StringSelectInteractionEvent>> selectMenuInteractions = new HashMap<>();
|
||||
|
||||
/**
|
||||
* The select menu id
|
||||
*/
|
||||
private String selectMenuId;
|
||||
|
||||
public InteractionBuilder() {
|
||||
InteractionService.INSTANCE.addInteractionBuilder(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a button to the interaction builder
|
||||
*
|
||||
* @param display The display of the button
|
||||
* @param onClick The consumer to run when the button is clicked
|
||||
* @return - The interaction builder
|
||||
*/
|
||||
public InteractionBuilder addButton(String display, Consumer<ButtonInteractionEvent> onClick) {
|
||||
String id = StringUtils.randomString(8);
|
||||
this.buttonInteractions.put(Button.primary(id, display), onClick);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a URL button to the interaction builder
|
||||
*
|
||||
* @param display The display of the button
|
||||
* @param url The url to open when the button is clicked
|
||||
* @return - The interaction builder
|
||||
*/
|
||||
public InteractionBuilder addUrlButton(String display, String url, Emoji emoji) {
|
||||
this.buttonInteractions.put(Button.link(url, display).withEmoji(emoji), event -> {});
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a string selection to the interaction builder
|
||||
*
|
||||
* @param display the name of the selection
|
||||
* @param description the description of the selection
|
||||
* @param emoji the emoji of the selection
|
||||
* @param onClick the consumer to run when the selection is clicked
|
||||
* @return the interaction builder
|
||||
*/
|
||||
public InteractionBuilder addStringSelect(String display, String description, Emoji emoji, Consumer<StringSelectInteractionEvent> onClick) {
|
||||
String id = StringUtils.randomString(8);
|
||||
this.selectMenuInteractions.put(SelectOption.of(display, id).withDescription(description).withEmoji(emoji), onClick);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the interactions into an action row
|
||||
*
|
||||
* @return The action row
|
||||
*/
|
||||
public List<ActionRow> build() {
|
||||
List<ActionRow> components = new ArrayList<>();
|
||||
if (!this.getButtonInteractions().isEmpty()) {
|
||||
List<Button> buttons = new ArrayList<>(this.getButtonInteractions().keySet());
|
||||
components.add(ActionRow.of(buttons));
|
||||
}
|
||||
if (!this.getSelectMenuInteractions().isEmpty()) {
|
||||
List<SelectOption> options = new ArrayList<>(this.getSelectMenuInteractions().keySet());
|
||||
String id = StringUtils.randomString(8);
|
||||
this.selectMenuId = id;
|
||||
components.add(ActionRow.of(StringSelectMenu.create(id)
|
||||
.addOptions(options)
|
||||
.build()));
|
||||
}
|
||||
|
||||
return components;
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package cc.fascinated.bat.common;
|
||||
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package cc.fascinated.bat.common;
|
||||
|
||||
import cc.fascinated.bat.BatApplication;
|
||||
import cc.fascinated.bat.model.token.paste.PasteUploadToken;
|
||||
import cc.fascinated.bat.common.model.token.paste.PasteUploadToken;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
@ -18,7 +18,7 @@ import java.net.http.HttpResponse;
|
||||
@Log4j2(topic = "PasteUtils")
|
||||
public class PasteUtils {
|
||||
private static final String PASTE_URL = "https://paste.fascinated.cc/";
|
||||
private static final String PASTE_UPLOAD_URL = PASTE_URL + "api/upload";
|
||||
private static final String PASTE_UPLOAD_URL = PASTE_URL + "api/upload?expires=" + 60 * 60 * 24 * 30; // 30 days
|
||||
private static final HttpClient httpClient = HttpClient.newHttpClient();
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,6 @@
|
||||
package cc.fascinated.bat.common;
|
||||
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
@ -26,6 +26,17 @@ public class RoleUtils {
|
||||
return member.getRoles().stream().anyMatch(r -> r.getPosition() > role.getPosition());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a member has a higher role than the specified role
|
||||
*
|
||||
* @param member the member to check
|
||||
* @param targetMember the member to check against
|
||||
* @return if the member has a higher role
|
||||
*/
|
||||
public static boolean hasHigherRole(Member member, Member targetMember) {
|
||||
return member.getRoles().stream().anyMatch(r -> targetMember.getRoles().stream().anyMatch(tr -> tr.getPosition() < r.getPosition()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the formatted permissions of a role
|
||||
*
|
||||
|
@ -1,71 +0,0 @@
|
||||
package cc.fascinated.bat.common;
|
||||
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.service.SpotifyService;
|
||||
import lombok.NonNull;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import se.michaelthelin.spotify.model_objects.miscellaneous.CurrentlyPlaying;
|
||||
import se.michaelthelin.spotify.model_objects.specification.Track;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@UtilityClass
|
||||
@Log4j2(topic = "Spotify Utils")
|
||||
public class SpotifyUtils {
|
||||
/**
|
||||
* Gets the URL of the track that is currently playing.
|
||||
*
|
||||
* @param currentlyPlaying The currently playing object.
|
||||
* @return The URL of the track that is currently playing.
|
||||
*/
|
||||
public static String getTrackUrl(CurrentlyPlaying currentlyPlaying) {
|
||||
return "https://open.spotify.com/track/" + currentlyPlaying.getItem().getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the formatted time of the currently playing track
|
||||
*
|
||||
* @param currentlyPlaying the currently playing track
|
||||
* @return the formatted time
|
||||
*/
|
||||
public static String getFormattedTime(@NonNull CurrentlyPlaying currentlyPlaying) {
|
||||
Track track = (Track) currentlyPlaying.getItem();
|
||||
int currentMinutes = currentlyPlaying.getProgress_ms() / 1000 / 60;
|
||||
int currentSeconds = currentlyPlaying.getProgress_ms() / 1000 % 60;
|
||||
int totalMinutes = track.getDurationMs() / 1000 / 60;
|
||||
int totalSeconds = track.getDurationMs() / 1000 % 60;
|
||||
|
||||
return "`%02d:%02d`/`%02d:%02d`".formatted(currentMinutes, currentSeconds, totalMinutes, totalSeconds);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the next track that is playing
|
||||
*
|
||||
* @param user The user to get the track for
|
||||
* @param oldName The name of the old track
|
||||
* @return The new track
|
||||
*/
|
||||
public static CurrentlyPlaying getNewTrack(@NonNull SpotifyService spotifyService, @NonNull BatUser user, @NonNull String oldName) {
|
||||
int checks = 0;
|
||||
|
||||
try {
|
||||
Thread.sleep(150);
|
||||
while (checks < 10) {
|
||||
CurrentlyPlaying currentlyPlaying = spotifyService.getCurrentlyPlayingTrack(user);
|
||||
Track track = (Track) currentlyPlaying.getItem();
|
||||
if (track.getName().equals(oldName)) {
|
||||
Thread.sleep(250);
|
||||
checks++;
|
||||
} else {
|
||||
log.info("Found new track \"{}\" in {} check{}", track.getName(), checks, checks == 1 ? "" : "s");
|
||||
return currentlyPlaying;
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -37,4 +37,18 @@ public class StringUtils {
|
||||
}
|
||||
return inputString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats bytes into a human-readable format
|
||||
*
|
||||
* @param bytes the bytes
|
||||
* @return the formatted bytes
|
||||
*/
|
||||
public static String formatBytes(long bytes) {
|
||||
int unit = 1024;
|
||||
if (bytes < unit) return bytes + " B";
|
||||
int exp = (int) (Math.log(bytes) / Math.log(unit));
|
||||
char pre = "KMGTPE".charAt(exp-1);
|
||||
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
|
||||
}
|
||||
}
|
||||
|
@ -1,22 +0,0 @@
|
||||
package cc.fascinated.bat.common.beatsaber.leaderboard;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor @Getter
|
||||
public class Leaderboard {
|
||||
/**
|
||||
* The name of the leaderboard.
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* The version of the leaderboard.
|
||||
*/
|
||||
private int curveVersion;
|
||||
|
||||
/**
|
||||
* The curve of the leaderboard.
|
||||
*/
|
||||
private final LeaderboardCurvePoint[] curve;
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
package cc.fascinated.bat.common.beatsaber.leaderboard;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter @AllArgsConstructor
|
||||
public class LeaderboardCurvePoint {
|
||||
private final double a;
|
||||
private final double b;
|
||||
}
|
@ -1,167 +0,0 @@
|
||||
package cc.fascinated.bat.common.beatsaber.leaderboard.impl;
|
||||
|
||||
import cc.fascinated.bat.common.MathUtils;
|
||||
import cc.fascinated.bat.common.beatsaber.leaderboard.Leaderboard;
|
||||
import cc.fascinated.bat.common.beatsaber.leaderboard.LeaderboardCurvePoint;
|
||||
import cc.fascinated.bat.model.token.beatsaber.scoresaber.ScoreSaberScoreToken;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Log4j2(topic = "ScoreSaber Leaderboard")
|
||||
public class ScoreSaberLeaderboard extends Leaderboard {
|
||||
public static final ScoreSaberLeaderboard INSTANCE = new ScoreSaberLeaderboard();
|
||||
|
||||
/**
|
||||
* The base multiplier for stars.
|
||||
*/
|
||||
private final double starMultiplier = 42.11;
|
||||
|
||||
/**
|
||||
* no idea, ngl
|
||||
*/
|
||||
private final double weightCoefficient = 0.965;
|
||||
|
||||
public ScoreSaberLeaderboard() {
|
||||
super("ScoreSaber", 1, new LeaderboardCurvePoint[] {
|
||||
new LeaderboardCurvePoint(1.0, 5.367394282890631),
|
||||
new LeaderboardCurvePoint(0.9995, 5.019543595874787),
|
||||
new LeaderboardCurvePoint(0.999, 4.715470646416203),
|
||||
new LeaderboardCurvePoint(0.99825, 4.325027383589547),
|
||||
new LeaderboardCurvePoint(0.9975, 3.996793606763322),
|
||||
new LeaderboardCurvePoint(0.99625, 3.5526145337555373),
|
||||
new LeaderboardCurvePoint(0.995, 3.2022017597337955),
|
||||
new LeaderboardCurvePoint(0.99375, 2.9190155639254955),
|
||||
new LeaderboardCurvePoint(0.9925, 2.685667856592722),
|
||||
new LeaderboardCurvePoint(0.99125, 2.4902905794106913),
|
||||
new LeaderboardCurvePoint(0.99, 2.324506282149922),
|
||||
new LeaderboardCurvePoint(0.9875, 2.058947159052738),
|
||||
new LeaderboardCurvePoint(0.985, 1.8563887693647105),
|
||||
new LeaderboardCurvePoint(0.9825, 1.697536248647543),
|
||||
new LeaderboardCurvePoint(0.98, 1.5702410055532239),
|
||||
new LeaderboardCurvePoint(0.9775, 1.4664726399289512),
|
||||
new LeaderboardCurvePoint(0.975, 1.3807102743105126),
|
||||
new LeaderboardCurvePoint(0.9725, 1.3090333065057616),
|
||||
new LeaderboardCurvePoint(0.97, 1.2485807759957321),
|
||||
new LeaderboardCurvePoint(0.965, 1.1552120359501035),
|
||||
new LeaderboardCurvePoint(0.96, 1.0871883573850478),
|
||||
new LeaderboardCurvePoint(0.955, 1.0388633331418984),
|
||||
new LeaderboardCurvePoint(0.95, 1.0),
|
||||
new LeaderboardCurvePoint(0.94, 0.9417362980580238),
|
||||
new LeaderboardCurvePoint(0.93, 0.9039994071865736),
|
||||
new LeaderboardCurvePoint(0.92, 0.8728710341448851),
|
||||
new LeaderboardCurvePoint(0.91, 0.8488375988124467),
|
||||
new LeaderboardCurvePoint(0.9, 0.825756123560842),
|
||||
new LeaderboardCurvePoint(0.875, 0.7816934560296046),
|
||||
new LeaderboardCurvePoint(0.85, 0.7462290664143185),
|
||||
new LeaderboardCurvePoint(0.825, 0.7150465663454271),
|
||||
new LeaderboardCurvePoint(0.8, 0.6872268862950283),
|
||||
new LeaderboardCurvePoint(0.75, 0.6451808210101443),
|
||||
new LeaderboardCurvePoint(0.7, 0.6125565959114954),
|
||||
new LeaderboardCurvePoint(0.65, 0.5866010012767576),
|
||||
new LeaderboardCurvePoint(0.6, 0.18223233667439062),
|
||||
new LeaderboardCurvePoint(0.0, 0.0)
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the modifier for the given accuracy.
|
||||
*
|
||||
* @param accuracy The accuracy.
|
||||
* @return The modifier.
|
||||
*/
|
||||
public double getModifier(double accuracy) {
|
||||
accuracy = MathUtils.clamp(accuracy, 0, 100) / 100;
|
||||
|
||||
LeaderboardCurvePoint prev = this.getCurve()[1];
|
||||
for (LeaderboardCurvePoint point : this.getCurve()) {
|
||||
if (point.getA() <= accuracy) {
|
||||
double distance = (prev.getA() - accuracy) / (prev.getA() - point.getA());
|
||||
return MathUtils.lerp(prev.getB(), point.getB(), distance);
|
||||
}
|
||||
prev = point;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the pp for the given accuracy and stars.
|
||||
*
|
||||
* @param accuracy The accuracy.
|
||||
* @param stars The stars.
|
||||
* @return The pp.
|
||||
*/
|
||||
public double getPP(double accuracy, double stars) {
|
||||
double pp = stars * this.starMultiplier;
|
||||
double modifier = this.getModifier(accuracy);
|
||||
return modifier * pp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the total pp for the given scores.
|
||||
*
|
||||
* @param scores The scores.
|
||||
* @return The total pp.
|
||||
*/
|
||||
private double getTotalPP(List<ScoreSaberScoreToken> scores, int startIdx) {
|
||||
double totalPP = 0;
|
||||
for (int i = 0; i < scores.size(); i++) {
|
||||
totalPP += Math.pow(this.weightCoefficient, i + startIdx) * scores.get(i).getPp();
|
||||
}
|
||||
return totalPP;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the pp at the given index for the given scores.
|
||||
*
|
||||
* @param bottomScores The scores.
|
||||
* @param idx The index.
|
||||
* @return The pp.
|
||||
*/
|
||||
private double getRawPPAtIdx(List<ScoreSaberScoreToken> bottomScores, int idx, double expected) {
|
||||
double oldBottomPP = this.getTotalPP(bottomScores, idx);
|
||||
double newBottomPP = this.getTotalPP(bottomScores, idx + 1);
|
||||
|
||||
return (expected + oldBottomPP - newBottomPP) / Math.pow(this.weightCoefficient, idx);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the raw pp per global pp for the given scores.
|
||||
*
|
||||
* @param scores The scores.
|
||||
* @param expectedPP The expected pp.
|
||||
* @return The raw pp per global pp.
|
||||
*/
|
||||
public double getRawPerGlobalPP(List<ScoreSaberScoreToken> scores, double expectedPP) {
|
||||
int left = 0;
|
||||
int right = scores.size() - 1;
|
||||
int boundaryIdx = -1;
|
||||
|
||||
// Sort by PP
|
||||
scores.sort((a, b) -> Double.compare(b.getPp(), a.getPp()));
|
||||
|
||||
while (left <= right) {
|
||||
int mid = (left + right) / 2;
|
||||
double bottomPP = this.getTotalPP(scores.subList(mid, scores.size()), mid);
|
||||
|
||||
List<ScoreSaberScoreToken> bottomSlice = new ArrayList<>(scores.subList(mid, scores.size()));
|
||||
bottomSlice.add(0, scores.get(mid));
|
||||
double modifiedBottomPP = this.getTotalPP(bottomSlice, mid);
|
||||
double diff = modifiedBottomPP - bottomPP;
|
||||
|
||||
if (diff > expectedPP) {
|
||||
boundaryIdx = mid;
|
||||
left = mid + 1;
|
||||
} else {
|
||||
right = mid - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (boundaryIdx == -1) {
|
||||
return this.getRawPPAtIdx(scores, 0, expectedPP);
|
||||
} else {
|
||||
return this.getRawPPAtIdx(scores.subList(boundaryIdx + 1, scores.size()), boundaryIdx + 1, expectedPP);
|
||||
}
|
||||
}
|
||||
}
|
248
src/main/java/cc/fascinated/bat/common/command/BatCommand.java
Normal file
248
src/main/java/cc/fascinated/bat/common/command/BatCommand.java
Normal file
@ -0,0 +1,248 @@
|
||||
package cc.fascinated.bat.common.command;
|
||||
|
||||
import cc.fascinated.bat.common.feature.Feature;
|
||||
import cc.fascinated.bat.common.model.BatGuild;
|
||||
import cc.fascinated.bat.common.model.BatUser;
|
||||
import lombok.*;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||
import net.dv8tion.jda.api.interactions.IntegrationType;
|
||||
import net.dv8tion.jda.api.interactions.InteractionContextType;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
|
||||
import net.dv8tion.jda.internal.interactions.CommandDataImpl;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Braydon
|
||||
*/
|
||||
@Getter
|
||||
public abstract class BatCommand {
|
||||
/**
|
||||
* The info of this command.
|
||||
*/
|
||||
@NonNull
|
||||
private final InternalCommandInfo info;
|
||||
|
||||
/**
|
||||
* The feature this command belongs to.
|
||||
*/
|
||||
@Setter
|
||||
private Feature feature;
|
||||
|
||||
/**
|
||||
* The snowflake of this command, set when
|
||||
* this command is registered with Discord.
|
||||
*/
|
||||
@Setter
|
||||
private long snowflake;
|
||||
|
||||
/**
|
||||
* The sub commands of this command, if any.
|
||||
*/
|
||||
private final Map<String, BatCommand> subCommands = Collections.synchronizedMap(new HashMap<>());
|
||||
|
||||
/**
|
||||
* The internal data for this command.
|
||||
*/
|
||||
@Setter(AccessLevel.PRIVATE)
|
||||
private CommandDataImpl commandData;
|
||||
|
||||
/**
|
||||
* The internal subcommand data for this command.
|
||||
*/
|
||||
@Setter(AccessLevel.PRIVATE)
|
||||
private SubcommandData subcommandData;
|
||||
|
||||
public BatCommand() {
|
||||
if (!getClass().isAnnotationPresent(CommandInfo.class)) {
|
||||
throw new IllegalStateException("Missing @CommandInfo annotation in " + getClass().getSimpleName());
|
||||
}
|
||||
info = new InternalCommandInfo(getClass().getAnnotation(CommandInfo.class));
|
||||
commandData = new CommandDataImpl(info.getName(), info.getDescription())
|
||||
// .setDefaultPermissions(DefaultMemberPermissions.enabledFor(info.getPermissions()))
|
||||
.setIntegrationTypes(info.isUserInstall() ?
|
||||
EnumSet.of(IntegrationType.USER_INSTALL) :
|
||||
EnumSet.of(IntegrationType.GUILD_INSTALL)
|
||||
).setContexts(info.isGuildOnly() ?
|
||||
EnumSet.of(InteractionContextType.GUILD) :
|
||||
EnumSet.of(InteractionContextType.GUILD, InteractionContextType.BOT_DM, InteractionContextType.PRIVATE_CHANNEL)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fired when this command is executed.
|
||||
*
|
||||
* @param guild the guild the command was executed in, if any
|
||||
* @param user the user who executed the command
|
||||
* @param channel the channel the command was executed in
|
||||
* @param member the member who executed the command, null if not a guild
|
||||
* @param commandMessage the message that invoked this command, if any
|
||||
* @param arguments the arguments of the command, if any
|
||||
* @param event the event that invoked this command, if any
|
||||
*/
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member,
|
||||
Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the given sub commands.
|
||||
*
|
||||
* @param commands the commands to register
|
||||
*/
|
||||
protected final void addSubCommands(@NonNull BatCommand... commands) {
|
||||
for (BatCommand command : commands) {
|
||||
// Copy info from the parent command
|
||||
if (command.getInfo().getCategory() != info.getCategory()) {
|
||||
command.getInfo().setCategory(info.getCategory());
|
||||
}
|
||||
if (command.getInfo().getPermissions().length == 0) {
|
||||
command.getInfo().setPermissions(info.getPermissions());
|
||||
}
|
||||
if (command.getInfo().isGuildOnly() != info.isGuildOnly()) {
|
||||
command.getInfo().setGuildOnly(info.isGuildOnly());
|
||||
}
|
||||
if (command.getInfo().isBotOwnerOnly() != info.isBotOwnerOnly()) {
|
||||
command.getInfo().setBotOwnerOnly(info.isBotOwnerOnly());
|
||||
}
|
||||
|
||||
command.setSubcommandData(new SubcommandData(command.getInfo().getName(), command.getInfo().getDescription()));
|
||||
for (OptionData option : command.getCommandData().getOptions()) {
|
||||
command.getSubcommandData().addOptions(option);
|
||||
}
|
||||
commandData.addSubcommands(command.getSubcommandData());
|
||||
subCommands.put(command.getInfo().getName(), command);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the given options
|
||||
* to this command.
|
||||
*
|
||||
* @param options the options to add
|
||||
*/
|
||||
protected final void addOptions(OptionData... options) {
|
||||
commandData.addOptions(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the sub command by its class.
|
||||
*
|
||||
* @param clazz the class of the sub command
|
||||
* @return the sub command
|
||||
*/
|
||||
public BatCommand getSubCommand(Class<? extends BatCommand> clazz) {
|
||||
for (Map.Entry<String, BatCommand> entry : subCommands.entrySet()) {
|
||||
if (entry.getValue().getClass().equals(clazz)) {
|
||||
return entry.getValue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reply to the message or interaction with the given contents.
|
||||
*
|
||||
* @param message the message to reply to, null if interaction
|
||||
* @param interaction the interaction to reply to, null if message
|
||||
* @param contents the contents to reply with
|
||||
*/
|
||||
public void replyMessage(Message message, SlashCommandInteraction interaction, String contents) {
|
||||
if (message != null) {
|
||||
message.reply(contents).queue();
|
||||
} else {
|
||||
interaction.reply(contents).queue();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reply to the message or interaction with the given embed.
|
||||
*
|
||||
* @param message the message to reply to, null if interaction
|
||||
* @param interaction the interaction to reply to, null if message
|
||||
* @param builder the embed builder to reply with
|
||||
*/
|
||||
public void replyEmbed(Message message, SlashCommandInteraction interaction, EmbedBuilder builder) {
|
||||
if (message != null) {
|
||||
message.replyEmbeds(builder.build()).queue();
|
||||
} else {
|
||||
interaction.replyEmbeds(builder.build()).queue();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the argument from the command.
|
||||
*
|
||||
* @param option the option to get from the slash command
|
||||
* @param arguments the arguments of the invoked command
|
||||
* @param argumentIndex the index of the argument in the command
|
||||
* @param concatenateLeftover whether to concatenate the leftover arguments
|
||||
* @param event the event that invoked the command
|
||||
* @return the argument
|
||||
*/
|
||||
public Argument getArgument(String option, String[] arguments, int argumentIndex, boolean concatenateLeftover, SlashCommandInteraction event) {
|
||||
return new Argument(option, arguments, argumentIndex, concatenateLeftover, event);
|
||||
}
|
||||
|
||||
@AllArgsConstructor
|
||||
public static class Argument {
|
||||
/**
|
||||
* The option to get from the slash command.
|
||||
*/
|
||||
private final String option;
|
||||
|
||||
/**
|
||||
* The arguments of the invoked command.
|
||||
*/
|
||||
private final String[] arguments;
|
||||
|
||||
/**
|
||||
* The index of the argument in the command.
|
||||
*/
|
||||
private final int argumentIndex;
|
||||
|
||||
/**
|
||||
* Whether to concatenate the leftover arguments.
|
||||
*/
|
||||
private final boolean concatenateLeftover;
|
||||
|
||||
/**
|
||||
* The event that invoked the command.
|
||||
*/
|
||||
private final SlashCommandInteraction event;
|
||||
|
||||
/**
|
||||
* Get the argument from the command.
|
||||
*
|
||||
* @return the argument
|
||||
*/
|
||||
public String getAsString() {
|
||||
if (event != null) { // Get the option from the event
|
||||
OptionMapping option = event.getOption(this.option);
|
||||
if (option == null) {
|
||||
return null;
|
||||
}
|
||||
return option.getAsString();
|
||||
}
|
||||
if (arguments.length < argumentIndex) { // Check if the argument index is out of bounds
|
||||
return null;
|
||||
}
|
||||
if (concatenateLeftover) { // Concatenate the leftover arguments
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (int i = argumentIndex; i < arguments.length; i++) {
|
||||
builder.append(arguments[i]).append(" ");
|
||||
}
|
||||
return builder.toString().trim();
|
||||
}
|
||||
return arguments[argumentIndex]; // Get the argument at the index
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,14 @@
|
||||
package cc.fascinated.bat.command;
|
||||
package cc.fascinated.bat.common.command;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@ -43,4 +47,13 @@ public enum Category {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the categories sorted by their name
|
||||
*
|
||||
* @return the sorted categories
|
||||
*/
|
||||
public static List<Category> getSortedByName() {
|
||||
return Arrays.stream(Category.values()).sorted(Comparator.comparing(Category::getName)).toList();
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.command;
|
||||
package cc.fascinated.bat.common.command;
|
||||
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
|
||||
@ -44,6 +44,13 @@ public @interface CommandInfo {
|
||||
*/
|
||||
boolean userInstall() default false;
|
||||
|
||||
/**
|
||||
* If the command can be executed with a prefix
|
||||
*
|
||||
* @return if the command can be executed with a prefix
|
||||
*/
|
||||
boolean prefixAllowed() default false;
|
||||
|
||||
/**
|
||||
* The required permissions for the command
|
||||
*
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.command;
|
||||
package cc.fascinated.bat.common.command;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
@ -48,6 +48,11 @@ public class InternalCommandInfo {
|
||||
*/
|
||||
private boolean botOwnerOnly;
|
||||
|
||||
/**
|
||||
* Whether the command can be ran with a prefix.
|
||||
*/
|
||||
private boolean prefixAllowed;
|
||||
|
||||
protected InternalCommandInfo(@NonNull CommandInfo annotation) {
|
||||
name = annotation.name();
|
||||
description = annotation.description();
|
||||
@ -56,5 +61,6 @@ public class InternalCommandInfo {
|
||||
guildOnly = annotation.guildOnly() && !annotation.userInstall();
|
||||
userInstall = annotation.userInstall();
|
||||
botOwnerOnly = annotation.botOwnerOnly();
|
||||
prefixAllowed = annotation.prefixAllowed();
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package cc.fascinated.bat.features;
|
||||
package cc.fascinated.bat.common.feature;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.common.command.BatCommand;
|
||||
import cc.fascinated.bat.service.CommandService;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
@ -1,10 +1,11 @@
|
||||
package cc.fascinated.bat.features;
|
||||
package cc.fascinated.bat.common.feature;
|
||||
|
||||
import cc.fascinated.bat.common.Serializable;
|
||||
import com.google.gson.Gson;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.NonNull;
|
||||
import org.bson.Document;
|
||||
|
||||
import java.util.HashMap;
|
||||
@ -25,9 +26,9 @@ public class FeatureProfile extends Serializable {
|
||||
*
|
||||
* @return the feature states
|
||||
*/
|
||||
public FeatureState getFeatureState(Feature feature) {
|
||||
if (feature == null) {
|
||||
return FeatureProfile.FeatureState.DISABLED;
|
||||
public FeatureState getFeatureState(@NonNull Feature feature) {
|
||||
if (!feature.isCanBeDisabled()) {
|
||||
return FeatureProfile.FeatureState.ENABLED;
|
||||
}
|
||||
String featureName = feature.getName().toUpperCase();
|
||||
if (!this.featureStates.containsKey(featureName)) {
|
@ -1,17 +1,18 @@
|
||||
package cc.fascinated.bat.model;
|
||||
package cc.fascinated.bat.common.model;
|
||||
|
||||
import cc.fascinated.bat.BatApplication;
|
||||
import cc.fascinated.bat.common.ProfileHolder;
|
||||
import cc.fascinated.bat.common.Serializable;
|
||||
import cc.fascinated.bat.features.FeatureProfile;
|
||||
import cc.fascinated.bat.features.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.features.counter.CounterProfile;
|
||||
import cc.fascinated.bat.features.leveling.LevelingProfile;
|
||||
import cc.fascinated.bat.features.logging.LogProfile;
|
||||
import cc.fascinated.bat.features.minecraft.MinecraftProfile;
|
||||
import cc.fascinated.bat.features.namehistory.profile.guild.NameHistoryProfile;
|
||||
import cc.fascinated.bat.features.reminder.ReminderProfile;
|
||||
import cc.fascinated.bat.features.welcomer.WelcomerProfile;
|
||||
import cc.fascinated.bat.common.feature.FeatureProfile;
|
||||
import cc.fascinated.bat.birthday.profile.BirthdayProfile;
|
||||
import cc.fascinated.bat.counter.CounterProfile;
|
||||
import cc.fascinated.bat.leveling.LevelingProfile;
|
||||
import cc.fascinated.bat.logging.LogProfile;
|
||||
import cc.fascinated.bat.moderation.punish.PunishmentProfile;
|
||||
import cc.fascinated.bat.namehistory.profile.guild.NameHistoryProfile;
|
||||
import cc.fascinated.bat.reminder.ReminderProfile;
|
||||
import cc.fascinated.bat.statschannel.StatsChannelProfile;
|
||||
import cc.fascinated.bat.welcomer.WelcomerProfile;
|
||||
import cc.fascinated.bat.premium.PremiumProfile;
|
||||
import cc.fascinated.bat.service.DiscordService;
|
||||
import cc.fascinated.bat.service.MongoService;
|
||||
@ -19,9 +20,8 @@ import com.mongodb.client.model.ReplaceOptions;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.data.annotation.Id;
|
||||
|
||||
import java.util.Date;
|
||||
@ -33,8 +33,10 @@ import java.util.Map;
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Log4j2
|
||||
public class BatGuild extends ProfileHolder {
|
||||
private static final Logger log = LoggerFactory.getLogger(BatGuild.class);
|
||||
private static final String DEFAULT_PREFIX = "!";
|
||||
|
||||
/**
|
||||
* The document that belongs to this guild
|
||||
*/
|
||||
@ -47,6 +49,11 @@ public class BatGuild extends ProfileHolder {
|
||||
@Id
|
||||
private final String id;
|
||||
|
||||
/**
|
||||
* The prefix of the guild
|
||||
*/
|
||||
private final String prefix;
|
||||
|
||||
/**
|
||||
* The time this guild was joined
|
||||
*/
|
||||
@ -61,6 +68,7 @@ public class BatGuild extends ProfileHolder {
|
||||
this.id = id;
|
||||
this.document = document;
|
||||
boolean newAccount = this.document.isEmpty();
|
||||
this.prefix = newAccount ? DEFAULT_PREFIX : (String) document.getOrDefault("prefix", DEFAULT_PREFIX);
|
||||
this.createdAt = newAccount ? new Date() : document.getDate("createdAt");
|
||||
|
||||
Guild guild = DiscordService.JDA.getGuildById(id);
|
||||
@ -172,12 +180,21 @@ public class BatGuild extends ProfileHolder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the minecraft profile
|
||||
* Gets the stats channel profile
|
||||
*
|
||||
* @return the minecraft profile
|
||||
* @return the stats channel profile
|
||||
*/
|
||||
public MinecraftProfile getMinecraftProfile() {
|
||||
return getProfile(MinecraftProfile.class);
|
||||
public StatsChannelProfile getStatsChannelProfile() {
|
||||
return getProfile(StatsChannelProfile.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the punishment profile
|
||||
*
|
||||
* @return the punishment profile
|
||||
*/
|
||||
public PunishmentProfile getPunishmentProfile() {
|
||||
return getProfile(PunishmentProfile.class);
|
||||
}
|
||||
|
||||
/**
|
@ -1,11 +1,10 @@
|
||||
package cc.fascinated.bat.model;
|
||||
package cc.fascinated.bat.common.model;
|
||||
|
||||
import cc.fascinated.bat.BatApplication;
|
||||
import cc.fascinated.bat.common.ProfileHolder;
|
||||
import cc.fascinated.bat.common.Serializable;
|
||||
import cc.fascinated.bat.common.UserUtils;
|
||||
import cc.fascinated.bat.features.namehistory.profile.user.NameHistoryProfile;
|
||||
import cc.fascinated.bat.features.scoresaber.profile.user.ScoreSaberProfile;
|
||||
import cc.fascinated.bat.namehistory.profile.user.NameHistoryProfile;
|
||||
import cc.fascinated.bat.service.DiscordService;
|
||||
import cc.fascinated.bat.service.MongoService;
|
||||
import com.mongodb.client.model.ReplaceOptions;
|
||||
@ -87,15 +86,6 @@ public class BatUser extends ProfileHolder {
|
||||
return user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the user's ScoreSaber profile
|
||||
*
|
||||
* @return the user's ScoreSaber profile
|
||||
*/
|
||||
public ScoreSaberProfile getScoreSaberProfile() {
|
||||
return getProfile(ScoreSaberProfile.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the user's name history profile
|
||||
*
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model;
|
||||
package cc.fascinated.bat.common.model;
|
||||
|
||||
import cc.fascinated.bat.common.ChannelUtils;
|
||||
import cc.fascinated.bat.common.UserUtils;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.beatsaber.scoresaber;
|
||||
package cc.fascinated.bat.common.model.token.beatsaber.scoresaber;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.beatsaber.scoresaber;
|
||||
package cc.fascinated.bat.common.model.token.beatsaber.scoresaber;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.beatsaber.scoresaber;
|
||||
package cc.fascinated.bat.common.model.token.beatsaber.scoresaber;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.beatsaber.scoresaber;
|
||||
package cc.fascinated.bat.common.model.token.beatsaber.scoresaber;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.beatsaber.scoresaber;
|
||||
package cc.fascinated.bat.common.model.token.beatsaber.scoresaber;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.beatsaber.scoresaber;
|
||||
package cc.fascinated.bat.common.model.token.beatsaber.scoresaber;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.dogceo;
|
||||
package cc.fascinated.bat.common.model.token.dogceo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.paste;
|
||||
package cc.fascinated.bat.common.model.token.paste;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.randomd;
|
||||
package cc.fascinated.bat.common.model.token.randomd;
|
||||
|
||||
import lombok.Getter;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.randomfox;
|
||||
package cc.fascinated.bat.common.model.token.randomfox;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
@ -1,4 +1,4 @@
|
||||
package cc.fascinated.bat.model.token.thecatapi;
|
||||
package cc.fascinated.bat.common.model.token.thecatapi;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
@ -1,33 +0,0 @@
|
||||
package cc.fascinated.bat.controller;
|
||||
|
||||
import cc.fascinated.bat.service.SpotifyService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping(value = "/spotify")
|
||||
public class SpotifyController {
|
||||
private final SpotifyService spotifyService;
|
||||
|
||||
@Autowired
|
||||
public SpotifyController(SpotifyService spotifyService) {
|
||||
this.spotifyService = spotifyService;
|
||||
}
|
||||
|
||||
/**
|
||||
* A GET request to authorize the user with Spotify.
|
||||
*
|
||||
* @return the response entity
|
||||
*/
|
||||
@GetMapping(value = "/callback")
|
||||
public ResponseEntity<String> authorizationCallback(@RequestParam(required = false) String code) {
|
||||
return ResponseEntity.ok(spotifyService.authorize(code));
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user