UNPKG

rce.js

Version:

A wrapper for Rust Console Edition (RCE) that allows you to use RCON to create integrations.

381 lines 17.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = require("../types"); const regularExpressions_1 = require("../data/regularExpressions"); const events_1 = require("../data/events"); const playerKill_1 = require("../data/playerKill"); class ResponseHandler { static handle(manager, server, message) { // Emit the message event manager.emit(types_1.RCEEvent.Message, { server, message, }); // Event: Vending Machine Name const vendingMachineNameMatch = message.match(regularExpressions_1.RegularExpressions.VendingMachineName); if (vendingMachineNameMatch) { const player = manager.upsertPlayer(server.identifier, vendingMachineNameMatch[1], undefined, false); manager.emit(types_1.RCEEvent.VendingMachineName, { server, player, oldName: vendingMachineNameMatch[2], newName: vendingMachineNameMatch[3], }); } // Event: Quick Chat const quickChatMatch = message.match(regularExpressions_1.RegularExpressions.QuickChat); if (quickChatMatch) { const player = manager.upsertPlayer(server.identifier, quickChatMatch[3], undefined, true); manager.emit(types_1.RCEEvent.QuickChat, { server, type: quickChatMatch[2], player, message: quickChatMatch[4], }); } // Event: Player Suicide if (message.includes("was suicide by Suicide")) { const ign = message.split(" was suicide by Suicide")[0]; const player = manager.upsertPlayer(server.identifier, ign, undefined, true); manager.emit(types_1.RCEEvent.PlayerSuicide, { server, player, }); } // Event: Player Respawned if (message.includes("has entered the game")) { const ign = message.split(" [")[0]; const platform = message.includes("[SCARLETT]") ? types_1.GamePlatform.XBOX : types_1.GamePlatform.Playstation; // Create or get player and update platform const player = manager.upsertPlayer(server.identifier, ign, { platform, }, true); manager.emit(types_1.RCEEvent.PlayerRespawned, { server, player, platform, }); } // Event: Custom Zone Created const customZoneCreatedMatch = message.match(regularExpressions_1.RegularExpressions.CustomZoneCreated); if (customZoneCreatedMatch) { manager.emit(types_1.RCEEvent.CustomZoneCreated, { server, zone: customZoneCreatedMatch[1], }); } // Event: Custom Zone Removed const customZoneRemovedMatch = message.match(regularExpressions_1.RegularExpressions.CustomZoneRemoved); if (customZoneRemovedMatch) { manager.emit(types_1.RCEEvent.CustomZoneRemoved, { server, zone: customZoneRemovedMatch[1], }); } // Event: Player Role Add / Player Banned if (message.includes("Added")) { const playerRoleAddMatch = message.match(regularExpressions_1.RegularExpressions.PlayerRoleAdd); if (playerRoleAddMatch) { const admin = manager.upsertPlayer(server.identifier, playerRoleAddMatch[1], undefined, false); const player = manager.upsertPlayer(server.identifier, playerRoleAddMatch[2], undefined, false); manager.emit(types_1.RCEEvent.PlayerRoleAdd, { server, admin: playerRoleAddMatch[1] === "SERVER" ? undefined : admin, player, role: playerRoleAddMatch[3], }); } const playerBannedMatch = message.match(regularExpressions_1.RegularExpressions.PlayerBanned); if (playerBannedMatch) { const admin = manager.upsertPlayer(server.identifier, playerBannedMatch[1], undefined, false); const player = manager.upsertPlayer(server.identifier, playerBannedMatch[2], undefined, false); manager.emit(types_1.RCEEvent.PlayerBanned, { server, admin: playerBannedMatch[1] === "SERVER" ? undefined : admin, player, }); } } // Event: Player Role Remove / Player Unbanned if (message.includes("Removed")) { const playerRoleRemoveMatch = message.match(regularExpressions_1.RegularExpressions.PlayerRoleRemove); if (playerRoleRemoveMatch) { const admin = manager.upsertPlayer(server.identifier, playerRoleRemoveMatch[1], undefined, false); const player = manager.upsertPlayer(server.identifier, playerRoleRemoveMatch[2], undefined, false); manager.emit(types_1.RCEEvent.PlayerRoleRemove, { server, admin: playerRoleRemoveMatch[1] === "SERVER" ? undefined : admin, player, role: playerRoleRemoveMatch[3], }); } const playerUnbannedMatch = message.match(regularExpressions_1.RegularExpressions.PlayerUnbanned); if (playerUnbannedMatch) { const admin = manager.upsertPlayer(server.identifier, playerUnbannedMatch[1], undefined, false); const player = manager.upsertPlayer(server.identifier, playerUnbannedMatch[2], undefined, false); manager.emit(types_1.RCEEvent.PlayerUnbanned, { server, admin: playerUnbannedMatch[1] === "SERVER" ? undefined : admin, player, }); } } // Event: Item Spawn const itemSpawnMatch = message.match(regularExpressions_1.RegularExpressions.ItemSpawn); if (itemSpawnMatch) { const player = manager.upsertPlayer(server.identifier, itemSpawnMatch[1], undefined, true); manager.emit(types_1.RCEEvent.ItemSpawn, { server, player, item: itemSpawnMatch[3], quantity: parseInt(itemSpawnMatch[2]), }); } // Event: Note Edit const noteEditMatch = message.match(regularExpressions_1.RegularExpressions.NoteEdit); if (noteEditMatch) { const oldContent = noteEditMatch[2].trim().split("\\n")[0]; const newContent = noteEditMatch[3].trim().split("\\n")[0]; if (newContent.length > 0 && newContent !== oldContent) { const player = manager.upsertPlayer(server.identifier, noteEditMatch[1], undefined, true); manager.emit(types_1.RCEEvent.NoteEdit, { server, player, oldContent, newContent, }); } } // Event: Team Create const teamCreateMatch = message.match(regularExpressions_1.RegularExpressions.TeamCreate); if (teamCreateMatch) { const teamId = parseInt(teamCreateMatch[2]); const owner = teamCreateMatch[1]; // Create or get player and add team to teams list const serverData = manager.getServer(server.identifier); let leaderPlayer; if (serverData) { const team = { id: teamId, leader: null, members: [], }; leaderPlayer = manager.upsertPlayer(server.identifier, owner, { team, }, true); team.leader = leaderPlayer; team.members = [leaderPlayer]; serverData.teams.push(team); manager.updateServer(serverData); } else { leaderPlayer = manager.upsertPlayer(server.identifier, owner, undefined, true); } manager.emit(types_1.RCEEvent.TeamCreated, { server, team: serverData?.teams.find((t) => t.id === teamId) || { id: teamId, leader: leaderPlayer, members: [leaderPlayer], }, }); } // Event: Team Join const teamJoinMatch = message.match(regularExpressions_1.RegularExpressions.TeamJoin); if (teamJoinMatch) { const teamId = parseInt(teamJoinMatch[3]); const ign = teamJoinMatch[1]; const serverData = manager.getServer(server.identifier); let joiningPlayer; if (serverData) { const team = serverData.teams.find((t) => t.id === teamId); if (team && !team.members.some((member) => member.ign === ign)) { joiningPlayer = manager.upsertPlayer(server.identifier, ign, { team, }, true); team.members.push(joiningPlayer); manager.updateServer(serverData); } else { joiningPlayer = manager.upsertPlayer(server.identifier, ign, undefined, true); } } else { joiningPlayer = manager.upsertPlayer(server.identifier, ign, undefined, true); } const team = serverData?.teams.find((t) => t.id === teamId); manager.emit(types_1.RCEEvent.TeamJoin, { server, team: team || { id: teamId, leader: joiningPlayer, members: [joiningPlayer], }, player: joiningPlayer, }); } // Event: Team Leave const teamLeaveMatch = message.match(regularExpressions_1.RegularExpressions.TeamLeave); if (teamLeaveMatch) { const ign = teamLeaveMatch[1]; const teamId = parseInt(teamLeaveMatch[3]); const serverData = manager.getServer(server.identifier); if (serverData) { const team = serverData.teams.find((t) => t.id === teamId); if (team) { team.members = team.members.filter((member) => member.ign !== ign); manager.upsertPlayer(server.identifier, ign, { team: null }, true); if (team.members.length === 0) { serverData.teams = serverData.teams.filter((t) => t.id !== teamId); } manager.updateServer(serverData); } } const leavingPlayer = manager.upsertPlayer(server.identifier, ign, { team: null, }, true); const team = serverData?.teams.find((t) => t.id === teamId); manager.emit(types_1.RCEEvent.TeamLeave, { server, team: team || { id: teamId, leader: leavingPlayer, members: [], }, player: leavingPlayer, }); } // Event: Team Invite const teamInviteMatch = message.match(regularExpressions_1.RegularExpressions.TeamInvite); if (teamInviteMatch) { const teamId = parseInt(teamInviteMatch[3]); const player = manager.upsertPlayer(server.identifier, teamInviteMatch[2], undefined, true); const serverData = manager.getServer(server.identifier); const team = serverData?.teams.find((t) => t.id === teamId); manager.emit(types_1.RCEEvent.TeamInvite, { server, team: team || { id: teamId, leader: player, members: [], }, player, }); } // Event: Team Invite Cancel const teamInviteCancelMatch = message.match(regularExpressions_1.RegularExpressions.TeamInviteCancel); if (teamInviteCancelMatch) { const teamId = parseInt(teamInviteMatch[3]); const player = manager.upsertPlayer(server.identifier, teamInviteCancelMatch[1], undefined, false); const serverData = manager.getServer(server.identifier); const team = serverData?.teams.find((t) => t.id === teamId); manager.emit(types_1.RCEEvent.TeamInviteCancel, { server, team: team || { id: teamId, leader: player, members: [], }, player, }); } // Event: Team Promoted const teamPromotedMatch = message.match(regularExpressions_1.RegularExpressions.TeamPromoted); if (teamPromotedMatch) { const teamId = parseInt(teamPromotedMatch[3]); const oldOwner = teamPromotedMatch[1]; const newOwner = teamPromotedMatch[2]; const serverData = manager.getServer(server.identifier); if (serverData) { const team = serverData.teams.find((t) => t.id === teamId); if (team) { team.leader = manager.upsertPlayer(server.identifier, newOwner, { team, }, false); manager.updateServer(serverData); } } const oldOwnerPlayer = manager.upsertPlayer(server.identifier, oldOwner, undefined, true); const newOwnerPlayer = manager.upsertPlayer(server.identifier, newOwner, undefined, false); const team = serverData?.teams.find((t) => t.id === teamId); manager.emit(types_1.RCEEvent.TeamPromoted, { server, team: team || { id: teamId, leader: newOwnerPlayer, members: [], }, oldOwner: oldOwnerPlayer, newOwner: newOwnerPlayer, }); } // Event: Kit Spawn const kitSpawnMatch = message.match(regularExpressions_1.RegularExpressions.KitSpawn); if (kitSpawnMatch) { const player = manager.upsertPlayer(server.identifier, kitSpawnMatch[1], undefined, true); manager.emit(types_1.RCEEvent.KitSpawn, { server, admin: undefined, player, kit: kitSpawnMatch[2], }); } // Event: Kit Give const kitGiveMatch = message.match(regularExpressions_1.RegularExpressions.KitGive); if (kitGiveMatch) { const player = manager.upsertPlayer(server.identifier, kitGiveMatch[2], undefined, true); const admin = manager.upsertPlayer(server.identifier, kitGiveMatch[1], undefined, false); manager.emit(types_1.RCEEvent.KitSpawn, { server, admin, player, kit: kitGiveMatch[3], }); } // Event: Event Start if (message.startsWith("[EVENT")) { for (const [key, options] of Object.entries(events_1.EVENTS)) { if (message.includes(key)) { manager.emit(types_1.RCEEvent.EventStart, { server, event: options.name, special: options.special, }); } } } // Event: Player Kill if (message.includes(" was killed by ")) { const [victim, killer] = message .split(" was killed by ") .map((str) => str.trim()); const victimData = (0, playerKill_1.getKill)(victim); const killerData = (0, playerKill_1.getKill)(killer); if (victimData.type === playerKill_1.PlayerKillType.Player) { victimData.player = manager.upsertPlayer(server.identifier, victimData.name, undefined, false); } if (killerData.type === playerKill_1.PlayerKillType.Player) { killerData.player = manager.upsertPlayer(server.identifier, killerData.name, undefined, true); } manager.emit(types_1.RCEEvent.PlayerKill, { server, victim: victimData, killer: killerData, }); } // Event: Server Saving if (message.startsWith("[ SAVE ]")) { const serverSavingMatch = message.match(regularExpressions_1.RegularExpressions.ServerSaving); if (serverSavingMatch) { manager.emit(types_1.RCEEvent.ServerSaving, { server, entities: parseInt(serverSavingMatch[1]), }); } } } } exports.default = ResponseHandler; //# sourceMappingURL=responseHandler.js.map