UNPKG

ts3-nodejs-library

Version:
617 lines 25.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ResponseError_1 = require("../exception/ResponseError"); class Command { constructor() { this.requestParser = Command.getParsers().request; this.responseParser = Command.getParsers().response; this.cmd = ""; this.options = {}; this.multiOpts = []; this.flags = []; this.response = []; this.error = null; } /** Initializes the Respone with default values */ reset() { this.response = []; this.error = null; return this; } /** Sets the main command to send */ setCommand(cmd) { this.cmd = cmd.trim(); return this; } /** * Sets the TeamSpeak Key Value Pairs * @param opts sets the Object with the key value pairs which should get sent to the TeamSpeak Query */ setOptions(options) { this.options = options; return this; } /** * Sets the TeamSpeak Key Value Pairs * @param opts sets the Object with the key value pairs which should get sent to the TeamSpeak Query */ setMultiOptions(options) { this.multiOpts = options; return this; } /** * adds a customparser * @param parsers */ setParser(parsers) { const { response, request } = parsers(Command.getParsers()); this.requestParser = request; this.responseParser = response; return this; } /** checks wether there are options used with this command */ hasOptions() { return Object.values(this.options).length > 0 || this.hasMultiOptions(); } /** checks wether there are options used with this command */ hasMultiOptions() { return this.multiOpts.length > 0; } /** * set TeamSpeak flags * @param flags sets the flags which should get sent to the teamspeak query */ setFlags(flags) { this.flags = flags .filter(flag => ["string", "number"].includes(typeof flag)) .map(flag => String(flag)); return this; } /** checks wether there are flags used with this command */ hasFlags() { return this.flags.length > 0; } /** * set the Line which has been received from the TeamSpeak Query * @param line the line which has been received from the teamSpeak query */ setResponse(line) { this.response = this.parse(line); return this; } /** * Set the error line which has been received from the TeamSpeak Query * @param error the error line which has been received from the TeamSpeak Query */ setError(error) { this.error = this.parse(error)[0]; return this; } /** get the parsed error object which has been received from the TeamSpeak Query */ getError() { if (!this.hasError()) return null; return new ResponseError_1.ResponseError(this.error); } /** checks if a error has been received */ hasError() { return (this.error !== null && typeof this.error === "object" && typeof this.error.id === "number" && this.error.id > 0); } /** get the parsed response object which has been received from the TeamSpeak Query */ getResponse() { return this.response; } /** runs the parser of this instance */ parse(raw) { return this.responseParser({ raw, cmd: Command }); } /** runs the parser of this instance */ build() { return this.requestParser(this); } /** * retrieves the default parsers */ static getParsers() { return { response: Command.parse, request: Command.build }; } /** * * @param param0 the custom snapshot response parser */ static parseSnapshotCreate({ raw }) { const [data, snapshot] = raw.split("|"); return [{ ...Command.parse({ raw: data })[0], snapshot }]; } /** * the custom snapshot request parser * @param data snapshot string * @param cmd command object */ static buildSnapshotDeploy(data, cmd) { return [Command.build(cmd), data].join("|"); } /** * parses a query response * @param data the query response received */ static parse({ raw }) { return raw .split("|") .map(entry => { const res = {}; entry.split(" ").forEach(str => { const { key, value } = Command.getKeyValue(str); res[key] = Command.parseValue(key, value); }); return res; }) .map((entry, _, original) => ({ ...original[0], ...entry })); } /** * Checks if a error has been received * @return The parsed String which is readable by the TeamSpeak Query */ static build(command) { let cmd = Command.escape(command.cmd); if (command.hasFlags()) cmd += ` ${command.buildFlags()}`; if (command.hasOptions()) cmd += ` ${command.buildOptions()}`; return cmd; } /** * builds the query string for options * @return the parsed String which is readable by the TeamSpeak Querytt */ buildOptions() { const options = this.buildOption(this.options); if (!this.hasMultiOptions()) return options; return `${options} ${this.multiOpts.map(this.buildOption.bind(this)).join("|")}`; } /** builds the query string for options */ buildOption(options) { return Object .keys(options) .filter(key => ![undefined, null].includes(options[key])) .filter(key => typeof options[key] !== "number" || !isNaN(options[key])) .map(key => Command.escapeKeyValue(key, options[key])) .join(" "); } /** builds the query string for flags */ buildFlags() { return this.flags.map(f => Command.escape(f)).join(" "); } /** * escapes a key value pair * @param {string} key the key used * @param {string|string[]} value the value or an array of values * @return the parsed String which is readable by the TeamSpeak Query */ static escapeKeyValue(key, value) { if (Array.isArray(value)) { return value.map(v => `${Command.escape(key)}=${Command.escape(v)}`).join("|"); } else { return `${Command.escape(key)}=${Command.escape(value)}`; } } /** * retrieves the key value pair from a string * @param str the key value pair to unescape eg foo=bar */ static getKeyValue(str) { const index = str.indexOf("="); if (index === -1) return { key: str, value: undefined }; const value = str.substring(index + 1); return { key: str.substring(0, index), value: value === "" ? undefined : value }; } /** * Parses a value to the type which the key represents * @param k the key which should get looked up * @param v the value which should get parsed */ static parseValue(k, v) { if (v === undefined) return undefined; if (Object.keys(Command.Identifier).includes(k)) { return Command.Identifier[k](v); } else { return this.parseString(v); } } /** * parses a string value * @param value string to parse */ static parseString(value) { return Command.unescape(value); } static parseRecursive(value) { return Command.parse({ raw: Command.unescape(value) }); } /** * parses a string array * @param value string to parse */ static parseStringArray(value) { return value.split(",").map(v => Command.parseString(v)); } /** * parses a number * @param value string to parse */ static parseNumber(value) { return parseFloat(value); } /** * parses a number array * @param value string to parse */ static parseNumberArray(value) { return value.split(",").map(v => Command.parseNumber(v)); } /** unescapes a string */ static unescape(str) { return String(str) .replace(/\\s/g, " ") .replace(/\\p/g, "|") .replace(/\\n/g, "\n") .replace(/\\f/g, "\f") .replace(/\\r/g, "\r") .replace(/\\t/g, "\t") .replace(/\\v/g, "\v") .replace(/\\\//g, "/") .replace(/\\\\/g, "\\"); } /** escapes a string */ static escape(str) { return String(str) .replace(/\\/g, "\\\\") .replace(/\//g, "\\/") .replace(/\|/g, "\\p") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") .replace(/\t/g, "\\t") .replace(/\v/g, "\\v") .replace(/\f/g, "\\f") .replace(/ /g, "\\s"); } } exports.Command = Command; (function (Command) { Command.Identifier = { sid: Command.parseNumber, server_id: Command.parseNumber, virtualserver_nickname: Command.parseString, virtualserver_unique_identifier: Command.parseString, virtualserver_name: Command.parseString, virtualserver_welcomemessage: Command.parseString, virtualserver_platform: Command.parseString, virtualserver_version: Command.parseString, virtualserver_maxclients: Command.parseNumber, virtualserver_password: Command.parseString, virtualserver_clientsonline: Command.parseNumber, virtualserver_channelsonline: Command.parseNumber, virtualserver_created: Command.parseNumber, virtualserver_uptime: Command.parseNumber, virtualserver_codec_encryption_mode: Command.parseNumber, virtualserver_hostmessage: Command.parseString, virtualserver_hostmessage_mode: Command.parseNumber, virtualserver_filebase: Command.parseString, virtualserver_default_server_group: Command.parseNumber, virtualserver_default_channel_group: Command.parseNumber, virtualserver_flag_password: Command.parseNumber, virtualserver_default_channel_admin_group: Command.parseNumber, virtualserver_max_download_total_bandwidth: Command.parseNumber, virtualserver_max_upload_total_bandwidth: Command.parseNumber, virtualserver_hostbanner_url: Command.parseString, virtualserver_hostbanner_gfx_url: Command.parseString, virtualserver_hostbanner_gfx_interval: Command.parseNumber, virtualserver_complain_autoban_count: Command.parseNumber, virtualserver_complain_autoban_time: Command.parseNumber, virtualserver_complain_remove_time: Command.parseNumber, virtualserver_min_clients_in_channel_before_forced_silence: Command.parseNumber, virtualserver_priority_speaker_dimm_modificator: Command.parseNumber, virtualserver_id: Command.parseNumber, virtualserver_antiflood_points_needed_plugin_block: Command.parseNumber, virtualserver_antiflood_points_tick_reduce: Command.parseNumber, virtualserver_antiflood_points_needed_command_block: Command.parseNumber, virtualserver_antiflood_points_needed_ip_block: Command.parseNumber, virtualserver_client_connections: Command.parseNumber, virtualserver_query_client_connections: Command.parseNumber, virtualserver_hostbutton_tooltip: Command.parseString, virtualserver_hostbutton_url: Command.parseString, virtualserver_hostbutton_gfx_url: Command.parseString, virtualserver_queryclientsonline: Command.parseNumber, virtualserver_download_quota: Command.parseNumber, virtualserver_upload_quota: Command.parseNumber, virtualserver_month_bytes_downloaded: Command.parseNumber, virtualserver_month_bytes_uploaded: Command.parseNumber, virtualserver_total_bytes_downloaded: Command.parseNumber, virtualserver_total_bytes_uploaded: Command.parseNumber, virtualserver_port: Command.parseNumber, virtualserver_autostart: Command.parseNumber, virtualserver_machine_id: Command.parseString, virtualserver_needed_identity_security_level: Command.parseNumber, virtualserver_log_client: Command.parseNumber, virtualserver_log_query: Command.parseNumber, virtualserver_log_channel: Command.parseNumber, virtualserver_log_permissions: Command.parseNumber, virtualserver_log_server: Command.parseNumber, virtualserver_log_filetransfer: Command.parseNumber, virtualserver_min_client_version: Command.parseNumber, virtualserver_name_phonetic: Command.parseString, virtualserver_icon_id: Command.parseNumber, virtualserver_reserved_slots: Command.parseNumber, virtualserver_total_packetloss_speech: Command.parseNumber, virtualserver_total_packetloss_keepalive: Command.parseNumber, virtualserver_total_packetloss_control: Command.parseNumber, virtualserver_total_packetloss_total: Command.parseNumber, virtualserver_total_ping: Command.parseNumber, virtualserver_ip: Command.parseStringArray, virtualserver_weblist_enabled: Command.parseNumber, virtualserver_ask_for_privilegekey: Command.parseNumber, virtualserver_hostbanner_mode: Command.parseNumber, virtualserver_channel_temp_delete_delay_default: Command.parseNumber, virtualserver_min_android_version: Command.parseNumber, virtualserver_min_ios_version: Command.parseNumber, virtualserver_status: Command.parseString, connection_filetransfer_bandwidth_sent: Command.parseNumber, connection_filetransfer_bandwidth_received: Command.parseNumber, connection_filetransfer_bytes_sent_total: Command.parseNumber, connection_filetransfer_bytes_received_total: Command.parseNumber, connection_packets_sent_speech: Command.parseNumber, connection_bytes_sent_speech: Command.parseNumber, connection_packets_received_speech: Command.parseNumber, connection_bytes_received_speech: Command.parseNumber, connection_packets_sent_keepalive: Command.parseNumber, connection_bytes_sent_keepalive: Command.parseNumber, connection_packets_received_keepalive: Command.parseNumber, connection_bytes_received_keepalive: Command.parseNumber, connection_packets_sent_control: Command.parseNumber, connection_bytes_sent_control: Command.parseNumber, connection_packets_received_control: Command.parseNumber, connection_bytes_received_control: Command.parseNumber, connection_packets_sent_total: Command.parseNumber, connection_bytes_sent_total: Command.parseNumber, connection_packets_received_total: Command.parseNumber, connection_bytes_received_total: Command.parseNumber, connection_bandwidth_sent_last_second_total: Command.parseNumber, connection_bandwidth_sent_last_minute_total: Command.parseNumber, connection_bandwidth_received_last_second_total: Command.parseNumber, connection_bandwidth_received_last_minute_total: Command.parseNumber, connection_packetloss_total: Command.parseNumber, connection_ping: Command.parseNumber, clid: Command.parseNumber, client_id: Command.parseNumber, cldbid: Command.parseNumber, client_database_id: Command.parseNumber, client_channel_id: Command.parseNumber, client_origin_server_id: Command.parseNumber, client_nickname: Command.parseString, client_type: Command.parseNumber, client_away: Command.parseNumber, client_away_message: Command.parseString, client_flag_talking: Command.parseNumber, client_input_muted: Command.parseNumber, client_output_muted: Command.parseNumber, client_input_hardware: Command.parseNumber, client_output_hardware: Command.parseNumber, client_talk_power: Command.parseNumber, client_is_talker: Command.parseNumber, client_is_priority_speaker: Command.parseNumber, client_is_recording: Command.parseNumber, client_is_channel_commander: Command.parseNumber, client_unique_identifier: Command.parseString, client_servergroups: Command.parseNumberArray, client_channel_group_id: Command.parseNumber, client_channel_group_inherited_channel_id: Command.parseNumber, client_version: Command.parseString, client_platform: Command.parseString, client_idle_time: Command.parseNumber, client_created: Command.parseNumber, client_lastconnected: Command.parseNumber, client_icon_id: Command.parseNumber, client_country: Command.parseString, client_outputonly_muted: Command.parseNumber, client_default_channel: Command.parseNumber, client_meta_data: Command.parseString, client_version_sign: Command.parseString, client_security_hash: Command.parseString, client_login_name: Command.parseString, client_login_password: Command.parseString, client_totalconnections: Command.parseNumber, client_flag_avatar: Command.parseString, client_talk_request: Command.parseNumber, client_talk_request_msg: Command.parseString, client_month_bytes_uploaded: Command.parseNumber, client_month_bytes_downloaded: Command.parseNumber, client_total_bytes_uploaded: Command.parseNumber, client_total_bytes_downloaded: Command.parseNumber, client_nickname_phonetic: Command.parseString, client_default_token: Command.parseString, client_badges: Command.parseString, client_base64HashClientUID: Command.parseString, connection_connected_time: Command.parseNumber, connection_client_ip: Command.parseString, client_myteamspeak_id: Command.parseString, client_integrations: Command.parseString, client_description: Command.parseString, client_needed_serverquery_view_power: Command.parseNumber, client_myteamspeak_avatar: Command.parseString, client_signed_badges: Command.parseString, client_lastip: Command.parseString, cid: Command.parseNumber, pid: Command.parseNumber, cpid: Command.parseNumber, order: Command.parseNumber, channel_cpid: Command.parseNumber, channel_order: Command.parseNumber, channel_name: Command.parseString, channel_password: Command.parseString, channel_description: Command.parseString, channel_topic: Command.parseString, channel_flag_default: Command.parseNumber, channel_flag_password: Command.parseNumber, channel_flag_permanent: Command.parseNumber, channel_flag_semi_permanent: Command.parseNumber, channel_flag_temporary: Command.parseNumber, channel_codec: Command.parseNumber, channel_codec_quality: Command.parseNumber, channel_needed_talk_power: Command.parseNumber, channel_icon_id: Command.parseNumber, total_clients_family: Command.parseNumber, channel_maxclients: Command.parseNumber, channel_maxfamilyclients: Command.parseNumber, total_clients: Command.parseNumber, channel_needed_subscribe_power: Command.parseNumber, channel_codec_latency_factor: Command.parseNumber, channel_codec_is_unencrypted: Command.parseNumber, channel_security_salt: Command.parseString, channel_delete_delay: Command.parseNumber, channel_flag_maxclients_unlimited: Command.parseNumber, channel_flag_maxfamilyclients_unlimited: Command.parseNumber, channel_flag_maxfamilyclients_inherited: Command.parseNumber, channel_filepath: Command.parseString, channel_forced_silence: Command.parseNumber, channel_name_phonetic: Command.parseString, channel_flag_private: Command.parseNumber, channel_banner_gfx_url: Command.parseString, channel_banner_mode: Command.parseNumber, seconds_empty: Command.parseNumber, cgid: Command.parseNumber, sgid: Command.parseNumber, permid: Command.parseNumber, permvalue: Command.parseNumber, permnegated: Command.parseNumber, permskip: Command.parseNumber, permsid: Command.parseString, t: Command.parseNumber, id1: Command.parseNumber, id2: Command.parseNumber, p: Command.parseNumber, v: Command.parseNumber, n: Command.parseNumber, s: Command.parseNumber, reasonid: Command.parseNumber, reasonmsg: Command.parseString, ctid: Command.parseNumber, cfid: Command.parseNumber, targetmode: Command.parseNumber, target: Command.parseNumber, invokerid: Command.parseNumber, invokername: Command.parseString, invokeruid: Command.parseString, hash: Command.parseString, last_pos: Command.parseNumber, file_size: Command.parseNumber, l: Command.parseString, path: Command.parseString, size: Command.parseNumber, clientftfid: Command.parseNumber, serverftfid: Command.parseNumber, current_speed: Command.parseNumber, average_speed: Command.parseNumber, runtime: Command.parseNumber, sizedone: Command.parseNumber, sender: Command.parseNumber, status: Command.parseNumber, ftkey: Command.parseString, port: Command.parseNumber, proto: Command.parseNumber, datetime: Command.parseNumber, host_timestamp_utc: Command.parseNumber, instance_uptime: Command.parseNumber, virtualservers_running_total: Command.parseNumber, virtualservers_total_channels_online: Command.parseNumber, virtualservers_total_clients_online: Command.parseNumber, virtualservers_total_maxclients: Command.parseNumber, serverinstance_database_version: Command.parseNumber, serverinstance_filetransfer_port: Command.parseNumber, serverinstance_serverquery_max_connections_per_ip: Command.parseNumber, serverinstance_max_download_total_bandwidth: Command.parseNumber, serverinstance_max_upload_total_bandwidth: Command.parseNumber, serverinstance_guest_serverquery_group: Command.parseNumber, serverinstance_pending_connections_per_ip: Command.parseNumber, serverinstance_permissions_version: Command.parseNumber, serverinstance_serverquery_flood_ban_time: Command.parseNumber, serverinstance_serverquery_flood_commands: Command.parseNumber, serverinstance_serverquery_flood_time: Command.parseNumber, serverinstance_template_channeladmin_group: Command.parseNumber, serverinstance_template_channeldefault_group: Command.parseNumber, serverinstance_template_serveradmin_group: Command.parseNumber, serverinstance_template_serverdefault_group: Command.parseNumber, msgid: Command.parseNumber, timestamp: Command.parseNumber, cluid: Command.parseString, subject: Command.parseString, message: Command.parseString, version: Command.parseString, build: Command.parseNumber, platform: Command.parseString, name: Command.parseString, token: Command.parseString, tokencustomset: Command.parseRecursive, value: Command.parseString, banid: Command.parseNumber, id: Command.parseNumber, msg: Command.parseString, extra_msg: Command.parseString, failed_permid: Command.parseNumber, ident: Command.parseString, ip: Command.parseString, nickname: Command.parseString, uid: Command.parseString, desc: Command.parseString, pw_clear: Command.parseString, start: Command.parseNumber, end: Command.parseNumber, tcid: Command.parseNumber, permname: Command.parseString, permdesc: Command.parseString, token_type: Command.parseNumber, token1: Command.parseString, token2: Command.parseString, token_id1: Command.parseNumber, token_id2: Command.parseNumber, token_created: Command.parseNumber, token_description: Command.parseString, flag_read: Command.parseNumber, tcldbid: Command.parseNumber, tname: Command.parseString, fcldbid: Command.parseNumber, fname: Command.parseString, mytsid: Command.parseString, lastnickname: Command.parseString, created: Command.parseNumber, duration: Command.parseNumber, invokercldbid: Command.parseNumber, enforcements: Command.parseNumber, reason: Command.parseString, type: Command.parseNumber, iconid: Command.parseNumber, savedb: Command.parseNumber, namemode: Command.parseNumber, n_modifyp: Command.parseNumber, n_member_addp: Command.parseNumber, n_member_removep: Command.parseNumber, sortid: Command.parseNumber, count: Command.parseNumber, salt: Command.parseString, snapshot: Command.parseString }; })(Command = exports.Command || (exports.Command = {})); //# sourceMappingURL=Command.js.map