From fc57ce331b2293bf9cc790a0f10a8a48b0b5c6c4 Mon Sep 17 00:00:00 2001 From: Pascal Sthamer Date: Sun, 21 Apr 2019 20:33:30 +0200 Subject: [PATCH] [ts3-nodejs-library] Add and enhance typings, remove unneeded dependency (#34873) * Add ts3-nodejs-library typings * Use files instead of include * Fix json error in tsconfig * Require at least TypeScript Version 3.0 * Fix typescript version header * Remove duplicate typings in subclasses of the abstract class * Add constructor list typings * type-safe events construct, remove unneeded steam dependency and more * Add more typings * Correctly reference node types for Buffer and Fix linting issues * Type 'close' and 'error' event * Type 'clientdisconnect', 'flooding', 'debug' and ready events --- types/ts3-nodejs-library/TeamSpeak3.d.ts | 116 +++++++++++++++++- types/ts3-nodejs-library/index.d.ts | 1 + .../ts3-nodejs-library/property/Channel.d.ts | 3 + types/ts3-nodejs-library/property/Client.d.ts | 16 +++ 4 files changed, 130 insertions(+), 6 deletions(-) diff --git a/types/ts3-nodejs-library/TeamSpeak3.d.ts b/types/ts3-nodejs-library/TeamSpeak3.d.ts index 29c45158e4..6909a31409 100644 --- a/types/ts3-nodejs-library/TeamSpeak3.d.ts +++ b/types/ts3-nodejs-library/TeamSpeak3.d.ts @@ -1,3 +1,5 @@ +/// + import { EventEmitter } from 'events'; import TeamSpeakChannel = require('./property/Channel'); import TeamSpeakClient = require('./property/Client'); @@ -5,9 +7,6 @@ import TeamSpeakServer = require('./property/Server'); import TeamSpeakServerGroup = require('./property/ServerGroup'); import TeamSpeakChannelGroup = require('./property/ChannelGroup'); -// For the buffer type. -import * as stream from 'steam'; - // We need this namespace, becaue we can't just export the interface directly, // as it would conflict with export = TeamSpeak3. declare namespace TeamSpeak3 { @@ -29,6 +28,111 @@ declare namespace TeamSpeak3 { /** Maximum wait time for the connection to get established. Defaults to 20000. */ readyTimeout?: number; } + + enum TargetMode { + CLIENT = 1, + CHANNEL = 2, + VIRTUAL_SERVER = 3 + } + + enum ClientType { + CLIENT = 0, + QUERY = 1 + } + + interface MessageData { + invoker: TeamSpeakClient; + msg: string; + targetmode: TargetMode; + } + + interface WhoAmIResponse { + virtualserver_status: string; + virtualserver_id: number; + virtualserver_unique_identifier: string; + virtualserver_port: number; + client_id: number; + client_channel_id: number; + client_nickname: string; + client_database_id: number; + cient_login_name: string; + client_unique_identifier: string; + client_origin_server_id: number; + } + + interface ClientMovedResponse { + client: TeamSpeakClient; + channel: TeamSpeakChannel; + reasonid: number; + } + + interface ServerGroupClientListResponse { + cldbid: number; + client_nickname: string; + client_unique_identifier: string; + } + + interface DisconnectedClient { + clid: number; + cid: number; + client_database_id: number; + client_nickname: string; + client_type: ClientType; + client_away: number; + client_away_message: string | undefined; + client_flag_talking: number; + client_input_muted: number; + client_output_muted: number; + client_input_hardware: number; + client_output_hardware: number; + client_talk_power: number; + client_is_talker: number; + client_is_priority_speaker: number; + client_is_recording: number; + client_is_channel_commander: number; + client_unique_identifier: string; + client_servergroups: number[]; + client_channel_group_id: number; + client_channel_group_inherited_channel_id: number; + client_version: string; + client_platform: string; + client_idle_time: number; + client_created: number; + client_lastconnected: number; + client_icon_id: number; + client_country: string | undefined; + connection_client_ip: string; + } + + interface DisconnectEvent { + cfid: number; + ctid: number; + reasonid: number; + reasonmsg: string; + clid: number; + } + + interface ClientDisconnectResponse { + client: DisconnectedClient; + event: DisconnectEvent; + } + + interface DebugInformation { + type: string; + data: string; + } +} + +interface TeamSpeak3 { + // Type-safe events. + on(event: 'textmessage', listener: (data: TeamSpeak3.MessageData) => void): this; + on(event: 'clientconnect', listener: (data: { client: TeamSpeakClient }) => void): this; + on(event: 'clientmoved', listener: (data: TeamSpeak3.ClientMovedResponse) => void): this; + on(event: 'clientdisconnect', listener: (data: TeamSpeak3.ClientDisconnectResponse) => void): this; + on(event: 'close' | 'error' | 'flooding', listener: (err: Error) => void): this; + on(event: 'ready', listener: () => void): this; + on(event: 'debug', listener: (debug: TeamSpeak3.DebugInformation) => void): this; + on(event: string, listener: () => any): this; } declare class TeamSpeak3 extends EventEmitter { @@ -143,7 +247,7 @@ declare class TeamSpeak3 extends EventEmitter { /** * Displays information about your current ServerQuery connection including your loginname, etc. */ - whoami(): Promise; + whoami(): Promise; /** * Displays detailed configuration information about the selected virtual server @@ -216,7 +320,7 @@ declare class TeamSpeak3 extends EventEmitter { * Displays the IDs of all clients currently residing in the server group. * @param - the ServerGroup id */ - serverGroupClientList(sgid: number): Promise; + serverGroupClientList(sgid: number): Promise | null; /** * Adds the client to the server group specified with sgid. @@ -846,7 +950,7 @@ declare class TeamSpeak3 extends EventEmitter { * Lists all Clients with a given Filter * @param - Filter Object */ - clientList(filter: any): Promise; + clientList(filter?: any): Promise; /** * Displays a list of files and directories stored in the specified channels file repository. diff --git a/types/ts3-nodejs-library/index.d.ts b/types/ts3-nodejs-library/index.d.ts index 913b2a0899..2d2c4bfa6b 100644 --- a/types/ts3-nodejs-library/index.d.ts +++ b/types/ts3-nodejs-library/index.d.ts @@ -2,6 +2,7 @@ // Project: https://github.com/Multivit4min/TS3-NodeJS-Library // Definitions by: Pascal Sthamer // David Kartnaller +// Mattis Krämer // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 3.0 diff --git a/types/ts3-nodejs-library/property/Channel.d.ts b/types/ts3-nodejs-library/property/Channel.d.ts index a66a3762a5..4f061dce51 100644 --- a/types/ts3-nodejs-library/property/Channel.d.ts +++ b/types/ts3-nodejs-library/property/Channel.d.ts @@ -11,6 +11,9 @@ interface ChannelListResponse { declare class TeamSpeakChannel extends Abstract { constructor(parent: TeamSpeak3, list: ChannelListResponse) + /** Returns the Name of the channel */ + name: string; + /** * Returns the ID of the Channel * @returns the Channels ID diff --git a/types/ts3-nodejs-library/property/Client.d.ts b/types/ts3-nodejs-library/property/Client.d.ts index b75b9b1863..9e778331d3 100644 --- a/types/ts3-nodejs-library/property/Client.d.ts +++ b/types/ts3-nodejs-library/property/Client.d.ts @@ -11,9 +11,25 @@ interface ClientListResponse { client_unique_identifier: string; } +declare enum ClientType { + CLIENT = 0, + QUERY = 1 +} + declare class TeamSpeakClient extends Abstract { constructor(parent: TeamSpeak3, list: ClientListResponse) + /** Returns the Client Type: 0 = CLIENT, 1 = QUERY */ + type: ClientType; + /** Client Nickname */ + nickname: string; + /** Array of client Servergroups */ + servergroups: number[]; + /** The ChannelID of the client */ + cid: number; + /** The UID of the client */ + client_unique_identifier: string; + /** * Returns the Database ID of the Client * @returns the Clients Database ID