mirror of
https://github.com/cloudmaker97/FS25-Discord-Bot.git
synced 2025-12-06 08:28:33 +00:00
Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ed492e9045 | |||
| 24f65956ab | |||
| 4e6668c2e5 | |||
| 696e8f1749 |
11 changed files with 37 additions and 18 deletions
|
|
@ -74,7 +74,7 @@ discord.js library to interact with Discord and fetches server stats via the XML
|
||||||
2. Build and start the container:
|
2. Build and start the container:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose up -d --build
|
docker compose up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
3. The bot should now be running and posting server stats to the specified Discord channel.
|
3. The bot should now be running and posting server stats to the specified Discord channel.
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"application": {
|
"application": {
|
||||||
"serverPassword": "TypeMyServerPasswordHere",
|
"serverPassword": "TypeMyServerPasswordHere",
|
||||||
"serverStatsUrl": "http://1.1.1.1:8080/feed/dedicated-server-stats.xml",
|
"serverStatsUrl": "http://127.0.0.1:8080/feed/dedicated-server-stats.xml",
|
||||||
"serverMapUrl": "http://1.1.1.1:8080/feed/dedicated-server-stats-map.jpg",
|
"serverMapUrl": "http://127.0.0.1:8080/feed/dedicated-server-stats-map.jpg",
|
||||||
"updateIntervalSeconds": 30
|
"updateIntervalSeconds": 30
|
||||||
},
|
},
|
||||||
"discord": {
|
"discord": {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"application": {
|
"application": {
|
||||||
"serverPassword": "TypeMyServerPasswordHere",
|
"serverPassword": "TypeMyServerPasswordHere",
|
||||||
"serverStatsUrl": "http://1.1.1.1:8080/feed/dedicated-server-stats.xml",
|
"serverStatsUrl": "http://127.0.0.1:8080/feed/dedicated-server-stats.xml",
|
||||||
"serverMapUrl": "http://1.1.1.1:8080/feed/dedicated-server-stats-map.jpg",
|
"serverMapUrl": "http://127.0.0.1:8080/feed/dedicated-server-stats-map.jpg",
|
||||||
"updateIntervalSeconds": 30
|
"updateIntervalSeconds": 30
|
||||||
},
|
},
|
||||||
"discord": {
|
"discord": {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
version: "2"
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
ls25bot:
|
ls25bot:
|
||||||
build:
|
build:
|
||||||
|
|
@ -24,4 +22,14 @@ services:
|
||||||
sleep 7200 # Each 2 hours
|
sleep 7200 # Each 2 hours
|
||||||
echo "Restarting ls25bot container at $(date)"
|
echo "Restarting ls25bot container at $(date)"
|
||||||
docker restart ls25bot
|
docker restart ls25bot
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# This is used for development purposes only
|
||||||
|
webserver:
|
||||||
|
image: nginx:alpine
|
||||||
|
container_name: ls25bot-webserver
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./misc/files:/usr/share/nginx/html
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
BIN
misc/files/feed/dedicated-server-stats-map.jpg
Normal file
BIN
misc/files/feed/dedicated-server-stats-map.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "ls25-discord-bot",
|
"name": "ls25-discord-bot",
|
||||||
"version": "0.1.7",
|
"version": "0.1.8",
|
||||||
"description": "A simple discord bot for farming simulator 25",
|
"description": "A simple discord bot for farming simulator 25",
|
||||||
"main": "source/Main.ts",
|
"main": "source/Main.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue