Added truncate for servers with long list of mods (discord max length 1024 chars) and feed parse optimization

This commit is contained in:
Dennis Heinrich 2024-12-12 12:37:32 +01:00
parent a28796751a
commit 696e8f1749
2 changed files with 20 additions and 9 deletions

View file

@ -92,6 +92,16 @@ export default class DiscordEmbed {
return true; 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<string> {
return text.length > maxLength ? text.slice(0, maxLength - 3) + '...' : text;
}
/** /**
* Send server stats embed in a channel * Send server stats embed in a channel
* @param serverStats * @param serverStats
@ -113,6 +123,8 @@ export default class DiscordEmbed {
embed.setThumbnail(config.application.serverMapUrl); embed.setThumbnail(config.application.serverMapUrl);
let playerListString: string; let playerListString: string;
let playerListTitleString = `${config.translation.discordEmbed.titlePlayerCount} (${serverStats.getPlayerCount()??0}/${serverStats.getMaxPlayerCount()??0}):`;
if(serverStats.getPlayerList().length === 0) { if(serverStats.getPlayerList().length === 0) {
playerListString = config.translation.discordEmbed.noPlayersOnline; playerListString = config.translation.discordEmbed.noPlayersOnline;
} else { } else {
@ -127,7 +139,7 @@ export default class DiscordEmbed {
let serverMods = serverStats.getServerMods(); let serverMods = serverStats.getServerMods();
let serverModsText = "-/-"; let serverModsText = "-/-";
if(serverMods.length > 0) { if(serverMods.length > 0) {
serverModsText = serverMods.map(mod => `${mod.name}`).join(', '); serverModsText = await this.truncateText(serverMods.map(mod => `${mod.name}`).join(', '));
} }
// @ts-ignore // @ts-ignore
@ -138,12 +150,11 @@ export default class DiscordEmbed {
{name: config.translation.discordEmbed.titleServerMap, value: serverStats.getServerMap()}, {name: config.translation.discordEmbed.titleServerMap, value: serverStats.getServerMap()},
{name: config.translation.discordEmbed.titleServerMods, value: serverModsText}, {name: config.translation.discordEmbed.titleServerMods, value: serverModsText},
{ {
name: `${config.translation.discordEmbed.titlePlayerCount} (${serverStats.getPlayerCount()}/${serverStats.getMaxPlayerCount()}):`, name: playerListTitleString,
value: playerListString value: playerListString
}, },
); );
} }
this.appLogger.debug(embed);
return embed; return embed;
} }
} }

View file

@ -161,18 +161,18 @@ export default class ServerStatusFeed {
/** /**
* Returns the server player count * Returns the server player count
* @returns {number} The server player count * @returns {number | null | undefined} The server player count
*/ */
public getPlayerCount(): number { public getPlayerCount(): number | null | undefined {
return <number>this.getServerStats()?.Server.Slots.numUsed; return <number>this.getServerStats()?.Server?.Slots?.numUsed;
} }
/** /**
* Returns the server player count * Returns the server player count
* @returns {number} The server player count * @returns {number | null | undefined} The server player count
*/ */
public getMaxPlayerCount(): number { public getMaxPlayerCount(): number | null | undefined {
return <number>this.getServerStats()?.Server.Slots.capacity; return <number>this.getServerStats()?.Server?.Slots?.capacity;
} }
/** /**