@ohd-tools/rcon
Version:
An RCON Interface for Operation: Harsh Doorstop
257 lines (256 loc) • 7.84 kB
TypeScript
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 {};