diff --git a/scripts/minecraft.js b/scripts/minecraft.js index 585be37..b8f3f84 100644 --- a/scripts/minecraft.js +++ b/scripts/minecraft.js @@ -23,6 +23,8 @@ const messageTypes = { }; const chatMessageRegex = /^\[(?:.*?)\]: \<(?.*)\> (?.*)/; +const joinNotificationRegex = /^\[(?:.*?)\]: (?.*) joined the game/; +const leaveNotificationRegex = /^\[(?:.*?)\]: (?.*) left the game/; const rconConnection = new Rcon("localhost", "25575", process.env.RCON_PASSWORD); export default class GatewayClient { @@ -91,7 +93,7 @@ export default class GatewayClient { console.log("gateway: open"); }); this.ws.on("close", () => { - console.log("gateway: closed"); + console.log("gateway: closed, reconnecting in 4000ms"); setTimeout(() => { console.log("gateway: reconnecting"); this.connect(token); @@ -141,10 +143,10 @@ async function main() { rconConnection.on("error", (e) => { console.error("rcon: got error", e); if (!rconConnection.hasAuthed) { - console.log("rcon: reconnecting in 1200ms due to error before hasAuthed"); + console.log("rcon: reconnecting in 5000ms due to error before hasAuthed (server might not be up yet?)"); setTimeout(() => { rconConnection.connect(); - }, 1200); + }, 5000); } }); const gateway = new GatewayClient(GATEWAY_ORIGIN); @@ -160,12 +162,24 @@ async function main() { process.stdin.on("data", async (rawDataBuffer) => { const stringData = rawDataBuffer.toString().trim(); console.log(stringData); - const result = chatMessageRegex.exec(stringData); - if (!result) - return; - const { username, message } = result.groups; - await sendBridgeMessageAs(TARGET_GUILD_ID, TARGET_CHANNEL_ID, message, username, null); + const joinResult = joinNotificationRegex.exec(stringData); + if (joinResult) { + await sendBridgeMessageAs(TARGET_GUILD_ID, TARGET_CHANNEL_ID, `**${joinResult.groups.username}** joined the game`, null, null); + return; + } + + const leaveResult = leaveNotificationRegex.exec(stringData); + if (leaveResult) { + await sendBridgeMessageAs(TARGET_GUILD_ID, TARGET_CHANNEL_ID, `**${leaveResult.groups.username}** left the game`, null, null); + return; + } + + const messageResult = chatMessageRegex.exec(stringData); + if (messageResult) { + await sendBridgeMessageAs(TARGET_GUILD_ID, TARGET_CHANNEL_ID, messageResult.groups.message, messageResult.groups.username, null); + return; + } }); }