UNPKG

@ohd-tools/rcon

Version:

An RCON Interface for Operation: Harsh Doorstop

257 lines (256 loc) 7.84 kB
import events from 'events'; import net from 'net'; import { ServerStatus } from './definitions/ServerStatus'; import { MapQuery, MapQueryProps, Readers } from '@ohd-tools/utils'; import { RCONParser, LogParser } from './parser'; import { PlayerKicked } from './definitions/PlayerKicked'; import { PlayerBanned } from './definitions/PlayerBanned'; import { Teams } from './definitions/Teams'; import { ServerVariables, UnsafeVariables } from './definitions/ServerVariables'; import { Player } from './Player'; import { CommandSuccess } from './definitions/CommandSuccess'; import { Message } from './Message'; type RconResponse = { size: number; id: number; type: number; body: string; }; /**! * node-rcon * Copyright(c) 2012 Justin Li <j-li.net> * MIT Licensed * Stripped Down and modified by @bombitmanbomb */ declare class Rcon extends events.EventEmitter { host: string; port: number; password: string; outstandingData: Buffer | null; hasAuthed: boolean; autoReconnect: boolean; protected _tcpSocket: net.Socket; constructor(host: string, port: number, password: string); _sendSocket(buf: Buffer): void; connect(): void; send(data: string, cmd: number, id?: number): void; disconnect(): void; setTimeout(timeout: number, callback: () => unknown): void; _tcpSocketOnData(data: Buffer): boolean | void; socketOnConnect(): void; socketOnEnd(): void; } type ResponsePromiseQueueObject = { time: Date; buffer: string; handled: boolean; resolve: (data: unknown) => void; reject: (reason: unknown) => void; timeOut: NodeJS.Timeout; }; type ParsingOptions = { type: 'tail'; options: Readers.TailLogReader['options']; } | { type: 'ftp'; options: Readers.FTPLogReader['options']; } | { type: 'sftp'; options: Readers.SFTPLogReader['options']; }; type OHDOptions = { disableAutoStatus?: boolean; autoReconnect?: boolean; logParsing?: ParsingOptions; }; /** * Primary Interface Object for OHD servers. */ export declare class OHD { /** * Rejects if an error occurs when connecting. */ onReady: Promise<null>; rconParser: RCONParser; logParser: LogParser; /** * Online Players */ players: Map<number, Player>; /** * Players who have recently Left */ recentPlayers: Array<Player>; recentPlayerLimit: number; serverStatus: Omit<ServerStatus, 'Players'>; protected messageID: number; protected _conn: Rcon; protected _log: Readers.FTPLogReader | Readers.SFTPLogReader | Readers.TailLogReader; protected _isAuthorized: boolean; protected _responsePromiseQueue: Map<number, ResponsePromiseQueueObject>; debug: boolean; /**Reconnect to the client */ reconnect: () => Promise<unknown>; _events: events.EventEmitter; constructor(ip: string, port: number, password: string, options?: OHDOptions); /** * The bot is ready */ on(event: 'READY', cb: () => void): events.EventEmitter; /** * Chat messages sent in the server */ on(event: 'CHAT', cb: (message: Message) => void): events.EventEmitter; /** * The player joined the server */ on(event: 'PLAYER_JOINED', cb: (player: Player) => void): events.EventEmitter; /** * The player left the server */ on(event: 'PLAYER_LEFT', cb: (player: Player) => void): events.EventEmitter; /** * The player was deleted from memory */ on(event: 'PLAYER_DELETED', cb: (player: Player) => void): events.EventEmitter; /** * The player was kicked */ on(event: 'PLAYER_KICKED', cb: (player: Player, event: PlayerKicked) => void): events.EventEmitter; /** * The player was banned */ on(event: 'PLAYER_BANNED', cb: (player: Player, event: PlayerBanned) => void): events.EventEmitter; removeListener(event: Parameters<events.EventEmitter['removeListener']>[0], cb: Parameters<events.EventEmitter['removeListener']>[1]): events.EventEmitter; protected _updateServerStatus(status: ServerStatus): void; protected _updatePlayers(players: Map<number, Player>): void; /** * Get the Server Status. */ status(): Promise<ServerStatus>; /** * Give the user Admin Access */ addAdmin(name: string | number): Promise<CommandSuccess>; /** * Give the user Admin Access */ addAdminById(id: number): Promise<CommandSuccess>; /** * Revoke the users Admin Access */ removeAdmin(name: string | number): Promise<CommandSuccess>; /** * Revoke the users Admin Access */ removeAdminById(id: number): Promise<CommandSuccess>; /** * Add `amount` bots to the server. */ addBots(amount?: number): Promise<void>; /** * Add a Named Bot to the server. */ addNamedBot(name?: string): Promise<void>; /** * Add bots to a specified Team */ addTeamBots(team: 0 | 1 | Teams, amount: number): Promise<unknown>; /** * Add bots to the Opfor Team */ addOpforBots(amount: number): Promise<unknown>; /** * Add bots to the Blufor Team */ addBluforBots(amount: number): Promise<unknown>; /** * Remove bots from the specified Team */ removeTeamBots(team: 0 | 1 | Teams, amount: number): Promise<unknown>; /** * Remove bots from the Opfor Team */ removeOpforBots(amount: number): Promise<unknown>; /** * Remove bots from the Blufor Team */ removeBluforBots(amount: number): Promise<unknown>; /** * Remove all bots from the server. */ removeAllBots(): Promise<void>; /** * Kick a `Player` from the server by Username */ kick(name: string | number, reason?: string): Promise<PlayerKicked>; /** * Kick a `Player` from the server by PlayerID */ kickId(id: number, reason?: string): Promise<PlayerKicked>; /** * Ban a `Player` from the server by Username. */ ban(name: string | number, /** Duration in Seconds*/ duration?: number, reason?: string): Promise<PlayerBanned>; /** * Ban a `Player` from the server by PlayerID. */ banId(id: number, /** Duration in Seconds*/ duration?: number, reason?: string): Promise<PlayerBanned>; /** * Create a new MapQuery Object to use with `serverTravel()`. */ createMapQuery(options?: MapQueryProps): MapQuery; /** * Force the team of a `Player` by Username. * * 1: Blufor * * 0: Opfor */ forceTeam(name: string, teamId: 0 | 1 | Teams): Promise<unknown>; /** * Force the team of a `Player` by PlayerID. * * 1: Blufor * * 0: Opfor */ forceTeamId(id: number, teamId: 0 | 1 | Teams): Promise<unknown>; /** * Dot Access Setter for Server Variables. * * Do not ever set an accessor to a variable, always use .read() and .write() */ get variables(): ServerVariables; /** * Dot Access Setter for Server Variables. * * Do not ever set an accessor to a variable, always use .read() and .write() */ get variablesUnsafe(): UnsafeVariables; /** * Change the current Level. */ serverTravel(map: MapQuery | string): Promise<unknown>; /** * Send a message to all players. * * @note These messages only display from the in-game console currently. */ say(message: string): Promise<unknown>; /** * Send a Raw RCON command. */ send<T>(cmd: string): Promise<T>; protected _onResponse(response: RconResponse): void; /** * Disconnect the client. */ disconnect(): void; protected _parseResponse(res: string): unknown; protected _onError(err: string): void; protected onEnd(): void; } export {};