Skip to content
Snippets Groups Projects
Commit f7521c2d authored by Lilly Schramm's avatar Lilly Schramm :cherry_blossom:
Browse files

feat: Add Caching

parent af2c4cbd
Branches
Tags 0.1.1
No related merge requests found
Pipeline #219 passed
# Changelog
## 0.1.1
### Added
- Added cache for discord channel names.
- Added cache for discord usernames.
- Added cache for guilds.
- Added cache for message channels.
## 0.1.0
### Added
......
......@@ -6,7 +6,7 @@
<groupId>de.eps-dev</groupId>
<artifactId>minecord</artifactId>
<version>0.1.0</version>
<version>0.1.1</version>
<packaging>jar</packaging>
<name>Minecord</name>
......
......@@ -6,14 +6,18 @@ import de.epsdev.minecord.events.e_OnPlayerChat;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.logging.Logger;
public final class Minecord extends JavaPlugin {
public static Bot bot;
public static PluginConfig pluginConfig;
public static Logger pluginLogger;
@Override
public void onEnable() {
pluginConfig = new PluginConfig(this);
pluginLogger = this.getLogger();
bot = new Bot();
registerEvents();
......
......@@ -9,10 +9,12 @@ import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.channel.GuildMessageChannel;
import discord4j.core.spec.MessageCreateSpec;
import discord4j.discordjson.Id;
import discord4j.rest.entity.RestChannel;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import java.util.HashMap;
import java.util.List;
public class Bot {
......@@ -21,6 +23,11 @@ public class Bot {
private final String CHANNEL_NAME;
private final String DISCORD_TOKEN;
private final HashMap<Snowflake, String> channelNameCache = new HashMap<>();
private final HashMap<Id, String> userTagCache = new HashMap<>();
private List<Guild> guildCache = null;
private GuildMessageChannel activeGuildMessageChannel = null;
public Bot() {
DISCORD_TOKEN = Minecord.pluginConfig.getDiscordToken();
CHANNEL_NAME = Minecord.pluginConfig.getChannelName();
......@@ -31,16 +38,43 @@ public class Bot {
initializeMessageListener();
}
private String getUserTagFromMessage(Message message) {
Id userId = message.getUserData().id();
String tag = userTagCache.getOrDefault(userId, null);
if (tag == null) {
tag = message.getAuthorAsMember().block().getTag();
userTagCache.put(userId, tag);
}
return tag;
}
private String getChannelNameFromSnowflake(Snowflake channelId) {
String name = channelNameCache.getOrDefault(channelId, null);
if (name == null) {
RestChannel restChannel = gateway.getChannelById(channelId).block().getRestChannel();
name = restChannel.getData().block().name().get();
channelNameCache.put(channelId, name);
}
return name;
}
private String getChannelNameFromMessage(Message message) {
Snowflake channelId = message.getChannelId();
RestChannel restChannel = gateway.getChannelById(channelId).block().getRestChannel();
return restChannel.getData().block().name().get();
return getChannelNameFromSnowflake(channelId);
}
private void initializeMessageListener() {
gateway.on(MessageCreateEvent.class).subscribe(event -> {
Message message = event.getMessage();
String userTag = getUserTagFromMessage(message);
String channelName = getChannelNameFromMessage(message);
boolean isRealUser = message.getUserData().bot().isAbsent();
......@@ -48,7 +82,7 @@ public class Bot {
if (channelName.equals(CHANNEL_NAME) && isRealUser) {
Bukkit.getServer().broadcastMessage
(String.format("<" + ChatColor.BLUE + "%s" + ChatColor.RESET + "> %s",
message.getAuthorAsMember().block().getTag(),
userTag,
message.getContent()
));
}
......@@ -56,17 +90,29 @@ public class Bot {
}
private List<Guild> getGuilds() {
return gateway.getGuilds().collectList().block();
if (guildCache == null) {
guildCache = gateway.getGuilds().collectList().block();
}
return guildCache;
}
private GuildMessageChannel getTextChannelFromGuildByName(Guild guild, String name) {
return guild.getChannels().ofType(GuildMessageChannel.class)
.filter((channel) -> channel.getName().equals(name)).blockFirst();
return guild.getChannels().ofType(GuildMessageChannel.class)
.filter((channel) -> channel.getName().equals(name)).blockFirst();
}
private GuildMessageChannel getActiveGuildMessageChannel(Guild guild) {
if (activeGuildMessageChannel == null) {
activeGuildMessageChannel = getTextChannelFromGuildByName(guild, CHANNEL_NAME);
}
return activeGuildMessageChannel;
}
public void sendMessage(String message) {
Guild guild = getGuilds().get(0);
GuildMessageChannel messageChannel = getTextChannelFromGuildByName(guild, CHANNEL_NAME);
GuildMessageChannel messageChannel = getActiveGuildMessageChannel(guild);
messageChannel.createMessage(
MessageCreateSpec.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment