diff --git a/.idea/.gitignore b/.idea/.gitignore
index 13566b8..a9d7db9 100644
--- a/.idea/.gitignore
+++ b/.idea/.gitignore
@@ -6,3 +6,5 @@
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
+# GitHub Copilot persisted chat sessions
+/copilot/chatSessions
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 155ea54..c9ec623 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -69,34 +69,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -106,6 +78,12 @@
+
+
+
+
+
+
@@ -197,17 +175,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -222,10 +189,8 @@
-
-
diff --git a/build.gradle.kts b/build.gradle.kts
index 8fedbb7..a0df2fb 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -15,11 +15,13 @@ java {
dependencies {
implementation("com.google.code.gson:gson:2.10.1")
- implementation("com.slack.api:bolt-socket-mode:1.37.0")
+ implementation("com.slack.api:bolt:1.38.3")
+ implementation("com.slack.api:bolt-servlet:1.38.3")
+ implementation("com.slack.api:bolt-jetty:1.38.3")
implementation("javax.websocket:javax.websocket-api:1.1")
implementation("org.glassfish.tyrus.bundles:tyrus-standalone-client:1.19")
implementation("org.slf4j:slf4j-simple:2.0.5")
- implementation("org.apache.commons:commons-text:1.10.0")
+ implementation("org.apache.commons:commons-text:1.11.0")
implementation("org.apache.commons:commons-collections4:4.4")
compileOnly("com.frengor:ultimateadvancementapi:2.2.3")
diff --git a/src/main/java/com/hackclub/hccore/slack/SlackBot.java b/src/main/java/com/hackclub/hccore/slack/SlackBot.java
index e728517..0c9709e 100644
--- a/src/main/java/com/hackclub/hccore/slack/SlackBot.java
+++ b/src/main/java/com/hackclub/hccore/slack/SlackBot.java
@@ -21,18 +21,16 @@
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
-import com.slack.api.Slack;
import com.slack.api.bolt.App;
import com.slack.api.bolt.AppConfig;
+import com.slack.api.bolt.jetty.SlackAppServer;
import com.slack.api.bolt.request.builtin.SlashCommandRequest;
-import com.slack.api.bolt.socket_mode.SocketModeApp;
import com.slack.api.methods.MethodsClient;
import com.slack.api.methods.SlackApiException;
import com.slack.api.methods.response.chat.ChatPostMessageResponse;
import com.slack.api.methods.response.users.profile.UsersProfileGetResponse;
import com.slack.api.model.User;
import com.slack.api.model.event.MessageBotEvent;
-import com.slack.api.model.event.MessageChannelJoinEvent;
import com.slack.api.model.event.MessageDeletedEvent;
import com.slack.api.model.event.MessageEvent;
import io.papermc.paper.event.player.AsyncChatEvent;
@@ -43,6 +41,7 @@
import java.util.Map.Entry;
import java.util.Objects;
import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
import java.util.regex.Pattern;
import net.kyori.adventure.text.Component;
@@ -50,7 +49,6 @@
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.apache.commons.collections4.map.PassiveExpiringMap;
-import org.apache.commons.text.StringEscapeUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.advancement.Advancement;
@@ -76,13 +74,14 @@ public class SlackBot implements Listener {
public static final String playerServerJoinAvatarUrl = "https://cloud-if9tepzbn-hack-club-bot.vercel.app/1hccorejoin.png";
public static final String playerAdvancementAvatarUrl = "https://cloud-obk2f29h4-hack-club-bot.vercel.app/0achievement.png";
private final HCCorePlugin plugin;
- private final SocketModeApp socket;
+ private final App app;
+ private final SlackAppServer server;
private final String commandBase;
private final PassiveExpiringMap mcLinkCodes;
public SlackBot(HCCorePlugin plugin) throws Exception {
this.plugin = plugin;
- App app = new App(AppConfig.builder().singleTeamBotToken(getBotToken()).build());
+ this.app = new App(AppConfig.builder().singleTeamBotToken(getBotToken()).signingSecret(getSigningSecret()).build());
commandBase = plugin.getConfig().getString("settings.slack-link.base-command", "minecraft");
mcLinkCodes = new PassiveExpiringMap<>(
plugin.getConfig().getLong("settings.slack-link.link-code-expiration", 60 * 10) * 1000);
@@ -90,7 +89,9 @@ public SlackBot(HCCorePlugin plugin) throws Exception {
Pattern sdk = Pattern.compile(".*");
app.message(sdk, (payload, ctx) -> {
MessageEvent event = payload.getEvent();
- String text = StringEscapeUtils.unescapeHtml4(event.getText());
+ // Weird bug with this right now...
+ // String text = StringEscapeUtils.unescapeHtml4(event.getText());
+ String text = event.getText();
String channelId = event.getChannel();
String mainChannel = getSlackChannel();
if (!channelId.equals(mainChannel)) {
@@ -176,8 +177,6 @@ public SlackBot(HCCorePlugin plugin) throws Exception {
app.event(MessageDeletedEvent.class, (payload, ctx) -> ctx.ack());
- app.event(MessageChannelJoinEvent.class, (payload, ctx) -> ctx.ack());
-
CommandDispatcher dispatcher = new CommandDispatcher<>();
dispatcher.register(
LiteralArgumentBuilder.literal("/%s".formatted(commandBase)).then(
@@ -333,9 +332,15 @@ public SlackBot(HCCorePlugin plugin) throws Exception {
return ctx.ack();
}));
- SocketModeApp socket = new SocketModeApp(getAppToken(), app);
- this.socket = socket;
- socket.startAsync();
+ SlackAppServer server = new SlackAppServer(app);
+ this.server = server;
+ CompletableFuture.runAsync(() -> {
+ try {
+ server.start();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ });
this.plugin.getLogger().info("HackCraft Slack started!");
sendMessage(":large_green_circle: *Server Started*", serverConsoleAvatarUrl, "Console");
}
@@ -347,7 +352,7 @@ public SlackBot(HCCorePlugin plugin) throws Exception {
public void disconnect() throws Exception {
sendMessage(":tw_octagonal_sign: *Server Stopped*", serverConsoleAvatarUrl, "Console");
- this.socket.stop();
+ this.server.stop();
}
@@ -475,18 +480,18 @@ private String getBotToken() {
return botToken;
}
- private String getAppToken() {
- String appToken = this.plugin.getConfig().getString("settings.slack-link.app-token");
+ private String getSigningSecret() {
+ String signingSecret = this.plugin.getConfig().getString("settings.slack-link.signing-secret");
- if (appToken == null) {
- throw new IllegalStateException("Slack app token is not set!");
+ if (signingSecret == null) {
+ throw new IllegalStateException("Slack signing secret is not set!");
}
- return appToken;
+ return signingSecret;
}
public User getUserInfo(String id) throws IOException {
- MethodsClient client = this.socket.getApp().getClient();
+ MethodsClient client = app.getClient();
try {
var res = client.usersInfo(r -> r.token(getBotToken()).user(id));
@@ -497,7 +502,7 @@ public User getUserInfo(String id) throws IOException {
}
void sendMessage(String msg, String iconURL, String username) throws IOException {
- MethodsClient client = Slack.getInstance().methods();
+ MethodsClient client = app.getClient();
try {
var res = client.chatPostMessage(
@@ -513,7 +518,7 @@ void sendMessage(String msg, String iconURL, String username) throws IOException
}
public boolean sendVerificationMessage(String id, String mcName, String uuid) throws IOException {
- MethodsClient client = this.socket.getApp().getClient();
+ MethodsClient client = app.getClient();
try {
var res = client.chatPostMessage(r -> r.token(getBotToken()).channel(id).text(