[FEAT] Allow Discord Mentions to be configurable
This commit is contained in:
@@ -89,4 +89,7 @@ public class ChatSettingsConfig {
|
||||
@SpecComment("Commands that should not be broadcasted to discord")
|
||||
public List<String> ignoredCommands = new ArrayList<String>() {{ add("particle"); add("login"); add("execute"); }};
|
||||
|
||||
@Path("allowMentionsFromChat")
|
||||
@SpecComment("Allow mentioning discord roles, users and channels from Minecraft Chat")
|
||||
public boolean allowMentionsFromChat = false;
|
||||
}
|
||||
|
@@ -10,11 +10,18 @@ import com.hypherionmc.sdlink.core.discord.commands.slash.general.ServerStatusSl
|
||||
import com.hypherionmc.sdlink.core.discord.hooks.BotReadyHooks;
|
||||
import com.hypherionmc.sdlink.core.discord.hooks.DiscordMessageHooks;
|
||||
import com.hypherionmc.sdlink.core.events.SDLinkReadyEvent;
|
||||
import com.hypherionmc.sdlink.core.managers.CacheManager;
|
||||
import com.hypherionmc.sdlink.core.managers.ChannelManager;
|
||||
import com.hypherionmc.sdlink.core.managers.PermissionChecker;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.events.channel.ChannelCreateEvent;
|
||||
import net.dv8tion.jda.api.events.channel.ChannelDeleteEvent;
|
||||
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
|
||||
import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent;
|
||||
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.events.role.RoleCreateEvent;
|
||||
import net.dv8tion.jda.api.events.role.RoleDeleteEvent;
|
||||
import net.dv8tion.jda.api.events.session.ReadyEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -57,6 +64,7 @@ public class DiscordEventHandler extends ListenerAdapter {
|
||||
BotReadyHooks.startActivityUpdates(event);
|
||||
BotReadyHooks.startTopicUpdates();
|
||||
CraterEventBus.INSTANCE.postEvent(new SDLinkReadyEvent());
|
||||
CacheManager.loadCache();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,4 +78,46 @@ public class DiscordEventHandler extends ListenerAdapter {
|
||||
event.reply("Success!").setEphemeral(true).queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuildJoin(@NotNull GuildJoinEvent event) {
|
||||
if (event.getJDA().getStatus() == JDA.Status.CONNECTED) {
|
||||
CacheManager.loadUserCache();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuildMemberRemove(@NotNull GuildMemberRemoveEvent event) {
|
||||
if (event.getJDA().getStatus() == JDA.Status.CONNECTED) {
|
||||
CacheManager.loadUserCache();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRoleCreate(@NotNull RoleCreateEvent event) {
|
||||
if (event.getJDA().getStatus() == JDA.Status.CONNECTED) {
|
||||
CacheManager.loadRoleCache();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRoleDelete(@NotNull RoleDeleteEvent event) {
|
||||
if (event.getJDA().getStatus() == JDA.Status.CONNECTED) {
|
||||
CacheManager.loadRoleCache();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChannelCreate(@NotNull ChannelCreateEvent event) {
|
||||
if (event.getJDA().getStatus() == JDA.Status.CONNECTED) {
|
||||
CacheManager.loadChannelCache();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChannelDelete(@NotNull ChannelDeleteEvent event) {
|
||||
if (event.getJDA().getStatus() == JDA.Status.CONNECTED) {
|
||||
CacheManager.loadChannelCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,75 @@
|
||||
package com.hypherionmc.sdlink.core.managers;
|
||||
|
||||
import com.hypherionmc.sdlink.core.discord.BotController;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.channel.ChannelType;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class CacheManager {
|
||||
|
||||
private static final HashMap<String, String> serverChannels = new HashMap<>();
|
||||
private static final HashMap<String, String> serverRoles = new HashMap<>();
|
||||
private static final HashMap<String, String> userCache = new HashMap<>();
|
||||
|
||||
public static void loadCache() {
|
||||
loadChannelCache();
|
||||
loadRoleCache();
|
||||
loadUserCache();
|
||||
}
|
||||
|
||||
public static void loadChannelCache() {
|
||||
serverChannels.clear();
|
||||
|
||||
JDA jda = BotController.INSTANCE.getJDA();
|
||||
|
||||
if (jda.getGuilds().isEmpty())
|
||||
return;
|
||||
|
||||
jda.getGuilds().get(0).getChannels(false).forEach(c -> {
|
||||
if (c.getType() != ChannelType.CATEGORY) {
|
||||
serverChannels.put("#" + c.getName(), c.getAsMention());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void loadRoleCache() {
|
||||
serverRoles.clear();
|
||||
|
||||
JDA jda = BotController.INSTANCE.getJDA();
|
||||
|
||||
if (jda.getGuilds().isEmpty())
|
||||
return;
|
||||
|
||||
jda.getGuilds().get(0).getRoles().forEach(r -> {
|
||||
if (r.isMentionable() && !r.isManaged()) {
|
||||
serverRoles.put("@" + r.getName(), r.getAsMention());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void loadUserCache() {
|
||||
userCache.clear();
|
||||
|
||||
JDA jda = BotController.INSTANCE.getJDA();
|
||||
|
||||
if (jda.getGuilds().isEmpty())
|
||||
return;
|
||||
|
||||
jda.getGuilds().get(0).getMembers().forEach(r -> {
|
||||
userCache.put("@" + r.getEffectiveName(), r.getAsMention());
|
||||
});
|
||||
}
|
||||
|
||||
public static HashMap<String, String> getServerChannels() {
|
||||
return serverChannels;
|
||||
}
|
||||
|
||||
public static HashMap<String, String> getServerRoles() {
|
||||
return serverRoles;
|
||||
}
|
||||
|
||||
public static HashMap<String, String> getUserCache() {
|
||||
return userCache;
|
||||
}
|
||||
}
|
@@ -48,9 +48,12 @@ public final class DiscordMessageBuilder {
|
||||
*/
|
||||
public DiscordMessageBuilder message(String message) {
|
||||
if (this.messageType == MessageType.CHAT) {
|
||||
message = message.replace("<@", "");
|
||||
message = message.replace("@everyone", "");
|
||||
message = message.replace("@here", "");
|
||||
|
||||
if (!SDLinkConfig.INSTANCE.chatConfig.allowMentionsFromChat) {
|
||||
message = message.replace("<@", "");
|
||||
}
|
||||
}
|
||||
|
||||
if (SDLinkConfig.INSTANCE.ignoreConfig.enabled) {
|
||||
|
Reference in New Issue
Block a user