14 Commits

Author SHA1 Message Date
fd2970fa59 cleanup and reformat
All checks were successful
continuous-integration/drone/push Build is passing
2025-09-05 00:06:35 +02:00
14b54501fd update drone
All checks were successful
continuous-integration/drone/push Build is passing
2025-09-04 23:42:30 +02:00
1928cfe858 update readme
All checks were successful
continuous-integration/drone/push Build is passing
2025-09-04 23:41:54 +02:00
0b7880af88 fix drone
All checks were successful
continuous-integration/drone/push Build is passing
2025-09-04 23:36:49 +02:00
f1969c2043 Update README.MD
All checks were successful
continuous-integration/drone/push Build is passing
2025-06-01 21:02:56 +02:00
acad4bad8b Merge pull request 'Update dependency org.junit.jupiter:junit-jupiter-api to v5.13.0' (#47) from renovate/org.junit.jupiter-junit-jupiter-api-5.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #47
2025-06-01 20:25:10 +02:00
4ce9acd428 Merge pull request 'Update dependency org.json:json to v20250517' (#46) from renovate/org.json-json-20250517.x into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #46
2025-06-01 20:25:04 +02:00
2ab52bd713 Merge pull request 'Update dependency com.google.protobuf:protobuf-java to v4.31.1' (#45) from renovate/com.google.protobuf-protobuf-java-4.x into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #45
2025-06-01 20:24:56 +02:00
f38e34c1ce Merge pull request 'Update dependency com.google.code.gson:gson to v2.13.1' (#43) from renovate/com.google.code.gson-gson-2.x into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #43
2025-06-01 20:24:46 +02:00
f87854459f Merge pull request 'Update dependency net.dv8tion:JDA to v5.5.1' (#42) from renovate/net.dv8tion-jda-5.x into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #42
2025-06-01 20:24:31 +02:00
72c4ae2133 Update dependency org.junit.jupiter:junit-jupiter-api to v5.13.0
All checks were successful
continuous-integration/drone/pr Build is passing
2025-05-30 11:00:27 +00:00
7f4ca6aa8e Update dependency com.google.protobuf:protobuf-java to v4.31.1
All checks were successful
continuous-integration/drone/pr Build is passing
2025-05-28 20:00:24 +00:00
c3793aa159 Update dependency org.json:json to v20250517
All checks were successful
continuous-integration/drone/pr Build is passing
2025-05-17 14:00:27 +00:00
71d646ff69 Update dependency com.google.code.gson:gson to v2.13.1
All checks were successful
continuous-integration/drone/pr Build is passing
2025-04-24 02:00:23 +00:00
85 changed files with 1340 additions and 772 deletions

View File

@@ -5,6 +5,7 @@ data:
os: linux os: linux
build_branches: build_branches:
- main - main
- develop
build_events: build_events:
- push - push
- pull_request - pull_request

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
target/ target/
.idea/ .idea/
scripts/
*.sqlite *.sqlite

View File

@@ -0,0 +1,88 @@
---
kind: pipeline
type: docker
name: build
platform:
os: {{ .input.os }}
arch: {{ .input.arch }}
trigger:
branch:
{{- range .input.build_branches }}
- {{ . }}
{{- end }}
event:
{{- range .input.build_events }}
- {{ . }}
{{- end }}
# Global project-specific environment variables
environment:
{{- range .input.envs }}
{{ .name }}: {{ .value }}
{{- end }}
steps:
# Test if it compiles correctly
- name: build
image: maven:3-eclipse-temurin-21
commands:
- mvn verify --no-transfer-progress -DskipTests=true -Dmaven.javadoc.skip=true -B -V
# Run unit tests
- name: test
image: maven:3-eclipse-temurin-21
commands:
- mvn test --no-transfer-progress -B -V
# Check maven dependencies
- name: dependency-check
image: owasp/dependency-check:latest
commands:
- dependency-check --scan /src --format ALL --out /src/target --nvdApiKey $NVD_API_KEY
environment:
NVD_API_KEY:
from_secret: nvd_api_key
# Run code analysis
- name: code-analysis
when:
event:
- push
image: maven:3-eclipse-temurin-21
commands:
- mvn sonar:sonar --no-transfer-progress -Dsonar.projectKey={{ .input.sonar_project_key }} -Dsonar.host.url=$SONAR_INSTANCE_URL -Dsonar.token=$SONAR_LOGIN_KEY -B -V
environment:
SONAR_INSTANCE_URL:
from_secret: sonar_instance_url
SONAR_LOGIN_KEY:
from_secret: sonar_login_key
---
kind: pipeline
type: kubernetes
name: deploy
trigger:
event:
- promote
target:
{{- range .input.deploy_targets }}
- {{ . }}
{{- end }}
# Global project-specific environment variables
environment:
{{- range .input.envs }}
{{ .name }}: {{ .value }}
{{- end }}
steps:
# Upload to Maven repository
- name: maven-deploy
image: maven:3-eclipse-temurin-21
commands:
- mvn deploy --no-transfer-progress -DskipTests=true -Dmaven.javadoc.skip=true -B -V -gs settings.xml -Dmaven.repo.username=$MAVEN_REPO_USERNAME -Dmaven.repo.password=$MAVEN_REPO_PASSWORD
environment:
MAVEN_REPO_USERNAME:
from_secret: maven_repo_username
MAVEN_REPO_PASSWORD:
from_secret: maven_repo_password

View File

@@ -66,7 +66,7 @@
<dependency> <dependency>
<groupId>org.json</groupId> <groupId>org.json</groupId>
<artifactId>json</artifactId> <artifactId>json</artifactId>
<version>20250107</version> <version>20250517</version>
</dependency> </dependency>
<!-- Start Random.org dependencies --> <!-- Start Random.org dependencies -->
@@ -78,7 +78,7 @@
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<version>2.13.0</version> <version>2.13.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-codec</groupId> <groupId>commons-codec</groupId>
@@ -91,7 +91,7 @@
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId> <artifactId>junit-jupiter-api</artifactId>
<version>5.12.2</version> <version>5.13.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
@@ -102,7 +102,7 @@
<dependency> <dependency>
<groupId>com.google.protobuf</groupId> <groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId> <artifactId>protobuf-java</artifactId>
<version>4.30.2</version> <version>4.31.1</version>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>

View File

@@ -22,7 +22,8 @@ import java.util.concurrent.ScheduledExecutorService;
public class Cache public class Cache
{ {
private Cache() { private Cache()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -78,7 +79,10 @@ public class Cache
* *
* @return array of supported resolutions. * @return array of supported resolutions.
*/ */
public static int[] getSupportedAvatarResolutions() { return supportedAvatarResolutions; } public static int[] getSupportedAvatarResolutions()
{
return supportedAvatarResolutions;
}
/** /**
@@ -86,7 +90,10 @@ public class Cache
* *
* @return a boolean which is true if the bot is in verbose-mode * @return a boolean which is true if the bot is in verbose-mode
*/ */
public static synchronized boolean isVerbose() { return verbose; } public static synchronized boolean isVerbose()
{
return verbose;
}
/** /**
* Set the bot's verbosity status at runtime. * Set the bot's verbosity status at runtime.
@@ -116,7 +123,8 @@ public class Cache
* *
* @return a long of the account's id * @return a long of the account's id
*/ */
public static long getBotOwnerId() { public static long getBotOwnerId()
{
return configurationSource == null ? 0L : (Long) configurationSource.getConfigValue(ConfigurationEntry.BOT_OWNER_ID); return configurationSource == null ? 0L : (Long) configurationSource.getConfigValue(ConfigurationEntry.BOT_OWNER_ID);
} }
@@ -126,7 +134,8 @@ public class Cache
* *
* @return a String of the bot's token. * @return a String of the bot's token.
*/ */
public static String getBotToken() { public static String getBotToken()
{
return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.BOT_TOKEN); return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.BOT_TOKEN);
} }
@@ -137,7 +146,10 @@ public class Cache
* @return a long of the account's id * @return a long of the account's id
*/ */
public static long getBotMaintainerId() { return BOT_MAINTAINER_ID; } public static long getBotMaintainerId()
{
return BOT_MAINTAINER_ID;
}
/** /**
* Set the bot's application id. * Set the bot's application id.
@@ -154,14 +166,18 @@ public class Cache
* *
* @return a string of the bot's application id * @return a string of the bot's application id
*/ */
public static String getBotApplicationId() { return botApplicationId; } public static String getBotApplicationId()
{
return botApplicationId;
}
/** /**
* Function to generate an invite link for the bot * Function to generate an invite link for the bot
* *
* @return a string containing the invite link * @return a string containing the invite link
*/ */
public static String getInviteUrl() { public static String getInviteUrl()
{
return DEFAULT_INVITE_LINK.replace("%userid%", botApplicationId); return DEFAULT_INVITE_LINK.replace("%userid%", botApplicationId);
} }
@@ -180,7 +196,10 @@ public class Cache
* *
* @return the DatabaseSource instance. * @return the DatabaseSource instance.
*/ */
public static @Nullable DatabaseSource getDatabaseSource() { return databaseSource; } public static @Nullable DatabaseSource getDatabaseSource()
{
return databaseSource;
}
/** /**
* Set the properties source instance loaded from the JAR archive. * Set the properties source instance loaded from the JAR archive.
@@ -197,24 +216,34 @@ public class Cache
* *
* @return the String of the DateTimeFormatter format. * @return the String of the DateTimeFormatter format.
*/ */
public static String getExpiryTimestampFormat(){ return EXPIRY_TIMESTAMP_FORMAT; } public static String getExpiryTimestampFormat()
{
return EXPIRY_TIMESTAMP_FORMAT;
}
/** /**
* Get the amount of seconds after which a message expires. * Get the amount of seconds after which a message expires.
* *
* @return long value of the expiry seconds. * @return long value of the expiry seconds.
*/ */
public static long getExpiryTimeSeconds() { return EXPIRY_TIME_SECONDS; } public static long getExpiryTimeSeconds()
{
return EXPIRY_TIME_SECONDS;
}
public static String getBotName() { return BOT_NAME; } public static String getBotName()
{
return BOT_NAME;
}
/** /**
* Get the bot's version. * Get the bot's version.
* *
* @return a String of the bot version. * @return a String of the bot version.
*/ */
public static String getBotVersion() { public static String getBotVersion()
{
return propertiesSource.getProperty("bot.version"); return propertiesSource.getProperty("bot.version");
} }
@@ -223,7 +252,8 @@ public class Cache
* *
* @return a String containing the base URL of the repository, including a <b>trailing slash</b>. * @return a String containing the base URL of the repository, including a <b>trailing slash</b>.
*/ */
public static String getRepositoryUrl() { public static String getRepositoryUrl()
{
String url = propertiesSource.getProperty("repo.base_url"); String url = propertiesSource.getProperty("repo.base_url");
return url.endsWith("/") ? url : url + "/"; return url.endsWith("/") ? url : url + "/";
} }
@@ -233,16 +263,19 @@ public class Cache
* *
* @return the Color object. * @return the Color object.
*/ */
public static Color getBotColor() { public static Color getBotColor()
{
Color defaultColor = Color.PINK; Color defaultColor = Color.PINK;
if (configurationSource == null) return defaultColor; if (configurationSource == null) return defaultColor;
String colorName = (String) configurationSource.getConfigValue(ConfigurationEntry.BOT_COLOR); String colorName = (String) configurationSource.getConfigValue(ConfigurationEntry.BOT_COLOR);
Color color = null; Color color = null;
try { try
{
Field field = Color.class.getField(colorName); Field field = Color.class.getField(colorName);
color = (Color) field.get(null); color = (Color) field.get(null);
} catch (RuntimeException | NoSuchFieldException | IllegalAccessException e) { } catch (RuntimeException | NoSuchFieldException | IllegalAccessException e)
{
LOGGER.error("Unknown color: {}", colorName); LOGGER.error("Unknown color: {}", colorName);
} }
return color == null ? defaultColor : color; return color == null ? defaultColor : color;
@@ -251,21 +284,36 @@ public class Cache
//todo javadocs //todo javadocs
public static void setSlashCommandListener(SlashCommandListener commandListener) public static void setSlashCommandListener(SlashCommandListener commandListener)
{ slashCommandListener = commandListener; } {
slashCommandListener = commandListener;
}
public static SlashCommandListener getSlashCommandListener() { return slashCommandListener; } public static SlashCommandListener getSlashCommandListener()
{
return slashCommandListener;
}
public static void setSlashCommandCompletionListener(SlashCommandCompletionListener commandCompletionListener) public static void setSlashCommandCompletionListener(SlashCommandCompletionListener commandCompletionListener)
{ slashCommandCompletionListener = commandCompletionListener; } {
slashCommandCompletionListener = commandCompletionListener;
}
public static SlashCommandCompletionListener getSlashCommandCompletionListener() { return slashCommandCompletionListener; } public static SlashCommandCompletionListener getSlashCommandCompletionListener()
{
return slashCommandCompletionListener;
}
public static void setMessageCommandListener(MessageCommandListener commandListener) public static void setMessageCommandListener(MessageCommandListener commandListener)
{ messageCommandListener = commandListener; } {
messageCommandListener = commandListener;
}
public static MessageCommandListener getMessageCommandListener() { return messageCommandListener; } public static MessageCommandListener getMessageCommandListener()
{
return messageCommandListener;
}
/** /**
* Set the bot's startup time. Generally only used at boot time. * Set the bot's startup time. Generally only used at boot time.
@@ -273,7 +321,9 @@ public class Cache
* @param time a LocalDateTime of the startup moment. * @param time a LocalDateTime of the startup moment.
*/ */
public static void setStartupTime(LocalDateTime time) public static void setStartupTime(LocalDateTime time)
{ startupTime = time; } {
startupTime = time;
}
/** /**
@@ -281,37 +331,54 @@ public class Cache
* *
* @return a LocalDateTime object of the startup instant. * @return a LocalDateTime object of the startup instant.
*/ */
public static LocalDateTime getStartupTime() { return startupTime; } public static LocalDateTime getStartupTime()
{
return startupTime;
}
/** /**
* Get the time of when the bot was created. * Get the time of when the bot was created.
* *
* @return a LocalDateTime object of the first commit's instant. * @return a LocalDateTime object of the first commit's instant.
*/ */
public static LocalDateTime getBotBirthDate() { return botBirthDate; } public static LocalDateTime getBotBirthDate()
{
return botBirthDate;
}
public static String getFullHeartBeatLink() { public static String getFullHeartBeatLink()
{
return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.HEARTBEAT_LINK); return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.HEARTBEAT_LINK);
} }
//todo javadocs //todo javadocs
public static String getExecPath() { return EXEC_PATH; } public static String getExecPath()
{
return EXEC_PATH;
}
/*private static ConfigurationSource getConfigurationSource() /*private static ConfigurationSource getConfigurationSource()
{ return configurationSource; }*/ { return configurationSource; }*/
public static String getRandomOrgApiKey() { public static String getRandomOrgApiKey()
{
return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.RANDOM_ORG_API_KEY); return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.RANDOM_ORG_API_KEY);
} }
public static void setConfigurationSource(ConfigurationSource configurationSource) public static void setConfigurationSource(ConfigurationSource configurationSource)
{ Cache.configurationSource = configurationSource; } {
Cache.configurationSource = configurationSource;
}
/** /**
* Get the bot's prefix * Get the bot's prefix
* *
* @return a String of the bot's prefix. * @return a String of the bot's prefix.
*/ */
public static String getBotPrefix() { return BOT_PREFIX; } public static String getBotPrefix()
{
return BOT_PREFIX;
}
public static void cacheLoveCalculatorValue(String userId1, String userId2, int value) public static void cacheLoveCalculatorValue(String userId1, String userId2, int value)
{ {
@@ -336,7 +403,8 @@ public class Cache
loveCalculatorValues.remove(userId2 + "|" + userId1); loveCalculatorValues.remove(userId2 + "|" + userId1);
} }
public static ScheduledExecutorService getTaskScheduler() { public static ScheduledExecutorService getTaskScheduler()
{
return taskScheduler; return taskScheduler;
} }

View File

@@ -76,12 +76,12 @@ public class HidekoBot
); );
jda = jdaBuilder.build().awaitReady(); jda = jdaBuilder.build().awaitReady();
} catch (InterruptedException e) { } catch (InterruptedException e)
{
LOGGER.error(e.getMessage()); // print the error message, omit the stack trace. LOGGER.error(e.getMessage()); // print the error message, omit the stack trace.
Thread.currentThread().interrupt(); // send interrupt to the thread. Thread.currentThread().interrupt(); // send interrupt to the thread.
shutdown(); // if we failed connecting and authenticating, then quit. shutdown(); // if we failed connecting and authenticating, then quit.
} } catch (Exception e)
catch (Exception e)
{ {
LOGGER.error(e.getMessage()); // print the error message, omit the stack trace. LOGGER.error(e.getMessage()); // print the error message, omit the stack trace.
shutdown(); // if we failed connecting and authenticating, then quit. shutdown(); // if we failed connecting and authenticating, then quit.
@@ -96,7 +96,8 @@ public class HidekoBot
// if there is at least one arg, then iterate through them because we have additional things to do. // if there is at least one arg, then iterate through them because we have additional things to do.
// we are doing this at the end because we might need the API to be already initialized for some things. // we are doing this at the end because we might need the API to be already initialized for some things.
if(args.length > 0) { if (args.length > 0)
{
List<String> argsList = new ArrayList<>(Arrays.asList(args)); List<String> argsList = new ArrayList<>(Arrays.asList(args));
@@ -187,7 +188,8 @@ public class HidekoBot
// update slash commands (delayed) // update slash commands (delayed)
final boolean finalForceUpdateCommands = forceUpdateCommands; final boolean finalForceUpdateCommands = forceUpdateCommands;
try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) { try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor())
{
executor.schedule(() -> CommandUtil.updateSlashCommands(finalForceUpdateCommands), executor.schedule(() -> CommandUtil.updateSlashCommands(finalForceUpdateCommands),
1, TimeUnit.SECONDS); 1, TimeUnit.SECONDS);
} }
@@ -207,7 +209,8 @@ public class HidekoBot
// load data here... // load data here...
LOGGER.info("Database data loaded into memory!"); LOGGER.info("Database data loaded into memory!");
} else { } else
{
LOGGER.error("Error initializing database connection!"); LOGGER.error("Error initializing database connection!");
} }
@@ -240,6 +243,7 @@ public class HidekoBot
LOGGER.info("Invite Link: {}", Cache.getInviteUrl()); LOGGER.info("Invite Link: {}", Cache.getInviteUrl());
} }
public static JDA getAPI() public static JDA getAPI()
{ {
return jda; return jda;

View File

@@ -6,7 +6,8 @@ import java.util.LinkedList;
public class Alias public class Alias
{ {
private Alias() { private Alias()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }

View File

@@ -13,7 +13,8 @@ import java.util.List;
public class BotInfo public class BotInfo
{ {
private BotInfo() { private BotInfo()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -57,7 +58,8 @@ public class BotInfo
String messageCommandsInfo; String messageCommandsInfo;
if (Cache.getMessageCommandListener() == null) if (Cache.getMessageCommandListener() == null)
messageCommandsInfo = "❌ disabled"; messageCommandsInfo = "❌ disabled";
else { else
{
messageCommandsInfo = "✅ available"; messageCommandsInfo = "✅ available";
commandsCount += Cache.getMessageCommandListener().getRegisteredCommands().size(); commandsCount += Cache.getMessageCommandListener().getRegisteredCommands().size();
} }
@@ -67,7 +69,8 @@ public class BotInfo
String slashCommandsInfo; String slashCommandsInfo;
if (Cache.getMessageCommandListener() == null) if (Cache.getMessageCommandListener() == null)
slashCommandsInfo = "❌ disabled"; slashCommandsInfo = "❌ disabled";
else { else
{
slashCommandsInfo = "✅ available"; slashCommandsInfo = "✅ available";
commandsCount += Cache.getSlashCommandListener().getRegisteredCommands().size(); commandsCount += Cache.getSlashCommandListener().getRegisteredCommands().size();
} }
@@ -78,7 +81,8 @@ public class BotInfo
if (RandomUtil.isRandomOrgKeyValid()) if (RandomUtil.isRandomOrgKeyValid())
{ {
randomOrgInfo = "✅ connected"; randomOrgInfo = "✅ connected";
} else { } else
{
randomOrgInfo = "❌ disabled"; randomOrgInfo = "❌ disabled";
} }
embedBuilder.addField("Random.org", randomOrgInfo, true); embedBuilder.addField("Random.org", randomOrgInfo, true);

View File

@@ -14,26 +14,32 @@ import java.util.List;
public class ClearChat public class ClearChat
{ {
private ClearChat() { private ClearChat()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
public static String getLabel() { public static String getLabel()
{
return "clear"; return "clear";
} }
public static String getDescription() { public static String getDescription()
{
return "Clear the current channel's chat."; return "Clear the current channel's chat.";
} }
public static Permission getPermission() { public static Permission getPermission()
{
return Permission.MESSAGE_MANAGE; return Permission.MESSAGE_MANAGE;
} }
public static String checkDMs(Channel channel) public static String checkDMs(Channel channel)
{ {
if (!(channel instanceof TextChannel)) if (!(channel instanceof TextChannel))
{ return "\uD83D\uDE22 Sorry! I can't delete messages here."; } {
return "\uD83D\uDE22 Sorry! I can't delete messages here.";
}
return null; return null;
} }
@@ -41,7 +47,9 @@ public class ClearChat
public static String checkDeleteAmount(int toDeleteAmount) public static String checkDeleteAmount(int toDeleteAmount)
{ {
if (toDeleteAmount <= 0) if (toDeleteAmount <= 0)
{ return "\uD83D\uDE22 Sorry, I can't delete that amount of messages!"; } {
return "\uD83D\uDE22 Sorry, I can't delete that amount of messages!";
}
return null; return null;
} }
@@ -82,7 +90,8 @@ public class ClearChat
int iterationSize = limit; int iterationSize = limit;
// if we are at the last iteration... check if we have <limit> or fewer messages to delete // if we are at the last iteration... check if we have <limit> or fewer messages to delete
if(iteration+1 == iterations && remainder != 0) { if (iteration + 1 == iterations && remainder != 0)
{
iterationSize = remainder; iterationSize = remainder;
} }
@@ -95,7 +104,8 @@ public class ClearChat
else outOfBounds = true; else outOfBounds = true;
// increase deleted counter by 1 // increase deleted counter by 1
deleted++; deleted++;
} else { } else
{
// get the last <iterationSize - 1> messages. // get the last <iterationSize - 1> messages.
MessageHistory.MessageRetrieveAction action = channel.getHistoryBefore(messageId, iterationSize - 1); MessageHistory.MessageRetrieveAction action = channel.getHistoryBefore(messageId, iterationSize - 1);
// note: first one is the most recent, last one is the oldest message. // note: first one is the most recent, last one is the oldest message.
@@ -108,7 +118,8 @@ public class ClearChat
if (messages.size() <= 1) if (messages.size() <= 1)
{ {
outOfBounds = true; outOfBounds = true;
} else { } else
{
// before deleting, we need to grab the <previous to the oldest> message's id for next iteration. // before deleting, we need to grab the <previous to the oldest> message's id for next iteration.
action = channel.getHistoryBefore(messages.getLast().getIdLong(), 1); action = channel.getHistoryBefore(messages.getLast().getIdLong(), 1);
@@ -123,10 +134,10 @@ public class ClearChat
if (messages.size() == 1) if (messages.size() == 1)
{ {
messages.getFirst().delete().queue(); messages.getFirst().delete().queue();
} } else if (!messages.isEmpty())
else if(!messages.isEmpty()) {
try
{ {
try {
((TextChannel) channel).deleteMessages(messages).complete(); ((TextChannel) channel).deleteMessages(messages).complete();
/* alternatively, we could use purgeMessages, which is smarter... /* alternatively, we could use purgeMessages, which is smarter...
however, it also tries to delete messages older than 2 weeks however, it also tries to delete messages older than 2 weeks
@@ -162,12 +173,16 @@ public class ClearChat
} else if (deleted == 1) } else if (deleted == 1)
{ {
return "✂ Cleared 1 message!"; return "✂ Cleared 1 message!";
} else { } else
{
return "✂ Cleared " + deleted + " messages!"; return "✂ Cleared " + deleted + " messages!";
} }
} }
// cap the amount to avoid abuse. // cap the amount to avoid abuse.
public static int getMaxAmount() { return 1000; } public static int getMaxAmount()
{
return 1000;
}
} }

View File

@@ -14,11 +14,13 @@ import java.util.List;
public class CoinFlip public class CoinFlip
{ {
private CoinFlip() { private CoinFlip()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
public static Button getReflipButton() { public static Button getReflipButton()
{
return Button.primary("coinflip_reflip", "Flip again") return Button.primary("coinflip_reflip", "Flip again")
.withEmoji(Emoji.fromUnicode("\uD83E\uDE99")); .withEmoji(Emoji.fromUnicode("\uD83E\uDE99"));
} }
@@ -31,7 +33,8 @@ public class CoinFlip
if (rand == 1) if (rand == 1)
{ {
msg = ":coin: It's **Heads**!"; msg = ":coin: It's **Heads**!";
} else { } else
{
msg = "It's **Tails**! :coin:"; msg = "It's **Tails**! :coin:";
} }
@@ -59,7 +62,8 @@ public class CoinFlip
{ {
// set the command as expiring and restrict it to the user who ran it // set the command as expiring and restrict it to the user who ran it
trackAndRestrict(message, event.getUser()); trackAndRestrict(message, event.getUser());
}, (error) -> {}); }, (error) -> {
});
} }
public static void trackAndRestrict(Message replyMessage, User user) public static void trackAndRestrict(Message replyMessage, User user)

View File

@@ -15,7 +15,8 @@ import java.util.UUID;
public class DiceRoll public class DiceRoll
{ {
private DiceRoll() { private DiceRoll()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -44,7 +45,8 @@ public class DiceRoll
if (currentDice == null) if (currentDice == null)
{ {
currentDice = new Dice(6); currentDice = new Dice(6);
} else { } else
{
currentDice = new Dice(currentDice); currentDice = new Dice(currentDice);
} }
@@ -56,8 +58,7 @@ public class DiceRoll
lastPushedDice = currentDice.getUUID(); lastPushedDice = currentDice.getUUID();
dicesToRoll.put(currentDice, currentAmount); dicesToRoll.put(currentDice, currentAmount);
totalRolls += currentAmount; totalRolls += currentAmount;
} } else if (arg.matches(diceRegex))
else if(arg.matches(diceRegex))
{ {
int sides = Integer.parseInt(arg.substring(1)); int sides = Integer.parseInt(arg.substring(1));
@@ -138,13 +139,16 @@ public class DiceRoll
int total = 0; int total = 0;
int previousDiceSides = 0; int previousDiceSides = 0;
for (Dice dice : rolledDices) { for (Dice dice : rolledDices)
{
int diceSize = dice.getSides(); int diceSize = dice.getSides();
if (previousDiceSides != diceSize) { if (previousDiceSides != diceSize)
{
message.append("\nd").append(diceSize).append(": "); message.append("\nd").append(diceSize).append(": ");
previousDiceSides = diceSize; previousDiceSides = diceSize;
} else if (previousDiceSides != 0) { } else if (previousDiceSides != 0)
{
message.append(", "); message.append(", ");
} }

View File

@@ -10,7 +10,8 @@ import wtf.beatrice.hidekobot.HidekoBot;
public class Invite public class Invite
{ {
private Invite() { private Invite()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }

View File

@@ -11,7 +11,8 @@ import java.util.concurrent.TimeUnit;
public class LoveCalculator public class LoveCalculator
{ {
private LoveCalculator() { private LoveCalculator()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }

View File

@@ -14,7 +14,8 @@ import java.util.List;
public class MagicBall public class MagicBall
{ {
private MagicBall() { private MagicBall()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }

View File

@@ -9,7 +9,8 @@ import wtf.beatrice.hidekobot.objects.MessageResponse;
public class ProfileImage public class ProfileImage
{ {
private ProfileImage() { private ProfileImage()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -20,9 +21,11 @@ public class ProfileImage
// method to find closest value to accepted values // method to find closest value to accepted values
int distance = Math.abs(acceptedSizes[0] - resolution); int distance = Math.abs(acceptedSizes[0] - resolution);
int idx = 0; int idx = 0;
for(int c = 1; c < acceptedSizes.length; c++){ for (int c = 1; c < acceptedSizes.length; c++)
{
int cdistance = Math.abs(acceptedSizes[c] - resolution); int cdistance = Math.abs(acceptedSizes[c] - resolution);
if(cdistance < distance){ if (cdistance < distance)
{
idx = c; idx = c;
distance = cdistance; distance = cdistance;
} }
@@ -44,7 +47,8 @@ public class ProfileImage
{ {
resolutionString = resolution + " × " + resolution; resolutionString = resolution + " × " + resolution;
imageLink = user.getEffectiveAvatar().getUrl(resolution); imageLink = user.getEffectiveAvatar().getUrl(resolution);
} else { } else
{
int verticalRes = 361 * resolution / 1024; int verticalRes = 361 * resolution / 1024;
resolutionString = resolution + " × " + verticalRes; resolutionString = resolution + " × " + verticalRes;
if (bannerProxy != null) if (bannerProxy != null)
@@ -72,7 +76,8 @@ public class ProfileImage
if (imageType == ImageType.AVATAR) if (imageType == ImageType.AVATAR)
{ {
currLink = user.getEffectiveAvatar().getUrl(currSize); currLink = user.getEffectiveAvatar().getUrl(currSize);
} else { } else
{
if (bannerProxy == null) break; if (bannerProxy == null) break;
currLink = bannerProxy.getUrl(currSize); currLink = bannerProxy.getUrl(currSize);
} }
@@ -87,15 +92,16 @@ public class ProfileImage
embedBuilder.addField("Available resolutions", links.toString(), false); embedBuilder.addField("Available resolutions", links.toString(), false);
if (imageLink != null) if (imageLink != null)
embedBuilder.setImage(imageLink); embedBuilder.setImage(imageLink);
if(imageLink == null) { if (imageLink == null)
{
String error = "I couldn't find " + user.getAsMention() + "'s " + imageTypeName + "!"; String error = "I couldn't find " + user.getAsMention() + "'s " + imageTypeName + "!";
return new MessageResponse(error, null); return new MessageResponse(error, null);
} else { } else
{
return new MessageResponse(null, embedBuilder.build()); return new MessageResponse(null, embedBuilder.build());
} }
} }

View File

@@ -5,11 +5,13 @@ import net.dv8tion.jda.api.Permission;
public class Say public class Say
{ {
private Say() { private Say()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
public static Permission getPermission() { public static Permission getPermission()
{
return Permission.MESSAGE_MANAGE; return Permission.MESSAGE_MANAGE;
} }
} }

View File

@@ -36,7 +36,8 @@ import java.util.concurrent.TimeUnit;
public class Trivia public class Trivia
{ {
private Trivia() { private Trivia()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -52,14 +53,23 @@ public class Trivia
// first string is the channelId, the list contain all score records for that channel // first string is the channelId, the list contain all score records for that channel
public static HashMap<String, LinkedList<TriviaScore>> channelAndScores = new HashMap<>(); public static HashMap<String, LinkedList<TriviaScore>> channelAndScores = new HashMap<>();
public static String getTriviaLink(int categoryId) {return TRIVIA_API_LINK + categoryId; } public static String getTriviaLink(int categoryId)
public static String getCategoriesLink() {return TRIVIA_API_CATEGORIES_LINK; } {
return TRIVIA_API_LINK + categoryId;
}
public static String getNoDMsError() { public static String getCategoriesLink()
{
return TRIVIA_API_CATEGORIES_LINK;
}
public static String getNoDMsError()
{
return "\uD83D\uDE22 Sorry! Trivia doesn't work in DMs."; return "\uD83D\uDE22 Sorry! Trivia doesn't work in DMs.";
} }
public static String getTriviaAlreadyRunningError() { public static String getTriviaAlreadyRunningError()
{
// todo nicer looking // todo nicer looking
return "Trivia is already running here!"; return "Trivia is already running here!";
} }
@@ -102,7 +112,8 @@ public class Trivia
public static JSONObject fetchJson(String link) public static JSONObject fetchJson(String link)
{ {
try { try
{
URL url = new URL(link); URL url = new URL(link);
URLConnection connection = url.openConnection(); URLConnection connection = url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
@@ -115,7 +126,8 @@ public class Trivia
} }
bufferedReader.close(); bufferedReader.close();
return new JSONObject(jsonStrBuilder.toString()); return new JSONObject(jsonStrBuilder.toString());
} catch (IOException e) { } catch (IOException e)
{
LOGGER.error("JSON Parsing Exception", e); LOGGER.error("JSON Parsing Exception", e);
} }
@@ -198,14 +210,16 @@ public class Trivia
event.reply(user.getAsMention() + " got it right! \uD83E\uDD73 (**+3**)").queue(); event.reply(user.getAsMention() + " got it right! \uD83E\uDD73 (**+3**)").queue();
currentUserScore.changeScore(3); currentUserScore.changeScore(3);
} else { } else
{
event.reply("" + user.getAsMention() + ", that's not the right answer! (**-1**)").queue(); event.reply("" + user.getAsMention() + ", that's not the right answer! (**-1**)").queue();
currentUserScore.changeScore(-1); currentUserScore.changeScore(-1);
} }
scores.add(currentUserScore); scores.add(currentUserScore);
channelAndScores.put(channelId, scores); channelAndScores.put(channelId, scores);
} else { } else
{
event.reply("☹️ " + user.getAsMention() + ", you can't answer twice!") event.reply("☹️ " + user.getAsMention() + ", you can't answer twice!")
.queue(interaction -> .queue(interaction ->
Cache.getTaskScheduler().schedule(() -> Cache.getTaskScheduler().schedule(() ->
@@ -230,7 +244,8 @@ public class Trivia
responders.add(userId); responders.add(userId);
channelAndWhoResponded.put(channelId, responders); channelAndWhoResponded.put(channelId, responders);
return true; // response was successfully tracked return true; // response was successfully tracked
} else { } else
{
return false; // response wasn't tracked because there already was an entry return false; // response wasn't tracked because there already was an entry
} }
} }
@@ -271,7 +286,8 @@ public class Trivia
Message err = event.reply("Trivia is already running here!").complete().retrieveOriginal().complete(); Message err = event.reply("Trivia is already running here!").complete().retrieveOriginal().complete();
Cache.getTaskScheduler().schedule(() -> err.delete().queue(), 10, TimeUnit.SECONDS); Cache.getTaskScheduler().schedule(() -> err.delete().queue(), 10, TimeUnit.SECONDS);
return; return;
} else { } else
{
// todo nicer looking // todo nicer looking
event.reply("Starting new Trivia session!").queue(); event.reply("Starting new Trivia session!").queue();
} }
@@ -288,7 +304,8 @@ public class Trivia
Trivia.channelsRunningTrivia.add(channel.getId()); Trivia.channelsRunningTrivia.add(channel.getId());
} }
public enum AnswerType { public enum AnswerType
{
CORRECT, WRONG CORRECT, WRONG
} }

View File

@@ -25,15 +25,19 @@ import java.util.List;
public class UrbanDictionary public class UrbanDictionary
{ {
private UrbanDictionary() { private UrbanDictionary()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
public static LinkedList<String> getCommandLabels() public static LinkedList<String> getCommandLabels()
{ return new LinkedList<>(Arrays.asList("urban", "urbandictionary", "ud")); } {
return new LinkedList<>(Arrays.asList("urban", "urbandictionary", "ud"));
}
public static String getBaseUrl() { public static String getBaseUrl()
{
return "https://www.urbandictionary.com/define.php?term="; return "https://www.urbandictionary.com/define.php?term=";
} }
@@ -55,7 +59,8 @@ public class UrbanDictionary
.withEmoji(Emoji.fromFormatted("\uD83D\uDDD1")); .withEmoji(Emoji.fromFormatted("\uD83D\uDDD1"));
} }
public static String getNoArgsError() { public static String getNoArgsError()
{
return "\uD83D\uDE22 I need to know what to search for!"; return "\uD83D\uDE22 I need to know what to search for!";
} }
@@ -118,7 +123,8 @@ public class UrbanDictionary
DatabaseSource database = Cache.getDatabaseSource(); DatabaseSource database = Cache.getDatabaseSource();
// check if the user interacting is the same one who ran the command // check if the user interacting is the same one who ran the command
if (!(database.isUserTrackedFor(event.getUser().getId(), messageId))) { if (!(database.isUserTrackedFor(event.getUser().getId(), messageId)))
{
event.reply("❌ You did not run this command!").setEphemeral(true).queue(); event.reply("❌ You did not run this command!").setEphemeral(true).queue();
return; return;
} }
@@ -156,14 +162,16 @@ public class UrbanDictionary
if (page > 0) if (page > 0)
{ {
components.add(UrbanDictionary.getPreviousPageButton().asEnabled()); components.add(UrbanDictionary.getPreviousPageButton().asEnabled());
} else { } else
{
components.add(UrbanDictionary.getPreviousPageButton().asDisabled()); components.add(UrbanDictionary.getPreviousPageButton().asDisabled());
} }
if (page + 1 == search.getPages()) if (page + 1 == search.getPages())
{ {
components.add(UrbanDictionary.getNextPageButton().asDisabled()); components.add(UrbanDictionary.getNextPageButton().asDisabled());
} else { } else
{
components.add(UrbanDictionary.getNextPageButton().asEnabled()); components.add(UrbanDictionary.getNextPageButton().asEnabled());
} }
@@ -282,39 +290,48 @@ public class UrbanDictionary
pages = submissionDates.size(); pages = submissionDates.size();
} }
public List<String> getPlaintextMeanings() { public List<String> getPlaintextMeanings()
{
return this.plaintextMeanings; return this.plaintextMeanings;
} }
public List<String> getPlaintextExamples() { public List<String> getPlaintextExamples()
{
return this.plaintextExamples; return this.plaintextExamples;
} }
public List<String> getContributorsNames() { public List<String> getContributorsNames()
{
return this.contributorsNames; return this.contributorsNames;
} }
public List<String> getSubmissionDates() { public List<String> getSubmissionDates()
{
return this.submissionDates; return this.submissionDates;
} }
public String getSerializedMeanings() { public String getSerializedMeanings()
{
return serializedMeanings; return serializedMeanings;
} }
public String getSerializedExamples() { public String getSerializedExamples()
{
return serializedExamples; return serializedExamples;
} }
public String getSerializedContributors() { public String getSerializedContributors()
{
return serializedContributors; return serializedContributors;
} }
public String getSerializedDates() { public String getSerializedDates()
{
return serializedDates; return serializedDates;
} }
public int getPages() { public int getPages()
{
return pages; return pages;
} }
} }

View File

@@ -27,7 +27,8 @@ import java.util.concurrent.TimeUnit;
public class UserPunishment public class UserPunishment
{ {
private UserPunishment() { private UserPunishment()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -132,7 +133,8 @@ public class UserPunishment
String mentionedId = mentions.get(0).getId(); String mentionedId = mentions.get(0).getId();
User mentioned = null; User mentioned = null;
try { try
{
mentioned = HidekoBot.getAPI().retrieveUserById(mentionedId).complete(); mentioned = HidekoBot.getAPI().retrieveUserById(mentionedId).complete();
} catch (RuntimeException ignored) } catch (RuntimeException ignored)
{ {
@@ -172,11 +174,14 @@ public class UserPunishment
AuditableRestAction<Void> punishmentAction = null; AuditableRestAction<Void> punishmentAction = null;
boolean impossible = false; boolean impossible = false;
try { try
switch (punishmentType) { {
switch (punishmentType)
{
case BAN -> punishmentAction = guild.ban(mentioned, 0, TimeUnit.SECONDS); case BAN -> punishmentAction = guild.ban(mentioned, 0, TimeUnit.SECONDS);
case KICK -> punishmentAction = guild.kick(mentioned); case KICK -> punishmentAction = guild.kick(mentioned);
case TIMEOUT -> { case TIMEOUT ->
{
if (args != null) if (args != null)
{ {
String durationStr = args[1]; String durationStr = args[1];
@@ -201,7 +206,8 @@ public class UserPunishment
punishmentAction = guild.timeoutFor(mentioned, duration); punishmentAction = guild.timeoutFor(mentioned, duration);
} }
} }
} catch (RuntimeException ignored) { } catch (RuntimeException ignored)
{
impossible = true; impossible = true;
} }
@@ -218,7 +224,8 @@ public class UserPunishment
if (!reason.isEmpty() && !reasonBuilder.isEmpty()) if (!reason.isEmpty() && !reasonBuilder.isEmpty())
punishmentAction.reason("[" + author.getAsTag() + "] " + reason); punishmentAction.reason("[" + author.getAsTag() + "] " + reason);
try { try
{
punishmentAction.complete(); punishmentAction.complete();
} catch (RuntimeException ignored) } catch (RuntimeException ignored)
{ {
@@ -248,7 +255,8 @@ public class UserPunishment
} }
public enum PunishmentType { public enum PunishmentType
{
KICK("kicked"), KICK("kicked"),
BAN("banned"), BAN("banned"),
TIMEOUT("timed out"), TIMEOUT("timed out"),

View File

@@ -13,12 +13,14 @@ import java.util.List;
public class ProfileImageCommandCompleter extends SlashArgumentsCompleterImpl public class ProfileImageCommandCompleter extends SlashArgumentsCompleterImpl
{ {
public ProfileImageCommandCompleter(SlashCommand parentCommand) { public ProfileImageCommandCompleter(SlashCommand parentCommand)
{
super(parentCommand); super(parentCommand);
} }
@Override @Override
public void runCompletion(@NotNull CommandAutoCompleteInteractionEvent event) { public void runCompletion(@NotNull CommandAutoCompleteInteractionEvent event)
{
if (event.getFocusedOption().getName().equals("size")) if (event.getFocusedOption().getName().equals("size"))
{ {

View File

@@ -17,36 +17,42 @@ public class AliasCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Arrays.asList("alias", "aliases")); return new LinkedList<>(Arrays.asList("alias", "aliases"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; // anyone can use it return null; // anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.TOOLS; return CommandCategory.TOOLS;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "See other command aliases."; return "See other command aliases.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<command>"; return "<command>";
} }

View File

@@ -20,36 +20,42 @@ public class AvatarCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("avatar")); return new LinkedList<>(Collections.singletonList("avatar"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; // anyone can use it return null; // anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Get someone's avatar, or your own. You can additionally specify a resolution."; return "Get someone's avatar, or your own. You can additionally specify a resolution.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "[mentioned user] [resolution]"; return "[mentioned user] [resolution]";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.TOOLS; return CommandCategory.TOOLS;
} }
@@ -63,13 +69,16 @@ public class AvatarCommand implements MessageCommand
// (mentions are handled differently by a specific method) // (mentions are handled differently by a specific method)
boolean resFound = false; boolean resFound = false;
for (String arg : args) { for (String arg : args)
try { {
try
{
int givenRes = Integer.parseInt(arg); int givenRes = Integer.parseInt(arg);
resolution = ProfileImage.parseResolution(givenRes); resolution = ProfileImage.parseResolution(givenRes);
resFound = true; resFound = true;
break; break;
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored)
{
// ignored because we're running a check after this block // ignored because we're running a check after this block
} }
} }

View File

@@ -17,36 +17,42 @@ public class BanCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("ban")); return new LinkedList<>(Collections.singletonList("ban"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return new ArrayList<Permission>(Collections.singletonList(Permission.BAN_MEMBERS)); return new ArrayList<Permission>(Collections.singletonList(Permission.BAN_MEMBERS));
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.MODERATION; return CommandCategory.MODERATION;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Ban the mentioned user."; return "Ban the mentioned user.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<mentioned user> [reason]"; return "<mentioned user> [reason]";
} }

View File

@@ -20,36 +20,42 @@ public class BannerCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("banner")); return new LinkedList<>(Collections.singletonList("banner"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; // anyone can use it return null; // anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Get someone's profile banner, or your own."; return "Get someone's profile banner, or your own.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "[mentioned user] [resolution]"; return "[mentioned user] [resolution]";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.TOOLS; return CommandCategory.TOOLS;
} }
@@ -63,13 +69,16 @@ public class BannerCommand implements MessageCommand
// (mentions are handled differently by a specific method) // (mentions are handled differently by a specific method)
boolean resFound = false; boolean resFound = false;
for (String arg : args) { for (String arg : args)
try { {
try
{
int givenRes = Integer.parseInt(arg); int givenRes = Integer.parseInt(arg);
resolution = ProfileImage.parseResolution(givenRes); resolution = ProfileImage.parseResolution(givenRes);
resFound = true; resFound = true;
break; break;
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored)
{
// ignored because we're running a check after this block // ignored because we're running a check after this block
} }
} }

View File

@@ -18,46 +18,54 @@ public class BotInfoCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Arrays.asList("botinfo", "info")); return new LinkedList<>(Arrays.asList("botinfo", "info"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; // anyone can use it return null; // anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Get general info about the bot."; return "Get general info about the bot.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return null; return null;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.TOOLS; return CommandCategory.TOOLS;
} }
@Override @Override
public void runCommand(MessageReceivedEvent event, String label, String[] args) { public void runCommand(MessageReceivedEvent event, String label, String[] args)
{
// get a list of message commands // get a list of message commands
LinkedList<MessageCommand> messageCommands = Cache.getMessageCommandListener().getRegisteredCommands(); LinkedList<MessageCommand> messageCommands = Cache.getMessageCommandListener().getRegisteredCommands();
LinkedList<String> commandNames = new LinkedList<>(); LinkedList<String> commandNames = new LinkedList<>();
for (MessageCommand command : messageCommands) { for (MessageCommand command : messageCommands)
{
commandNames.add(command.getCommandLabels().get(0)); commandNames.add(command.getCommandLabels().get(0));
} }

View File

@@ -19,33 +19,41 @@ public class ClearCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList(ClearChat.getLabel())); return new LinkedList<>(Collections.singletonList(ClearChat.getLabel()));
} }
@Override @Override
public List<Permission> getPermissions() { return Collections.singletonList(ClearChat.getPermission()); } public List<Permission> getPermissions()
{
return Collections.singletonList(ClearChat.getPermission());
}
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.MODERATION; return CommandCategory.MODERATION;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Clear the current channel's chat history."; return "Clear the current channel's chat history.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "[amount]"; return "[amount]";
} }
@@ -54,7 +62,8 @@ public class ClearCommand implements MessageCommand
{ {
// check if user is trying to run command in dms. // check if user is trying to run command in dms.
String error = ClearChat.checkDMs(event.getChannel()); String error = ClearChat.checkDMs(event.getChannel());
if (error != null) { if (error != null)
{
event.getMessage().reply(error).queue(); event.getMessage().reply(error).queue();
return; return;
} }
@@ -64,7 +73,8 @@ public class ClearCommand implements MessageCommand
if (args.length == 0) toDeleteAmount = 1; if (args.length == 0) toDeleteAmount = 1;
else else
{ {
try { try
{
toDeleteAmount = Integer.parseInt(args[0]); toDeleteAmount = Integer.parseInt(args[0]);
} catch (NumberFormatException e) } catch (NumberFormatException e)
{ {
@@ -76,7 +86,8 @@ public class ClearCommand implements MessageCommand
if (toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0; if (toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0;
error = ClearChat.checkDeleteAmount(toDeleteAmount); error = ClearChat.checkDeleteAmount(toDeleteAmount);
if (error != null) { if (error != null)
{
event.getMessage().reply(error).queue(); event.getMessage().reply(error).queue();
return; return;
} }

View File

@@ -16,41 +16,48 @@ public class CoinFlipCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Arrays.asList("coinflip", "flip", "flipcoin")); return new LinkedList<>(Arrays.asList("coinflip", "flip", "flipcoin"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; // null because it can be used anywhere return null; // null because it can be used anywhere
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Flip a coin."; return "Flip a coin.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return null; return null;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.FUN; return CommandCategory.FUN;
} }
@Override @Override
public void runCommand(MessageReceivedEvent event, String label, String[] args) { public void runCommand(MessageReceivedEvent event, String label, String[] args)
{
// perform coin flip // perform coin flip
event.getMessage().reply(CoinFlip.genRandom()) event.getMessage().reply(CoinFlip.genRandom())
@@ -59,6 +66,7 @@ public class CoinFlipCommand implements MessageCommand
{ {
// set the command as expiring and restrict it to the user who ran it // set the command as expiring and restrict it to the user who ran it
CoinFlip.trackAndRestrict(message, event.getAuthor()); CoinFlip.trackAndRestrict(message, event.getAuthor());
}, (error) -> {}); }, (error) -> {
});
} }
} }

View File

@@ -16,18 +16,21 @@ import java.util.List;
public class DiceRollCommand implements MessageCommand public class DiceRollCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Arrays.asList("diceroll", "droll", "roll")); return new LinkedList<>(Arrays.asList("diceroll", "droll", "roll"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; // anyone can use it return null; // anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@@ -47,13 +50,15 @@ public class DiceRollCommand implements MessageCommand
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "[dice size] [rolls]"; return "[dice size] [rolls]";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.FUN; return CommandCategory.FUN;
} }

View File

@@ -15,33 +15,41 @@ public class HelloCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Arrays.asList("hi", "hello", "heya")); return new LinkedList<>(Arrays.asList("hi", "hello", "heya"));
} }
@Override @Override
public List<Permission> getPermissions() { return null; } public List<Permission> getPermissions()
{
return null;
}
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Get pinged by the bot."; return "Get pinged by the bot.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return null; return null;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.FUN; return CommandCategory.FUN;
} }

View File

@@ -18,34 +18,42 @@ public class HelpCommand implements MessageCommand
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("help")); return new LinkedList<>(Collections.singletonList("help"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { return null; } public List<Permission> getPermissions()
{
return null;
}
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Get general help on the bot. Specify a command if you want specific help about that command."; return "Get general help on the bot. Specify a command if you want specific help about that command.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "[command]"; return "[command]";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.TOOLS; return CommandCategory.TOOLS;
} }
@@ -102,7 +110,8 @@ public class HelpCommand implements MessageCommand
} }
event.getMessage().replyEmbeds(embedBuilder.build()).queue(); event.getMessage().replyEmbeds(embedBuilder.build()).queue();
} else { } else
{
String commandLabel = args[0].toLowerCase(); String commandLabel = args[0].toLowerCase();
MessageCommand command = Cache.getMessageCommandListener().getRegisteredCommand(commandLabel); MessageCommand command = Cache.getMessageCommandListener().getRegisteredCommand(commandLabel);
@@ -125,7 +134,8 @@ public class HelpCommand implements MessageCommand
if (permissions == null) if (permissions == null)
{ {
permissionsStringBuilder = new StringBuilder("Available to everyone"); permissionsStringBuilder = new StringBuilder("Available to everyone");
} else { } else
{
for (int i = 0; i < permissions.size(); i++) for (int i = 0; i < permissions.size(); i++)
{ {
Permission permission = permissions.get(i); Permission permission = permissions.get(i);

View File

@@ -19,36 +19,42 @@ public class InviteCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("invite")); return new LinkedList<>(Collections.singletonList("invite"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; return null;
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Get the bot's invite link."; return "Get the bot's invite link.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return null; return null;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.MODERATION; return CommandCategory.MODERATION;
} }
@@ -70,7 +76,8 @@ public class InviteCommand implements MessageCommand
.queue(); .queue();
event.getMessage().addReaction(Emoji.fromUnicode("")).queue(); event.getMessage().addReaction(Emoji.fromUnicode("")).queue();
}, error -> event.getMessage().addReaction(Emoji.fromUnicode("")).queue()); }, error -> event.getMessage().addReaction(Emoji.fromUnicode("")).queue());
} else { } else
{
event.getMessage() event.getMessage()
.replyEmbeds(inviteEmbed) .replyEmbeds(inviteEmbed)
.addActionRow(inviteButton) .addActionRow(inviteButton)

View File

@@ -17,36 +17,42 @@ public class KickCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("kick")); return new LinkedList<>(Collections.singletonList("kick"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return new ArrayList<Permission>(Collections.singletonList(Permission.KICK_MEMBERS)); return new ArrayList<Permission>(Collections.singletonList(Permission.KICK_MEMBERS));
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.MODERATION; return CommandCategory.MODERATION;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Kick the mentioned user from the guild."; return "Kick the mentioned user from the guild.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<mentioned user> [reason]"; return "<mentioned user> [reason]";
} }

View File

@@ -29,30 +29,35 @@ public class LoveCalculatorCommand implements MessageCommand
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; //anyone can use it return null; //anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Calculate how much two people love each other. You can mention two people or just one."; return "Calculate how much two people love each other. You can mention two people or just one.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<person 1> [person 2]"; return "<person 1> [person 2]";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.FUN; return CommandCategory.FUN;
} }
@@ -80,7 +85,8 @@ public class LoveCalculatorCommand implements MessageCommand
if (mentions.size() == 1) if (mentions.size() == 1)
{ {
user2 = event.getAuthor(); user2 = event.getAuthor();
} else { } else
{
mentionedUserId = mentions.get(1).getId(); mentionedUserId = mentions.get(1).getId();
user2 = HidekoBot.getAPI().retrieveUserById(mentionedUserId).complete(); user2 = HidekoBot.getAPI().retrieveUserById(mentionedUserId).complete();
} }

View File

@@ -15,36 +15,42 @@ public class MagicBallCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return MagicBall.getLabels(); return MagicBall.getLabels();
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; // anyone can use it return null; // anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Ask a question to the Magic Ball."; return "Ask a question to the Magic Ball.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<question>"; return "<question>";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.FUN; return CommandCategory.FUN;
} }

View File

@@ -18,34 +18,42 @@ public class SayCommand implements MessageCommand
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("say")); return new LinkedList<>(Collections.singletonList("say"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { return Collections.singletonList(Say.getPermission()); } public List<Permission> getPermissions()
{
return Collections.singletonList(Say.getPermission());
}
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return true; return true;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Make the bot say something for you."; return "Make the bot say something for you.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<text>"; return "<text>";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.TOOLS; return CommandCategory.TOOLS;
} }

View File

@@ -17,36 +17,42 @@ public class TimeoutCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("timeout")); return new LinkedList<>(Collections.singletonList("timeout"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return new ArrayList<Permission>(Collections.singletonList(Permission.MODERATE_MEMBERS)); return new ArrayList<Permission>(Collections.singletonList(Permission.MODERATE_MEMBERS));
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.MODERATION; return CommandCategory.MODERATION;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Timeout the mentioned user."; return "Timeout the mentioned user.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<mentioned user> <duration> [reason]"; return "<mentioned user> <duration> [reason]";
} }

View File

@@ -23,36 +23,42 @@ public class TriviaCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList("trivia")); return new LinkedList<>(Collections.singletonList("trivia"));
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; return null;
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.FUN; return CommandCategory.FUN;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Start a Trivia session and play with others!"; return "Start a Trivia session and play with others!";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return null; return null;
} }
@@ -83,7 +89,8 @@ public class TriviaCommand implements MessageCommand
if (response.content() != null) responseAction = recvMessage.reply(response.content()); if (response.content() != null) responseAction = recvMessage.reply(response.content());
else if (response.embed() != null) responseAction = recvMessage.replyEmbeds(response.embed()); else if (response.embed() != null) responseAction = recvMessage.replyEmbeds(response.embed());
if(responseAction != null) { if (responseAction != null)
{
if (response.components() != null) responseAction = responseAction.addActionRow(response.components()); if (response.components() != null) responseAction = responseAction.addActionRow(response.components());
responseAction.queue(message -> { responseAction.queue(message -> {

View File

@@ -21,36 +21,42 @@ public class UrbanDictionaryCommand implements MessageCommand
{ {
@Override @Override
public LinkedList<String> getCommandLabels() { public LinkedList<String> getCommandLabels()
{
return UrbanDictionary.getCommandLabels(); return UrbanDictionary.getCommandLabels();
} }
@Nullable @Nullable
@Override @Override
public List<Permission> getPermissions() { public List<Permission> getPermissions()
{
return null; //anyone can use it return null; //anyone can use it
} }
@Override @Override
public boolean passRawArgs() { public boolean passRawArgs()
{
return false; return false;
} }
@NotNull @NotNull
@Override @Override
public String getDescription() { public String getDescription()
{
return "Look something up in the Urban Dictionary."; return "Look something up in the Urban Dictionary.";
} }
@Nullable @Nullable
@Override @Override
public String getUsage() { public String getUsage()
{
return "<query>"; return "<query>";
} }
@NotNull @NotNull
@Override @Override
public CommandCategory getCategory() { public CommandCategory getCategory()
{
return CommandCategory.FUN; return CommandCategory.FUN;
} }
@@ -66,7 +72,8 @@ public class UrbanDictionaryCommand implements MessageCommand
// sanitize args by only keeping letters and numbers, and adding "+" instead of spaces for HTML parsing // sanitize args by only keeping letters and numbers, and adding "+" instead of spaces for HTML parsing
StringBuilder termBuilder = new StringBuilder(); StringBuilder termBuilder = new StringBuilder();
for (int i = 0; i < args.length; i++) { for (int i = 0; i < args.length; i++)
{
String arg = args[i]; String arg = args[i];
termBuilder.append(arg); termBuilder.append(arg);
@@ -79,9 +86,11 @@ public class UrbanDictionaryCommand implements MessageCommand
Document doc; Document doc;
try { try
{
doc = Jsoup.connect(url).get(); doc = Jsoup.connect(url).get();
} catch (IOException e) { } catch (IOException e)
{
event.getMessage().reply(UrbanDictionary.getTermNotFoundError()).queue(); event.getMessage().reply(UrbanDictionary.getTermNotFoundError()).queue();
return; return;
} }

View File

@@ -14,7 +14,8 @@ import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
public class AvatarCommand extends SlashCommandImpl public class AvatarCommand extends SlashCommandImpl
{ {
@Override @Override
public CommandData getSlashCommandData() { public CommandData getSlashCommandData()
{
return Commands.slash("avatar", "Get someone's profile picture.") return Commands.slash("avatar", "Get someone's profile picture.")
.addOption(OptionType.USER, "user", "User you want to grab the avatar of.") .addOption(OptionType.USER, "user", "User you want to grab the avatar of.")
.addOption(OptionType.INTEGER, "size", "The size of the returned image.", .addOption(OptionType.INTEGER, "size", "The size of the returned image.",
@@ -35,7 +36,8 @@ public class AvatarCommand extends SlashCommandImpl
if (userArg != null) if (userArg != null)
{ {
user = userArg.getAsUser(); user = userArg.getAsUser();
} else { } else
{
user = event.getUser(); user = event.getUser();
} }
@@ -43,7 +45,8 @@ public class AvatarCommand extends SlashCommandImpl
if (sizeArg != null) if (sizeArg != null)
{ {
resolution = ProfileImage.parseResolution(sizeArg.getAsInt()); resolution = ProfileImage.parseResolution(sizeArg.getAsInt());
} else { } else
{
resolution = ProfileImage.parseResolution(512); resolution = ProfileImage.parseResolution(512);
} }

View File

@@ -14,7 +14,8 @@ import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
public class BannerCommand extends SlashCommandImpl public class BannerCommand extends SlashCommandImpl
{ {
@Override @Override
public CommandData getSlashCommandData() { public CommandData getSlashCommandData()
{
return Commands.slash("banner", "Get someone's profile banner.") return Commands.slash("banner", "Get someone's profile banner.")
.addOption(OptionType.USER, "user", "User you want to grab the banner of.") .addOption(OptionType.USER, "user", "User you want to grab the banner of.")
.addOption(OptionType.INTEGER, "size", "The size of the returned image.", .addOption(OptionType.INTEGER, "size", "The size of the returned image.",
@@ -35,7 +36,8 @@ public class BannerCommand extends SlashCommandImpl
if (userArg != null) if (userArg != null)
{ {
user = userArg.getAsUser(); user = userArg.getAsUser();
} else { } else
{
user = event.getUser(); user = event.getUser();
} }
@@ -43,7 +45,8 @@ public class BannerCommand extends SlashCommandImpl
if (sizeArg != null) if (sizeArg != null)
{ {
resolution = ProfileImage.parseResolution(sizeArg.getAsInt()); resolution = ProfileImage.parseResolution(sizeArg.getAsInt());
} else { } else
{
resolution = ProfileImage.parseResolution(512); resolution = ProfileImage.parseResolution(512);
} }

View File

@@ -16,7 +16,8 @@ import java.util.List;
public class BotInfoCommand extends SlashCommandImpl public class BotInfoCommand extends SlashCommandImpl
{ {
@Override @Override
public CommandData getSlashCommandData() { public CommandData getSlashCommandData()
{
return Commands.slash("botinfo", "Get info about the bot."); return Commands.slash("botinfo", "Get info about the bot.");
} }

View File

@@ -17,7 +17,8 @@ public class ClearCommand extends SlashCommandImpl
{ {
@Override @Override
public CommandData getSlashCommandData() { public CommandData getSlashCommandData()
{
return Commands.slash(ClearChat.getLabel(), return Commands.slash(ClearChat.getLabel(),
ClearChat.getDescription()) ClearChat.getDescription())
.addOption(OptionType.INTEGER, "amount", "The amount of messages to delete.") .addOption(OptionType.INTEGER, "amount", "The amount of messages to delete.")

View File

@@ -29,12 +29,11 @@ public class CoinFlipCommand extends SlashCommandImpl
interaction.retrieveOriginal().queue((message) -> interaction.retrieveOriginal().queue((message) ->
{ {
CoinFlip.trackAndRestrict(message, event.getUser()); CoinFlip.trackAndRestrict(message, event.getUser());
}, (error) -> {}); }, (error) -> {
}, (error) -> {}); });
}, (error) -> {
});
} }
} }

View File

@@ -16,7 +16,8 @@ import java.util.concurrent.TimeUnit;
public class DieCommand extends SlashCommandImpl public class DieCommand extends SlashCommandImpl
{ {
@Override @Override
public CommandData getSlashCommandData() { public CommandData getSlashCommandData()
{
return Commands.slash("die", "Stop the bot's process.") return Commands.slash("die", "Stop the bot's process.")
.setDefaultPermissions(DefaultMemberPermissions.DISABLED); .setDefaultPermissions(DefaultMemberPermissions.DISABLED);
} }
@@ -27,9 +28,11 @@ public class DieCommand extends SlashCommandImpl
if (Cache.getBotOwnerId() != event.getUser().getIdLong()) if (Cache.getBotOwnerId() != event.getUser().getIdLong())
{ {
event.reply("Sorry, only the bot owner can run this command!").setEphemeral(true).queue(); event.reply("Sorry, only the bot owner can run this command!").setEphemeral(true).queue();
} else { } else
{
event.reply("Going to sleep! Cya ✨").queue(); event.reply("Going to sleep! Cya ✨").queue();
try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) { try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor())
{
executor.schedule(HidekoBot::shutdown, 3, TimeUnit.SECONDS); executor.schedule(HidekoBot::shutdown, 3, TimeUnit.SECONDS);
} }
} }

View File

@@ -40,7 +40,8 @@ public class LoveCalculatorCommand extends SlashCommandImpl
if (firsUserArg != null) if (firsUserArg != null)
{ {
firstUser = firsUserArg.getAsUser(); //todo null check? firstUser = firsUserArg.getAsUser(); //todo null check?
} else { } else
{
event.reply("\uD83D\uDE22 I need to know who to check! Please mention them.") event.reply("\uD83D\uDE22 I need to know who to check! Please mention them.")
.setEphemeral(true) .setEphemeral(true)
.queue(); .queue();
@@ -51,7 +52,8 @@ public class LoveCalculatorCommand extends SlashCommandImpl
if (secondUserArg != null) if (secondUserArg != null)
{ {
secondUser = secondUserArg.getAsUser(); //todo null check? secondUser = secondUserArg.getAsUser(); //todo null check?
} else { } else
{
secondUser = event.getUser(); secondUser = event.getUser();
} }

View File

@@ -54,9 +54,11 @@ public class UrbanDictionaryCommand extends SlashCommandImpl
Document doc; Document doc;
try { try
{
doc = Jsoup.connect(url).get(); doc = Jsoup.connect(url).get();
} catch (IOException e) { } catch (IOException e)
{
event.reply(UrbanDictionary.getTermNotFoundError()) event.reply(UrbanDictionary.getTermNotFoundError())
.setEphemeral(true) .setEphemeral(true)
.queue(); .queue();

View File

@@ -14,12 +14,20 @@ public enum ConfigurationEntry
private String path; private String path;
private Object defaultValue; private Object defaultValue;
ConfigurationEntry(String path, Object defaultValue) ConfigurationEntry(String path, Object defaultValue)
{ {
this.path = path; this.path = path;
this.defaultValue = defaultValue; this.defaultValue = defaultValue;
} }
public String getPath() { return path; } public String getPath()
public Object getDefaultValue() { return defaultValue; } {
return path;
}
public Object getDefaultValue()
{
return defaultValue;
}
} }

View File

@@ -49,15 +49,16 @@ public class ConfigurationSource
if (!fsConfigFile.exists()) if (!fsConfigFile.exists())
{ {
// try to create config file // try to create config file
try { try
{
if (!fsConfigFile.createNewFile()) if (!fsConfigFile.createNewFile())
{ {
LOGGER.error("We tried creating a file that already exists!"); LOGGER.error("We tried creating a file that already exists!");
HidekoBot.shutdown(); HidekoBot.shutdown();
return; return;
} }
} } catch (IOException e)
catch (IOException e) { {
LOGGER.error("Error creating configuration file!", e); LOGGER.error("Error creating configuration file!", e);
HidekoBot.shutdown(); HidekoBot.shutdown();
return; return;
@@ -68,8 +69,12 @@ public class ConfigurationSource
Yaml fsConfigYaml = new Yaml(new SafeConstructor(options)); Yaml fsConfigYaml = new Yaml(new SafeConstructor(options));
LinkedHashMap<String, Object> fsConfigContents = null; // map holding all file entries LinkedHashMap<String, Object> fsConfigContents = null; // map holding all file entries
try (InputStream fsConfigStream = new FileInputStream(fsConfigFile)) try (InputStream fsConfigStream = new FileInputStream(fsConfigFile))
{ fsConfigContents = fsConfigYaml.load(fsConfigStream); } {
catch (IOException e) { LOGGER.error(e.getMessage()); } fsConfigContents = fsConfigYaml.load(fsConfigStream);
} catch (IOException e)
{
LOGGER.error(e.getMessage());
}
if (fsConfigContents == null) // if file contents are empty or corrupted... if (fsConfigContents == null) // if file contents are empty or corrupted...
@@ -106,13 +111,15 @@ public class ConfigurationSource
{ {
// if the key already exists, copy the original value // if the key already exists, copy the original value
filledEntries.put(key, fsConfigContents.get(key)); filledEntries.put(key, fsConfigContents.get(key));
} else { } else
{
// else, copy the value from the example config file // else, copy the value from the example config file
filledEntries.put(key, entry.getValue()); filledEntries.put(key, entry.getValue());
} }
} }
try { try
{
// new writer to actually write the contents to the file // new writer to actually write the contents to the file
PrintWriter missingKeysWriter = new PrintWriter(fsConfigFile); PrintWriter missingKeysWriter = new PrintWriter(fsConfigFile);
@@ -125,7 +132,8 @@ public class ConfigurationSource
// create the yaml object and dump the values to filesystem // create the yaml object and dump the values to filesystem
Yaml yaml = new Yaml(dumperOptions); Yaml yaml = new Yaml(dumperOptions);
yaml.dump(filledEntries, missingKeysWriter); yaml.dump(filledEntries, missingKeysWriter);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e)
{
LOGGER.error(e.getMessage()); LOGGER.error(e.getMessage());
HidekoBot.shutdown(); HidekoBot.shutdown();
return; return;
@@ -133,7 +141,8 @@ public class ConfigurationSource
// finally, dump all entries to cache. // finally, dump all entries to cache.
loadConfig(filledEntries); loadConfig(filledEntries);
} else { } else
{
// if no key is missing, just cache all entries and values from filesystem. // if no key is missing, just cache all entries and values from filesystem.
loadConfig(fsConfigContents); loadConfig(fsConfigContents);
} }
@@ -144,6 +153,7 @@ public class ConfigurationSource
{ {
this.configurationEntries.putAll(configurationEntries); this.configurationEntries.putAll(configurationEntries);
} }
public Object getConfigValue(ConfigurationEntry key) public Object getConfigValue(ConfigurationEntry key)
{ {
return configurationEntries.get(key.getPath()); return configurationEntries.get(key.getPath());

View File

@@ -12,31 +12,37 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class DatabaseSource { public class DatabaseSource
{
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DatabaseSource.class); private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DatabaseSource.class);
private static final String JDBC_URL = "jdbc:sqlite:%path%"; private static final String JDBC_URL = "jdbc:sqlite:%path%";
private Connection dbConnection = null; private Connection dbConnection = null;
private final String dbPath; private final String dbPath;
public DatabaseSource(String dbPath) { public DatabaseSource(String dbPath)
{
this.dbPath = dbPath; this.dbPath = dbPath;
} }
private void logException(SQLException e) { private void logException(SQLException e)
{
LOGGER.error("Database Exception", e); LOGGER.error("Database Exception", e);
} }
public boolean connect() { public boolean connect()
{
String url = JDBC_URL.replace("%path%", dbPath); String url = JDBC_URL.replace("%path%", dbPath);
if (!close()) return false; if (!close()) return false;
try { try
{
dbConnection = DriverManager.getConnection(url); dbConnection = DriverManager.getConnection(url);
LOGGER.info("Database connection established!"); LOGGER.info("Database connection established!");
return true; return true;
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
return false; return false;
} }
@@ -44,13 +50,18 @@ public class DatabaseSource {
} }
public boolean close() { public boolean close()
if (dbConnection != null) { {
try { if (dbConnection != null)
if (!dbConnection.isClosed()) { {
try
{
if (!dbConnection.isClosed())
{
dbConnection.close(); dbConnection.close();
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
return false; return false;
} }
@@ -87,7 +98,8 @@ public class DatabaseSource {
*/ */
//todo: javadocs //todo: javadocs
public boolean initDb() { public boolean initDb()
{
List<String> newTables = new ArrayList<>(); List<String> newTables = new ArrayList<>();
newTables.add(""" newTables.add("""
@@ -119,11 +131,14 @@ public class DatabaseSource {
); );
"""); """);
for (String sql : newTables) { for (String sql : newTables)
try (Statement stmt = dbConnection.createStatement()) { {
try (Statement stmt = dbConnection.createStatement())
{
// execute the statement // execute the statement
stmt.execute(sql); stmt.execute(sql);
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
return false; return false;
} }
@@ -132,14 +147,17 @@ public class DatabaseSource {
return true; return true;
} }
public boolean trackRanCommandReply(Message message, User user) { public boolean trackRanCommandReply(Message message, User user)
{
String userId = user.getId(); String userId = user.getId();
String guildId; String guildId;
ChannelType channelType = message.getChannelType(); ChannelType channelType = message.getChannelType();
if (!(channelType.isGuild())) { if (!(channelType.isGuild()))
{
guildId = userId; guildId = userId;
} else { } else
{
guildId = message.getGuild().getId(); guildId = message.getGuild().getId();
} }
@@ -153,7 +171,8 @@ public class DatabaseSource {
(?, ?, ?, ?, ?); (?, ?, ?, ?, ?);
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, guildId); preparedStatement.setString(1, guildId);
preparedStatement.setString(2, channelId); preparedStatement.setString(2, channelId);
preparedStatement.setString(3, messageId); preparedStatement.setString(3, messageId);
@@ -163,36 +182,42 @@ public class DatabaseSource {
preparedStatement.executeUpdate(); preparedStatement.executeUpdate();
return true; return true;
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return false; return false;
} }
public boolean isUserTrackedFor(String userId, String messageId) { public boolean isUserTrackedFor(String userId, String messageId)
{
String trackedUserId = getTrackedReplyUserId(messageId); String trackedUserId = getTrackedReplyUserId(messageId);
if (trackedUserId == null) return false; if (trackedUserId == null) return false;
return userId.equals(trackedUserId); return userId.equals(trackedUserId);
} }
public ChannelType getTrackedMessageChannelType(String messageId) { public ChannelType getTrackedMessageChannelType(String messageId)
{
String query = """ String query = """
SELECT channel_type SELECT channel_type
FROM command_runners FROM command_runners
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
String channelTypeName = resultSet.getString("channel_type"); String channelTypeName = resultSet.getString("channel_type");
return ChannelType.valueOf(channelTypeName); return ChannelType.valueOf(channelTypeName);
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
@@ -200,37 +225,44 @@ public class DatabaseSource {
} }
public String getTrackedReplyUserId(String messageId) { public String getTrackedReplyUserId(String messageId)
{
String query = """ String query = """
SELECT user_id SELECT user_id
FROM command_runners FROM command_runners
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("user_id"); return resultSet.getString("user_id");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public boolean queueDisabling(Message message) { public boolean queueDisabling(Message message)
{
String messageId = message.getId(); String messageId = message.getId();
String channelId = message.getChannel().getId(); String channelId = message.getChannel().getId();
String guildId; String guildId;
ChannelType channelType = message.getChannelType(); ChannelType channelType = message.getChannelType();
if (!(channelType.isGuild())) { if (!(channelType.isGuild()))
{
guildId = "PRIVATE"; guildId = "PRIVATE";
} else { } else
{
guildId = message.getGuild().getId(); guildId = message.getGuild().getId();
} }
@@ -245,7 +277,8 @@ public class DatabaseSource {
(?, ?, ?, ?); (?, ?, ?, ?);
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, guildId); preparedStatement.setString(1, guildId);
preparedStatement.setString(2, channelId); preparedStatement.setString(2, channelId);
preparedStatement.setString(3, messageId); preparedStatement.setString(3, messageId);
@@ -254,14 +287,16 @@ public class DatabaseSource {
preparedStatement.executeUpdate(); preparedStatement.executeUpdate();
return true; return true;
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return false; return false;
} }
public List<String> getQueuedExpiringMessages() { public List<String> getQueuedExpiringMessages()
{
List<String> messages = new ArrayList<>(); List<String> messages = new ArrayList<>();
String query = """ String query = """
@@ -269,44 +304,54 @@ public class DatabaseSource {
FROM pending_disabled_messages; FROM pending_disabled_messages;
"""; """;
try (Statement statement = dbConnection.createStatement()) { try (Statement statement = dbConnection.createStatement())
{
ResultSet resultSet = statement.executeQuery(query); ResultSet resultSet = statement.executeQuery(query);
if (resultSet.isClosed()) return messages; if (resultSet.isClosed()) return messages;
while (resultSet.next()) { while (resultSet.next())
{
messages.add(resultSet.getString("message_id")); messages.add(resultSet.getString("message_id"));
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return messages; return messages;
} }
public boolean untrackExpiredMessage(String messageId) { public boolean untrackExpiredMessage(String messageId)
{
String query = "DELETE FROM pending_disabled_messages WHERE message_id = ?;"; String query = "DELETE FROM pending_disabled_messages WHERE message_id = ?;";
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
preparedStatement.execute(); preparedStatement.execute();
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
return false; return false;
} }
query = "DELETE FROM command_runners WHERE message_id = ?;"; query = "DELETE FROM command_runners WHERE message_id = ?;";
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
preparedStatement.execute(); preparedStatement.execute();
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
return false; return false;
} }
query = "DELETE FROM urban_dictionary WHERE message_id = ?;"; query = "DELETE FROM urban_dictionary WHERE message_id = ?;";
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
preparedStatement.execute(); preparedStatement.execute();
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
return false; return false;
} }
@@ -314,66 +359,78 @@ public class DatabaseSource {
return true; return true;
} }
public String getQueuedExpiringMessageExpiryDate(String messageId) { public String getQueuedExpiringMessageExpiryDate(String messageId)
{
String query = """ String query = """
SELECT expiry_timestamp SELECT expiry_timestamp
FROM pending_disabled_messages FROM pending_disabled_messages
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("expiry_timestamp"); return resultSet.getString("expiry_timestamp");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public String getQueuedExpiringMessageChannel(String messageId) { public String getQueuedExpiringMessageChannel(String messageId)
{
String query = """ String query = """
SELECT channel_id SELECT channel_id
FROM pending_disabled_messages FROM pending_disabled_messages
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("channel_id"); return resultSet.getString("channel_id");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public String getQueuedExpiringMessageGuild(String messageId) { public String getQueuedExpiringMessageGuild(String messageId)
{
String query = """ String query = """
SELECT guild_id SELECT guild_id
FROM pending_disabled_messages FROM pending_disabled_messages
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("guild_id"); return resultSet.getString("guild_id");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
@@ -382,7 +439,8 @@ public class DatabaseSource {
public boolean trackUrban(String meanings, String examples, public boolean trackUrban(String meanings, String examples,
String contributors, String dates, String contributors, String dates,
Message message, String term) { Message message, String term)
{
String query = """ String query = """
INSERT INTO urban_dictionary INSERT INTO urban_dictionary
@@ -390,7 +448,8 @@ public class DatabaseSource {
(?, ?, ?, ?, ?, ?, ?); (?, ?, ?, ?, ?, ?, ?);
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, message.getId()); preparedStatement.setString(1, message.getId());
preparedStatement.setInt(2, 0); preparedStatement.setInt(2, 0);
preparedStatement.setString(3, meanings); preparedStatement.setString(3, meanings);
@@ -402,167 +461,196 @@ public class DatabaseSource {
preparedStatement.executeUpdate(); preparedStatement.executeUpdate();
return true; return true;
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return false; return false;
} }
public int getUrbanPage(String messageId) { public int getUrbanPage(String messageId)
{
String query = """ String query = """
SELECT page SELECT page
FROM urban_dictionary FROM urban_dictionary
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return 0; if (resultSet.isClosed()) return 0;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getInt("page"); return resultSet.getInt("page");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return 0; return 0;
} }
public String getUrbanMeanings(String messageId) { public String getUrbanMeanings(String messageId)
{
String query = """ String query = """
SELECT meanings SELECT meanings
FROM urban_dictionary FROM urban_dictionary
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("meanings"); return resultSet.getString("meanings");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public String getUrbanExamples(String messageId) { public String getUrbanExamples(String messageId)
{
String query = """ String query = """
SELECT examples SELECT examples
FROM urban_dictionary FROM urban_dictionary
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("examples"); return resultSet.getString("examples");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public String getUrbanContributors(String messageId) { public String getUrbanContributors(String messageId)
{
String query = """ String query = """
SELECT contributors SELECT contributors
FROM urban_dictionary FROM urban_dictionary
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("contributors"); return resultSet.getString("contributors");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public String getUrbanDates(String messageId) { public String getUrbanDates(String messageId)
{
String query = """ String query = """
SELECT dates SELECT dates
FROM urban_dictionary FROM urban_dictionary
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("dates"); return resultSet.getString("dates");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public String getUrbanTerm(String messageId) { public String getUrbanTerm(String messageId)
{
String query = """ String query = """
SELECT term SELECT term
FROM urban_dictionary FROM urban_dictionary
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, messageId); preparedStatement.setString(1, messageId);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.isClosed()) return null; if (resultSet.isClosed()) return null;
while (resultSet.next()) { while (resultSet.next())
{
return resultSet.getString("term"); return resultSet.getString("term");
} }
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return null; return null;
} }
public boolean setUrbanPage(String messageId, int page) { public boolean setUrbanPage(String messageId, int page)
{
String query = """ String query = """
UPDATE urban_dictionary UPDATE urban_dictionary
SET page = ? SET page = ?
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setInt(1, page); preparedStatement.setInt(1, page);
preparedStatement.setString(2, messageId); preparedStatement.setString(2, messageId);
preparedStatement.executeUpdate(); preparedStatement.executeUpdate();
return true; return true;
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }
return false; return false;
} }
public boolean resetExpiryTimestamp(String messageId) { public boolean resetExpiryTimestamp(String messageId)
{
LocalDateTime expiryTime = LocalDateTime.now().plusSeconds(Cache.getExpiryTimeSeconds()); LocalDateTime expiryTime = LocalDateTime.now().plusSeconds(Cache.getExpiryTimeSeconds());
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(Cache.getExpiryTimestampFormat()); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(Cache.getExpiryTimestampFormat());
@@ -574,14 +662,16 @@ public class DatabaseSource {
WHERE message_id = ?; WHERE message_id = ?;
"""; """;
try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query))
{
preparedStatement.setString(1, expiryTimeFormatted); preparedStatement.setString(1, expiryTimeFormatted);
preparedStatement.setString(2, messageId); preparedStatement.setString(2, messageId);
preparedStatement.executeUpdate(); preparedStatement.executeUpdate();
return true; return true;
} catch (SQLException e) { } catch (SQLException e)
{
logException(e); logException(e);
} }

View File

@@ -25,8 +25,8 @@ public class PropertiesSource
{ {
properties.load(internalPropertiesStream); properties.load(internalPropertiesStream);
} } catch (IOException e)
catch (IOException e) { {
LOGGER.error(e.getMessage()); LOGGER.error(e.getMessage());
HidekoBot.shutdown(); HidekoBot.shutdown();
return; return;
@@ -34,5 +34,7 @@ public class PropertiesSource
} }
public String getProperty(String property) public String getProperty(String property)
{ return properties == null ? "" : properties.getProperty(property); } {
return properties == null ? "" : properties.getProperty(property);
}
} }

View File

@@ -18,7 +18,8 @@ public class ButtonInteractionListener extends ListenerAdapter
public void onButtonInteraction(ButtonInteractionEvent event) public void onButtonInteraction(ButtonInteractionEvent event)
{ {
switch (event.getComponentId().toLowerCase()) { switch (event.getComponentId().toLowerCase())
{
// coinflip // coinflip
case "coinflip_reflip" -> CoinFlip.buttonReFlip(event); case "coinflip_reflip" -> CoinFlip.buttonReFlip(event);

View File

@@ -45,7 +45,9 @@ public class MessageCommandListener extends ListenerAdapter
for (String currentAlias : aliases) for (String currentAlias : aliases)
{ {
if (label.equals(currentAlias)) if (label.equals(currentAlias))
{ return entry.getValue(); } {
return entry.getValue();
}
} }
} }
@@ -53,7 +55,9 @@ public class MessageCommandListener extends ListenerAdapter
} }
public LinkedList<MessageCommand> getRegisteredCommands() public LinkedList<MessageCommand> getRegisteredCommands()
{ return new LinkedList<>(registeredCommands.values()); } {
return new LinkedList<>(registeredCommands.values());
}
@Override @Override
public void onMessageReceived(@NotNull MessageReceivedEvent event) public void onMessageReceived(@NotNull MessageReceivedEvent event)
@@ -133,8 +137,7 @@ public class MessageCommandListener extends ListenerAdapter
argsString = argsString.replaceAll("^[\\S]+\\s*", ""); argsString = argsString.replaceAll("^[\\S]+\\s*", "");
// pass all other arguments as a single argument as the first array element // pass all other arguments as a single argument as the first array element
commandArgs = new String[]{argsString}; commandArgs = new String[]{argsString};
} } else
else
{ {
// copy all split arguments to the array, except from the command label // copy all split arguments to the array, except from the command label
commandArgs = Arrays.copyOfRange(argsRaw, 1, argsRaw.length); commandArgs = Arrays.copyOfRange(argsRaw, 1, argsRaw.length);

View File

@@ -33,8 +33,7 @@ public class MessageLogger extends ListenerAdapter
toLog = GUILD_MESSAGE_LOG_FORMAT toLog = GUILD_MESSAGE_LOG_FORMAT
.replace("%guild%", guildName) .replace("%guild%", guildName)
.replace("%channel%", channelName); .replace("%channel%", channelName);
} } else if (event.getChannel() instanceof PrivateChannel)
else if(event.getChannel() instanceof PrivateChannel)
{ {
toLog = DIRECT_MESSAGE_LOG_FORMAT; toLog = DIRECT_MESSAGE_LOG_FORMAT;
} }

View File

@@ -14,7 +14,8 @@ public class SelectMenuInteractionListener extends ListenerAdapter
@Override @Override
public void onStringSelectInteraction(StringSelectInteractionEvent event) public void onStringSelectInteraction(StringSelectInteractionEvent event)
{ {
switch (event.getComponentId().toLowerCase()) { switch (event.getComponentId().toLowerCase())
{
// trivia // trivia
case "trivia_categories" -> Trivia.handleMenuSelection(event); case "trivia_categories" -> Trivia.handleMenuSelection(event);

View File

@@ -21,10 +21,15 @@ public class SlashCommandCompletionListener extends ListenerAdapter
} }
public SlashArgumentsCompleter getRegisteredCompleter(String label) public SlashArgumentsCompleter getRegisteredCompleter(String label)
{ return registeredCompleters.get(label); } {
return registeredCompleters.get(label);
}
public LinkedList<SlashArgumentsCompleter> getRegisteredCompleters() public LinkedList<SlashArgumentsCompleter> getRegisteredCompleters()
{ return new LinkedList<>(registeredCompleters.values()); } {
return new LinkedList<>(registeredCompleters.values());
}
@Override @Override
public void onCommandAutoCompleteInteraction(CommandAutoCompleteInteractionEvent event) public void onCommandAutoCompleteInteraction(CommandAutoCompleteInteractionEvent event)
{ {

View File

@@ -21,10 +21,14 @@ public class SlashCommandListener extends ListenerAdapter
} }
public SlashCommand getRegisteredCommand(String label) public SlashCommand getRegisteredCommand(String label)
{ return registeredCommands.get(label); } {
return registeredCommands.get(label);
}
public LinkedList<SlashCommand> getRegisteredCommands() public LinkedList<SlashCommand> getRegisteredCommands()
{ return new LinkedList<>(registeredCommands.values()); } {
return new LinkedList<>(registeredCommands.values());
}
@Override @Override
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event)

View File

@@ -9,10 +9,12 @@ import java.util.Objects;
public record MessageResponse(@Nullable String content, public record MessageResponse(@Nullable String content,
@Nullable MessageEmbed embed, @Nullable MessageEmbed embed,
@Nullable ItemComponent... components) { @Nullable ItemComponent... components)
{
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o)
{
if (this == o) return true; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; if (o == null || getClass() != o.getClass()) return false;
MessageResponse response = (MessageResponse) o; MessageResponse response = (MessageResponse) o;
@@ -22,14 +24,16 @@ public record MessageResponse(@Nullable String content,
} }
@Override @Override
public int hashCode() { public int hashCode()
{
int result = Objects.hash(content, embed); int result = Objects.hash(content, embed);
result = 31 * result + Arrays.hashCode(components); result = 31 * result + Arrays.hashCode(components);
return result; return result;
} }
@Override @Override
public String toString() { public String toString()
{
return "MessageResponse{" + return "MessageResponse{" +
"content=" + content + "content=" + content +
", embed=" + embed + ", embed=" + embed +

View File

@@ -9,10 +9,14 @@ public enum CommandCategory
; ;
private String emoji; private String emoji;
CommandCategory(String emoji) CommandCategory(String emoji)
{ {
this.emoji = emoji; this.emoji = emoji;
} }
public String getEmoji() { return emoji; } public String getEmoji()
{
return emoji;
}
} }

View File

@@ -70,9 +70,7 @@ public interface MessageCommand
* *
* @param event the received message event. It should not be used for parsing message contents data as * @param event the received message event. It should not be used for parsing message contents data as
* the arguments already account for it in a better way. * the arguments already account for it in a better way.
*
* @param label the command label that was used, taken from all available command aliases. * @param label the command label that was used, taken from all available command aliases.
*
* @param args a pre-formatted list of arguments, excluding the bot prefix and the command name. * @param args a pre-formatted list of arguments, excluding the bot prefix and the command name.
* This is useful because command logic won't have to change in case the bot prefix is changed, * This is useful because command logic won't have to change in case the bot prefix is changed,
* removed, or we switch to another method of triggering commands (ping, trigger words, ...). * removed, or we switch to another method of triggering commands (ping, trigger words, ...).

View File

@@ -12,6 +12,7 @@ public interface SlashArgumentsCompleter
* @return the command object. * @return the command object.
*/ */
SlashCommand getCommand(); SlashCommand getCommand();
/** /**
* Run the argument-completion logic by parsing the event and replying accordingly. * Run the argument-completion logic by parsing the event and replying accordingly.
* *

View File

@@ -6,13 +6,16 @@ import org.jetbrains.annotations.NotNull;
public class SlashArgumentsCompleterImpl implements SlashArgumentsCompleter public class SlashArgumentsCompleterImpl implements SlashArgumentsCompleter
{ {
private final SlashCommand parentCommand; private final SlashCommand parentCommand;
public SlashArgumentsCompleterImpl(SlashCommand parentCommand) public SlashArgumentsCompleterImpl(SlashCommand parentCommand)
{ {
this.parentCommand = parentCommand; this.parentCommand = parentCommand;
} }
public SlashCommand getCommand() public SlashCommand getCommand()
{ return parentCommand; } {
return parentCommand;
}
public void runCompletion(@NotNull CommandAutoCompleteInteractionEvent event) public void runCompletion(@NotNull CommandAutoCompleteInteractionEvent event)
{ {

View File

@@ -21,6 +21,7 @@ public interface SlashCommand
* @return the command data object. * @return the command data object.
*/ */
CommandData getSlashCommandData(); CommandData getSlashCommandData();
/** /**
* Run the command logic by parsing the event and replying accordingly. * Run the command logic by parsing the event and replying accordingly.
* *

View File

@@ -8,17 +8,20 @@ public class SlashCommandImpl implements SlashCommand
{ {
@Override @Override
public String getCommandName() { public String getCommandName()
{
return getSlashCommandData().getName(); return getSlashCommandData().getName();
} }
@Override @Override
public CommandData getSlashCommandData() { public CommandData getSlashCommandData()
{
return null; return null;
} }
@Override @Override
public void runSlashCommand(@NotNull SlashCommandInteractionEvent event) { public void runSlashCommand(@NotNull SlashCommandInteractionEvent event)
{
event.reply("Base command implementation").queue(); event.reply("Base command implementation").queue();
} }
} }

View File

@@ -6,10 +6,12 @@ import java.util.LinkedList;
/** /**
* This class gets two linked lists, and compares their first value alphabetically. * This class gets two linked lists, and compares their first value alphabetically.
*/ */
public class MessageCommandAliasesComparator implements Comparator<LinkedList<String>> { public class MessageCommandAliasesComparator implements Comparator<LinkedList<String>>
{
@Override @Override
public int compare(LinkedList<String> linkedList, LinkedList<String> t1) { public int compare(LinkedList<String> linkedList, LinkedList<String> t1)
{
if (linkedList.isEmpty()) return 0; if (linkedList.isEmpty()) return 0;
if (t1.isEmpty()) return 0; if (t1.isEmpty()) return 0;

View File

@@ -7,10 +7,12 @@ import java.util.Comparator;
/** /**
* This class gets two trivia categories, and compares them by their name. * This class gets two trivia categories, and compares them by their name.
*/ */
public class TriviaCategoryComparator implements Comparator<TriviaCategory> { public class TriviaCategoryComparator implements Comparator<TriviaCategory>
{
@Override @Override
public int compare(TriviaCategory o1, TriviaCategory o2) { public int compare(TriviaCategory o1, TriviaCategory o2)
{
return CharSequence.compare(o1.categoryName(), o2.categoryName()); return CharSequence.compare(o1.categoryName(), o2.categoryName());
} }
} }

View File

@@ -7,10 +7,12 @@ import java.util.Comparator;
/** /**
* This class gets two trivia scores, and compares their score. * This class gets two trivia scores, and compares their score.
*/ */
public class TriviaScoreComparator implements Comparator<TriviaScore> { public class TriviaScoreComparator implements Comparator<TriviaScore>
{
@Override @Override
public int compare(TriviaScore o1, TriviaScore o2) { public int compare(TriviaScore o1, TriviaScore o2)
{
return Integer.compare(o2.getScore(), o1.getScore()); // inverted, because higher number should come first return Integer.compare(o2.getScore(), o1.getScore()); // inverted, because higher number should come first
} }
} }

View File

@@ -1,5 +1,6 @@
package wtf.beatrice.hidekobot.objects.fun; package wtf.beatrice.hidekobot.objects.fun;
public record TriviaCategory(String categoryName, int categoryId) { public record TriviaCategory(String categoryName, int categoryId)
{
} }

View File

@@ -3,6 +3,7 @@ package wtf.beatrice.hidekobot.objects.fun;
import java.util.List; import java.util.List;
public record TriviaQuestion(String question, String correctAnswer, public record TriviaQuestion(String question, String correctAnswer,
List<String> wrongAnswers) { List<String> wrongAnswers)
{
} }

View File

@@ -18,9 +18,15 @@ public class TriviaScore
score += add; score += add;
} }
public int getScore() { return score; } public int getScore()
{
return score;
}
public User getUser() { return user; } public User getUser()
{
return user;
}
@Override @Override
public String toString() public String toString()

View File

@@ -10,7 +10,8 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
public class ExpiredMessageTask implements Runnable { public class ExpiredMessageTask implements Runnable
{
private final DateTimeFormatter formatter; private final DateTimeFormatter formatter;
private static final Logger LOGGER = LoggerFactory.getLogger(ExpiredMessageTask.class); private static final Logger LOGGER = LoggerFactory.getLogger(ExpiredMessageTask.class);
@@ -26,7 +27,8 @@ public class ExpiredMessageTask implements Runnable {
@Override @Override
public void run() { public void run()
{
databaseSource = Cache.getDatabaseSource(); databaseSource = Cache.getDatabaseSource();
if (databaseSource == null) return; if (databaseSource == null) return;

View File

@@ -18,7 +18,8 @@ public class HeartBeatTask implements Runnable
String urlString = Cache.getFullHeartBeatLink(); String urlString = Cache.getFullHeartBeatLink();
if (urlString == null || urlString.isEmpty()) return; if (urlString == null || urlString.isEmpty()) return;
try { try
{
URL heartbeatUrl = new URL(urlString); URL heartbeatUrl = new URL(urlString);
@@ -32,13 +33,13 @@ public class HeartBeatTask implements Runnable
{ {
// only log ok response codes when verbosity is enabled // only log ok response codes when verbosity is enabled
if (Cache.isVerbose()) LOGGER.info("Heartbeat response code: {}", responseCode); if (Cache.isVerbose()) LOGGER.info("Heartbeat response code: {}", responseCode);
} } else
else
{ {
LOGGER.error("Heartbeat returned problematic response code: {}", responseCode); LOGGER.error("Heartbeat returned problematic response code: {}", responseCode);
} }
} catch (IOException e) { } catch (IOException e)
{
LOGGER.error("Error while trying to push heartbeat", e); LOGGER.error("Error while trying to push heartbeat", e);
} }

View File

@@ -22,7 +22,8 @@ public class StatusUpdateTask implements Runnable
); );
@Override @Override
public void run() { public void run()
{
int randomPos = RandomUtil.getRandomNumber(0, statuses.size() - 1); int randomPos = RandomUtil.getRandomNumber(0, statuses.size() - 1);
String status = statuses.get(randomPos) + " | " + Cache.getBotPrefix() + " help"; String status = statuses.get(randomPos) + " | " + Cache.getBotPrefix() + " help";
HidekoBot.getAPI().getPresence().setActivity(Activity.playing(status)); HidekoBot.getAPI().getPresence().setActivity(Activity.playing(status));

View File

@@ -93,12 +93,14 @@ public class TriviaTask implements Runnable
previousScore = score; previousScore = score;
topScore = score; topScore = score;
pos = 1; pos = 1;
} else { } else
{
if (score != previousScore) pos++; if (score != previousScore) pos++;
} }
if (pos == 1) winners.add(user); if (pos == 1) winners.add(user);
else { else
{
othersBuilder.append("\n").append(pos) othersBuilder.append("\n").append(pos)
.append(" | ").append(user) .append(" | ").append(user)
.append(": ").append(score).append(" points"); .append(": ").append(score).append(" points");
@@ -113,7 +115,8 @@ public class TriviaTask implements Runnable
if (i + 1 != winners.size()) if (i + 1 != winners.size())
{ {
winnersBuilder.append(", "); // separate with comma except on last run winnersBuilder.append(", "); // separate with comma except on last run
} else { } else
{
winnersBuilder.append(": ").append(topScore).append(" points \uD83C\uDF89"); winnersBuilder.append(": ").append(topScore).append(" points \uD83C\uDF89");
} }
} }

View File

@@ -27,7 +27,8 @@ public class CommandUtil
private static final Logger LOGGER = LoggerFactory.getLogger(CommandUtil.class); private static final Logger LOGGER = LoggerFactory.getLogger(CommandUtil.class);
private CommandUtil() { private CommandUtil()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -40,7 +41,8 @@ public class CommandUtil
public static void delete(ButtonInteractionEvent event) public static void delete(ButtonInteractionEvent event)
{ {
// check if the user interacting is the same one who ran the command // check if the user interacting is the same one who ran the command
if (!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId()))) { if (!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId())))
{
event.reply("❌ You did not run this command!").setEphemeral(true).queue(); event.reply("❌ You did not run this command!").setEphemeral(true).queue();
return; return;
} }
@@ -64,7 +66,9 @@ public class CommandUtil
// populate commands list from registered commands // populate commands list from registered commands
List<CommandData> allCommands = new ArrayList<>(); List<CommandData> allCommands = new ArrayList<>();
for (SlashCommand cmd : Cache.getSlashCommandListener().getRegisteredCommands()) for (SlashCommand cmd : Cache.getSlashCommandListener().getRegisteredCommands())
{ allCommands.add(cmd.getSlashCommandData()); } {
allCommands.add(cmd.getSlashCommandData());
}
JDA jdaInstance = HidekoBot.getAPI(); JDA jdaInstance = HidekoBot.getAPI();
@@ -189,8 +193,7 @@ public class CommandUtil
} }
textChannel = user.openPrivateChannel().complete(); textChannel = user.openPrivateChannel().complete();
} } else
else
{ {
String guildId = databaseSource.getQueuedExpiringMessageGuild(messageId); String guildId = databaseSource.getQueuedExpiringMessageGuild(messageId);
Guild guild = guildId == null ? null : HidekoBot.getAPI().getGuildById(guildId); Guild guild = guildId == null ? null : HidekoBot.getAPI().getGuildById(guildId);

View File

@@ -12,7 +12,8 @@ import java.util.Arrays;
public class FormatUtil public class FormatUtil
{ {
private FormatUtil() { private FormatUtil()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -60,21 +61,25 @@ public class FormatUtil
* *
* @return the formatted String * @return the formatted String
*/ */
public static String getNiceDuration(Duration duration) { public static String getNiceDuration(Duration duration)
{
long days = duration.toDays(); long days = duration.toDays();
long hours = duration.toHoursPart(); long hours = duration.toHoursPart();
long minutes = duration.toMinutesPart(); long minutes = duration.toMinutesPart();
long seconds = duration.toSecondsPart(); long seconds = duration.toSecondsPart();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (days > 0) { if (days > 0)
{
sb.append(days).append("d "); sb.append(days).append("d ");
sb.append(hours).append("h "); sb.append(hours).append("h ");
sb.append(minutes).append("m "); sb.append(minutes).append("m ");
} else if (hours > 0) { } else if (hours > 0)
{
sb.append(hours).append("h "); sb.append(hours).append("h ");
sb.append(minutes).append("m "); sb.append(minutes).append("m ");
} else if (minutes > 0) { } else if (minutes > 0)
{
sb.append(minutes).append("m "); sb.append(minutes).append("m ");
} }
sb.append(seconds).append("s"); sb.append(seconds).append("s");

View File

@@ -50,7 +50,8 @@ public class Logger<T>
{ {
// create a new scheduled executor with an anonymous runnable... // create a new scheduled executor with an anonymous runnable...
//... after waiting <delay> seconds. //... after waiting <delay> seconds.
try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) { try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor())
{
executor.schedule(() -> log(message), delay, TimeUnit.SECONDS); executor.schedule(() -> log(message), delay, TimeUnit.SECONDS);
} }

View File

@@ -10,7 +10,8 @@ import java.util.Random;
public class RandomUtil public class RandomUtil
{ {
private RandomUtil() { private RandomUtil()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
@@ -47,7 +48,8 @@ public class RandomUtil
} }
public static Random getRandom() { public static Random getRandom()
{
return randomInstance; return randomInstance;
} }

View File

@@ -10,33 +10,38 @@ import java.util.List;
public class SerializationUtil public class SerializationUtil
{ {
private SerializationUtil() { private SerializationUtil()
{
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }
public static <T> String serializeBase64(List<T> dataList) { public static <T> String serializeBase64(List<T> dataList)
{
try (ByteArrayOutputStream bo = new ByteArrayOutputStream(); try (ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo)) { ObjectOutputStream so = new ObjectOutputStream(bo))
{
so.writeObject(dataList); so.writeObject(dataList);
so.flush(); so.flush();
return Base64.getEncoder().encodeToString(bo.toByteArray()); return Base64.getEncoder().encodeToString(bo.toByteArray());
} } catch (IOException e)
catch (IOException e) { {
throw new SerializationException("Error during serialization", e); throw new SerializationException("Error during serialization", e);
} }
} }
public static <T> LinkedList<T> deserializeBase64(String dataStr) { public static <T> LinkedList<T> deserializeBase64(String dataStr)
{
byte[] b = Base64.getDecoder().decode(dataStr); byte[] b = Base64.getDecoder().decode(dataStr);
ByteArrayInputStream bi = new ByteArrayInputStream(b); ByteArrayInputStream bi = new ByteArrayInputStream(b);
ObjectInputStream si; ObjectInputStream si;
try { try
{
si = new ObjectInputStream(bi); si = new ObjectInputStream(bi);
return LinkedList.class.cast(si.readObject()); return LinkedList.class.cast(si.readObject());
} } catch (IOException | ClassNotFoundException e)
catch (IOException | ClassNotFoundException e) { {
throw new SerializationException("Error during deserialization", e); throw new SerializationException("Error during deserialization", e);
} }
} }