From 68049bd2296480b37d3f2bea6855dd3c36526615 Mon Sep 17 00:00:00 2001 From: oof2win2 Date: Thu, 11 Nov 2021 09:11:54 +0100 Subject: [PATCH 1/5] :wastebasket: Disable setting channel topic Resolves #116 --- src/helpers/serverHandler.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/helpers/serverHandler.ts b/src/helpers/serverHandler.ts index c266e13..403bdc6 100644 --- a/src/helpers/serverHandler.ts +++ b/src/helpers/serverHandler.ts @@ -136,11 +136,6 @@ class serverHandler { const server = out.server; let channel = this.client.channels.cache.get(server.discordid); if (!channel || !channel.isText() || channel.type === "dm") return; - if (line.includes("; Factorio")) { - return channel.setTopic( - `Running ${this.formatVersion(line)} since ${this.formatDate(line)}` - ); - } if (line.includes("Error")) { if (channel.name !== "dev-dump") { const errorChannel = From 2734750989d401004bb26529c7cd13cc7a813a48 Mon Sep 17 00:00:00 2001 From: oof2win2 Date: Thu, 11 Nov 2021 09:32:21 +0100 Subject: [PATCH 2/5] :sparkles: Command to get logs of server --- package-lock.json | 8 ++++++ package.json | 1 + src/commands/Administration/getlogs.ts | 37 ++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/commands/Administration/getlogs.ts diff --git a/package-lock.json b/package-lock.json index 10d97c4..41ce3ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3846,6 +3846,14 @@ "typed-emitter": "^0.1.0" } }, + "read-last-lines": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/read-last-lines/-/read-last-lines-1.8.0.tgz", + "integrity": "sha512-oPL0cnZkhsO2xF7DBrdzVhXSNajPP5TzzCim/2IAjeGb17ArLLTRriI/ceV6Rook3L27mvbrOvLlf9xYYnaftQ==", + "requires": { + "mz": "^2.7.0" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", diff --git a/package.json b/package.json index bffe827..a1a0163 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "prisma": "^3.0.1", "prom-client": "^13.1.0", "rcon-client": "^4.2.3", + "read-last-lines": "^1.8.0", "reflect-metadata": "^0.1.13", "request": "^2.88.2", "request-promise": "^4.2.6", diff --git a/src/commands/Administration/getlogs.ts b/src/commands/Administration/getlogs.ts new file mode 100644 index 0000000..07e82c9 --- /dev/null +++ b/src/commands/Administration/getlogs.ts @@ -0,0 +1,37 @@ +import { Message, MessageAttachment } from "discord.js"; +import { Command } from "../../base/Command.js"; +import serverJS from "../../servers"; +import lastLines from "read-last-lines" + +const Rollback: Command = { + name: "getlogs", + description: "Get logs from a Factorio server", + usage: "(channel) [logcount]", + category: "Administration", + aliases: [], + examples: ["{{p}}getlogs #awf-regular 50"], + dirname: __dirname, + enabled: true, + guildOnly: false, + memberPermissions: ["ADMINISTRATOR"], + botPermissions: ["SEND_MESSAGES", "EMBED_LINKS"], + nsfw: false, + ownerOnly: false, + customPermissions: ["MANAGE_SERVER"], + run: async ({ client, message, args }) => { + if (!message.mentions.channels.first()) + return message.reply("No channel to get logs of provided!"); + args.shift(); // remove mention + const lineCount = Math.min(Number(args.shift()) || 50, 50) + const server = serverJS.find( + (server) => server.discordid === message.mentions.channels.first().id + ); + if (!server) return message.reply("Invalid channel, not tied to a server!"); + const fullPath = `${client.config.serverpath}/${server.path}/factorio-current.log` + const lines = await lastLines.read(fullPath, lineCount < 0 ? lineCount : 50) + const attachment = new MessageAttachment(Buffer.from(lines), "log.txt") + return message.channel.send(`Logs for <#${server.discordid}> are sent as an attachement`, {files: [attachment]}) + }, +}; + +export default Rollback; From 948b3e185f6e49d8f9141f636213aa4f32cc5e46 Mon Sep 17 00:00:00 2001 From: oof2win2 Date: Thu, 11 Nov 2021 09:47:06 +0100 Subject: [PATCH 3/5] :sparkles: Formatting for ?po Resolves #119 --- src/commands/Factorio/onlineplayers.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/commands/Factorio/onlineplayers.ts b/src/commands/Factorio/onlineplayers.ts index f8e4805..bcf6e99 100644 --- a/src/commands/Factorio/onlineplayers.ts +++ b/src/commands/Factorio/onlineplayers.ts @@ -23,11 +23,11 @@ const OnlinePlayers: Command = { const serversWithScenario = rcon.rconConnections .filter((connection) => connection.hasScenario) - .filter((connection) => connection.server.hidden === false) + .filter((connection) => connection.server.hidden === false) .map((connection) => connection.server.discordname); const serversWithoutScenario = rcon.rconConnections .filter((connection) => !connection.hasScenario) - .filter((connection) => connection.server.hidden === false) + .filter((connection) => connection.server.hidden === false) .map((connection) => connection.server.discordname); const scenarioOutputProm = serversWithScenario.map((discordname) => @@ -66,7 +66,14 @@ const OnlinePlayers: Command = { response.server.discordname, "Server is unreachable" ); - embed.addField(response.server.discordname, response.resp); + const players = response.resp + .split("\n") + .slice(1) + .map((line) => line.slice(0, line.indexOf(" (online)"))); + embed.addField( + response.server.discordname, + players.join("\n") || "Nobody is online" + ); }); return message.channel.send(embed); }, From 910ab7d52bad190132a9fd7fd69e627b6c6a049d Mon Sep 17 00:00:00 2001 From: oof2win2 Date: Thu, 11 Nov 2021 09:55:46 +0100 Subject: [PATCH 4/5] :sparkles: Remove player data when they are banned Resolves #114 --- src/helpers/functions.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/helpers/functions.ts b/src/helpers/functions.ts index 3c9a2d7..e722132 100644 --- a/src/helpers/functions.ts +++ b/src/helpers/functions.ts @@ -11,6 +11,8 @@ import discord from "discord.js"; import fs from "fs"; import { BannedPlayers, ExtraBans } from "./sqlitedb"; import { FactorioServer } from "../types"; +import UserModel from "../base/User"; +import { mongoose } from "@typegoose/typegoose"; export type ArgumentTypes = F extends (args: infer A) => any ? A @@ -208,6 +210,17 @@ export async function addban(playername: string, reason: string) { reason: reason || "No reason given", }); + UserModel.deleteMany({factorioName: playername}).exec() + mongoose.connections[1] + .getClient() + .db("scenario") + .collections() + .then((collections) => { + collections.map((collection) => { + collection.deleteMany({playername: playername}) + }) + }) + return player; } From 7842a7db655b1995b1737ac3c1228c2ff3a72fbb Mon Sep 17 00:00:00 2001 From: oof2win2 Date: Mon, 15 Nov 2021 17:28:54 +0100 Subject: [PATCH 5/5] :sparkles: Stop servers without players Stop servers that don't have players in them --- src/helpers/serverUPSHandler.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/helpers/serverUPSHandler.ts b/src/helpers/serverUPSHandler.ts index 46424ff..8a10daf 100644 --- a/src/helpers/serverUPSHandler.ts +++ b/src/helpers/serverUPSHandler.ts @@ -67,12 +67,18 @@ class UPSManager { Object.keys(this.servers).forEach((serverKey) => { if (this.servers[serverKey]?.discordid === server.discordid) this.servers[serverKey].playercount++; + if (this.servers[serverKey] == 1) { + rcon.rconCommand("/sc game.tick_paused = true", server.discordid) + } }); } if (line.type === "leave") { Object.keys(this.servers).forEach((serverKey) => { if (this.servers[serverKey]?.discordid === server.discordid) this.servers[serverKey].playercount--; + if (this.servers[serverKey] == 0) { + rcon.rconCommand("/sc game.tick_paused = true", server.discordid) + } }); } }