frost-api
Version:
A wrapper for Rust Console Edition (RCE) that allows you to use the websocket and API from G-Portal.
299 lines • 12.2 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../constants");
const CommandHandler_1 = __importDefault(require("../servers/CommandHandler"));
const EVENTS = {
event_airdrop: {
name: "Airdrop",
special: false,
},
event_cargoship: {
name: "Cargo Ship",
special: false,
},
event_cargoheli: {
name: "Chinook",
special: false,
},
event_helicopter: {
name: "Patrol Helicopter",
special: false,
},
event_halloween: {
name: "Halloween",
special: true,
},
event_xmas: {
name: "Christmas",
special: true,
},
event_easter: {
name: "Easter",
special: true,
},
};
class ConsoleMessagesHandler {
static handle(manager, message, server) {
const messageArray = message.payload.data.consoleMessages.message
?.split("\n")
.filter((e) => e !== "") || [];
if (!server.flags.includes("INIT_LOGS")) {
manager.logger.debug(`[${server.identifier}] Initial Logs Received: ${messageArray.length}`);
server.flags.push("INIT_LOGS");
return manager.servers.update(server);
}
let currentCommand;
messageArray.forEach((data) => {
const logMatch = data.match(constants_1.RegularExpressions.Log);
if (!logMatch)
return;
const [, date, content] = logMatch;
const log = content.trim();
if (!log)
return;
manager.events.emit(constants_1.RCEEvent.Message, { server, message: log });
// EVENT: COMMAND_EXECUTING
const commandExecutingMatch = log.match(constants_1.RegularExpressions.CommandExecuting);
if (commandExecutingMatch) {
const cmd = commandExecutingMatch[1];
manager.logger.debug(`[${server.identifier}] Executing Match: ${cmd}`);
manager.events.emit(constants_1.RCEEvent.ExecutingCommand, {
server,
command: cmd,
});
const command = CommandHandler_1.default.get(server.identifier, cmd);
if (command && !command.timestamp) {
manager.logger.debug(`[${server.identifier}] Command In Queue: ${cmd}`);
command.timestamp = date;
CommandHandler_1.default.add(command);
currentCommand = cmd;
return manager.logger.debug(`[${server.identifier}] Command Timestamp Added: ${cmd}`);
}
}
// Check for Command Response
const command = CommandHandler_1.default.getQueued(server.identifier, date);
if (command && !log.startsWith("[ SAVE ]")) {
manager.logger.debug(`[${server.identifier}] Command Response Found: ${command.command}`);
command.resolve({
ok: true,
response: log,
});
clearTimeout(command.timeout);
CommandHandler_1.default.remove(command);
}
else if (currentCommand) {
manager.logger.debug(`[${server.identifier}] Command Response Not Found, Using Other Method: ${currentCommand}`);
const command = CommandHandler_1.default.get(server.identifier, currentCommand);
if (command) {
command.resolve({
ok: true,
response: log,
});
clearTimeout(command.timeout);
CommandHandler_1.default.remove(command);
currentCommand = null;
}
}
// EVENT: VENDING_MACHINE_NAME
const vendingMachineNameMatch = log.match(constants_1.RegularExpressions.VendingMachineName);
if (vendingMachineNameMatch) {
manager.events.emit(constants_1.RCEEvent.VendingMachineName, {
server,
ign: vendingMachineNameMatch[1],
oldName: vendingMachineNameMatch[2],
newName: vendingMachineNameMatch[3],
});
}
// EVENT: QUICK_CHAT
const quickChatMatch = log.match(constants_1.RegularExpressions.QuickChat);
if (quickChatMatch) {
const types = {
"[CHAT TEAM]": "team",
"[CHAT SERVER]": "server",
"[CHAT LOCAL]": "local",
};
manager.events.emit(constants_1.RCEEvent.QuickChat, {
server,
type: types[quickChatMatch[1]],
ign: quickChatMatch[3],
message: quickChatMatch[4],
});
}
// EVENT: PLAYER_SUICIDE
if (log.includes("was suicide by Suicide")) {
const ign = log.split(" was suicide by Suicide")[0];
manager.events.emit(constants_1.RCEEvent.PlayerSuicide, {
server,
ign,
});
}
// EVENT: PLAYER_RESPAWNED
if (log.includes("has entered the game")) {
const ign = log.split(" [")[0];
const platform = log.includes("[xboxone]") ? "XBL" : "PS";
manager.events.emit(constants_1.RCEEvent.PlayerRespawned, {
server,
ign,
platform,
});
}
// EVENT: CUSTOM_ZONE_CREATED
const customZoneCreatedMatch = log.match(constants_1.RegularExpressions.CustomZoneCreated);
if (customZoneCreatedMatch) {
manager.events.emit(constants_1.RCEEvent.CustomZoneCreated, {
server,
zone: customZoneCreatedMatch[1],
});
}
// EVENT: CUSTOM_ZONE_REMOVED
const customZoneRemovedMatch = log.match(constants_1.RegularExpressions.CustomZoneRemoved);
if (customZoneRemovedMatch) {
manager.events.emit(constants_1.RCEEvent.CustomZoneRemoved, {
server,
zone: customZoneRemovedMatch[1],
});
}
// EVENT: PLAYER_ROLE_ADD
const playerRoleAddMatch = log.match(constants_1.RegularExpressions.PlayerRoleAdd);
if (playerRoleAddMatch && log.includes("Added")) {
manager.events.emit(constants_1.RCEEvent.PlayerRoleAdd, {
server,
ign: playerRoleAddMatch[1],
role: playerRoleAddMatch[3],
});
}
// EVENT: ITEM_SPAWN
const itemSpawnMatch = log.match(constants_1.RegularExpressions.ItemSpawn);
if (itemSpawnMatch) {
manager.events.emit(constants_1.RCEEvent.ItemSpawn, {
server,
ign: itemSpawnMatch[1],
item: itemSpawnMatch[3],
quantity: parseInt(itemSpawnMatch[2]),
});
}
// EVENT: NOTE_EDIT
const noteEditMatch = log.match(constants_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 && oldContent !== newContent) {
manager.events.emit(constants_1.RCEEvent.NoteEdit, {
server,
ign: noteEditMatch[1],
oldContent,
newContent,
});
}
}
// EVENT: TEAM_CREATE
const teamCreateMatch = log.match(constants_1.RegularExpressions.TeamCreate);
if (teamCreateMatch) {
manager.events.emit(constants_1.RCEEvent.TeamCreate, {
server,
id: parseInt(teamCreateMatch[2]),
owner: teamCreateMatch[1],
});
}
// EVENT: TEAM_JOIN
const teamJoinMatch = log.match(constants_1.RegularExpressions.TeamJoin);
if (teamJoinMatch) {
manager.events.emit(constants_1.RCEEvent.TeamJoin, {
server,
id: parseInt(teamJoinMatch[3]),
owner: teamJoinMatch[2],
ign: teamJoinMatch[1],
});
}
// EVENT: TEAM_LEAVE
const teamLeaveMatch = log.match(constants_1.RegularExpressions.TeamLeave);
if (teamLeaveMatch) {
manager.events.emit(constants_1.RCEEvent.TeamLeave, {
server,
id: parseInt(teamLeaveMatch[3]),
owner: teamLeaveMatch[2],
ign: teamLeaveMatch[1],
});
}
// EVENT: KIT_SPAWN
const kitSpawnMatch = log.match(constants_1.RegularExpressions.KitSpawn);
if (kitSpawnMatch) {
manager.events.emit(constants_1.RCEEvent.KitSpawn, {
server,
ign: kitSpawnMatch[1],
kit: kitSpawnMatch[2],
});
}
// EVENT: KIT_GIVE
const kitGiveMatch = log.match(constants_1.RegularExpressions.KitGive);
if (kitGiveMatch) {
manager.events.emit(constants_1.RCEEvent.KitGive, {
server,
ign: kitGiveMatch[2],
admin: kitGiveMatch[1],
kit: kitGiveMatch[3],
});
}
// EVENT: SPECIAL_EVENT_SET
const specialEventSetMatch = log.match(constants_1.RegularExpressions.SpecialEventSet);
if (specialEventSetMatch) {
manager.events.emit(constants_1.RCEEvent.SpecialEventSet, {
server,
event: specialEventSetMatch[1],
});
}
// EVENT: EVENT_START
if (log.startsWith("[event]")) {
for (const [key, options] of Object.entries(EVENTS)) {
if (log.includes(key)) {
manager.events.emit(constants_1.RCEEvent.EventStart, {
server,
event: options.name,
special: options.special,
});
}
}
}
// EVENT: PLAYER_KILL
if (log.includes(" was killed by ")) {
const [victim, killer] = log
.split(" was killed by ")
.map((str) => str.trim());
const victimData = this.getKill(victim);
const killerData = this.getKill(killer);
manager.events.emit(constants_1.RCEEvent.PlayerKill, {
server,
victim: victimData,
killer: killerData,
});
}
});
}
static getKill(ign) {
const data = constants_1.playerKillData.find((e) => e.id === ign.toLowerCase());
if (data) {
return {
id: ign,
name: data.name,
type: data.type,
};
}
if (Number(ign)) {
return {
id: ign,
name: "Scientist",
type: constants_1.PlayerKillType.Npc,
};
}
return {
id: ign,
name: ign,
type: constants_1.PlayerKillType.Player,
};
}
}
exports.default = ConsoleMessagesHandler;
//# sourceMappingURL=ConsoleMessages.js.map