From 696e8f17498cf2c88c3bcc0c5c57e9ea78b00dd3 Mon Sep 17 00:00:00 2001 From: Dennis Heinrich Date: Thu, 12 Dec 2024 12:37:32 +0100 Subject: [PATCH] Added truncate for servers with long list of mods (discord max length 1024 chars) and feed parse optimization --- source/Services/DiscordEmbed.ts | 17 ++++++++++++++--- source/Services/ServerStatusFeed.ts | 12 ++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/source/Services/DiscordEmbed.ts b/source/Services/DiscordEmbed.ts index 3c8df1d..f0552ae 100644 --- a/source/Services/DiscordEmbed.ts +++ b/source/Services/DiscordEmbed.ts @@ -92,6 +92,16 @@ export default class DiscordEmbed { return true; } + /** + * Truncates a string at a given length + * @param text The input text to truncate + * @param maxLength The allowed characters until truncation + * @returns The truncated string + */ + private async truncateText(text: string, maxLength = 1024): Promise { + return text.length > maxLength ? text.slice(0, maxLength - 3) + '...' : text; + } + /** * Send server stats embed in a channel * @param serverStats @@ -113,6 +123,8 @@ export default class DiscordEmbed { embed.setThumbnail(config.application.serverMapUrl); let playerListString: string; + let playerListTitleString = `${config.translation.discordEmbed.titlePlayerCount} (${serverStats.getPlayerCount()??0}/${serverStats.getMaxPlayerCount()??0}):`; + if(serverStats.getPlayerList().length === 0) { playerListString = config.translation.discordEmbed.noPlayersOnline; } else { @@ -127,7 +139,7 @@ export default class DiscordEmbed { let serverMods = serverStats.getServerMods(); let serverModsText = "-/-"; if(serverMods.length > 0) { - serverModsText = serverMods.map(mod => `${mod.name}`).join(', '); + serverModsText = await this.truncateText(serverMods.map(mod => `${mod.name}`).join(', ')); } // @ts-ignore @@ -138,12 +150,11 @@ export default class DiscordEmbed { {name: config.translation.discordEmbed.titleServerMap, value: serverStats.getServerMap()}, {name: config.translation.discordEmbed.titleServerMods, value: serverModsText}, { - name: `${config.translation.discordEmbed.titlePlayerCount} (${serverStats.getPlayerCount()}/${serverStats.getMaxPlayerCount()}):`, + name: playerListTitleString, value: playerListString }, ); } - this.appLogger.debug(embed); return embed; } } \ No newline at end of file diff --git a/source/Services/ServerStatusFeed.ts b/source/Services/ServerStatusFeed.ts index 73f3849..c4db9ce 100644 --- a/source/Services/ServerStatusFeed.ts +++ b/source/Services/ServerStatusFeed.ts @@ -161,18 +161,18 @@ export default class ServerStatusFeed { /** * Returns the server player count - * @returns {number} The server player count + * @returns {number | null | undefined} The server player count */ - public getPlayerCount(): number { - return this.getServerStats()?.Server.Slots.numUsed; + public getPlayerCount(): number | null | undefined { + return this.getServerStats()?.Server?.Slots?.numUsed; } /** * Returns the server player count - * @returns {number} The server player count + * @returns {number | null | undefined} The server player count */ - public getMaxPlayerCount(): number { - return this.getServerStats()?.Server.Slots.capacity; + public getMaxPlayerCount(): number | null | undefined { + return this.getServerStats()?.Server?.Slots?.capacity; } /**