rce.js
Version:
A wrapper for Rust Console Edition (RCE) that allows you to use RCON to create integrations.
49 lines (41 loc) • 1.27 kB
text/typescript
import { GameRole, IPlayer } from "../types";
/**
* Parses the role info response and sets each player's `role`.
* Players not in any role fall back to `null`.
* @param roleInfoResponse The raw response string
* @param players List of currently connected players
* @returns Object containing updated player list
*/
export function parseRoleInfo(
roleInfoResponse: string,
players: IPlayer[] = []
): { players: IPlayer[] } {
const lines = roleInfoResponse.split(/\r?\n/);
const roleMap: Record<string, string[]> = {};
let currentRole: string | null = null;
for (const line of lines) {
const trimmed = line.trim();
if (!trimmed) continue;
if (/^[A-Z][A-Za-z]*$/.test(trimmed)) {
currentRole = trimmed;
if (!roleMap[currentRole]) roleMap[currentRole] = [];
} else if (currentRole) {
roleMap[currentRole].push(trimmed);
}
}
for (const role in roleMap) {
roleMap[role] = Array.from(new Set(roleMap[role]));
}
players.forEach((player) => {
player.role = null;
});
for (const role in roleMap) {
for (const ign of roleMap[role]) {
const player = players.find((p) => p.ign === ign);
if (player) {
player.role = role as GameRole;
}
}
}
return { players };
}