Compare commits

...

4 Commits

Author SHA1 Message Date
cf82d85554 added events 2021-04-26 23:42:22 +02:00
b70d1d45fb added all functions 2021-04-26 21:03:02 +02:00
f7c0d1783d renamed to ts3-call 2021-04-26 20:34:01 +02:00
c943e8e5df improved label 2021-04-26 20:24:24 +02:00
14 changed files with 305 additions and 109 deletions

View File

@@ -13,7 +13,8 @@
"node-red": { "node-red": {
"nodes": { "nodes": {
"ts3-config": "dist/nodes/ts3-config/ts3-config.js", "ts3-config": "dist/nodes/ts3-config/ts3-config.js",
"ts3-get": "dist/nodes/ts3-get/ts3-get.js" "ts3-get": "dist/nodes/ts3-call/ts3-call.js",
"ts3-event": "dist/nodes/ts3-event/ts3-event.js"
} }
}, },
"dependencies": { "dependencies": {

View File

@@ -1,12 +1,12 @@
import { NodeInitializer } from "node-red"; import { NodeInitializer } from "node-red";
import { TeamSpeak } from "ts3-nodejs-library"; import { TeamSpeak } from "ts3-nodejs-library";
import { Ts3ConfigNode } from "../ts3-config/types"; import { Ts3ConfigNode } from "../ts3-config/types";
import { Ts3GetConfig, Ts3GetNode } from "./types"; import { Ts3CallConfig, Ts3CallNode } from "./types";
const nodeInit: NodeInitializer = (RED): void => { const nodeInit: NodeInitializer = (RED): void => {
function Ts3Get( function Ts3Call(
this: Ts3GetNode, this: Ts3CallNode,
config: Ts3GetConfig config: Ts3CallConfig
): void { ): void {
RED.nodes.createNode(this, config); RED.nodes.createNode(this, config);
@@ -37,7 +37,12 @@ const nodeInit: NodeInitializer = (RED): void => {
}else{ }else{
args = [msg.payload] args = [msg.payload]
} }
try {
msg.payload = await member.apply(client,args) msg.payload = await member.apply(client,args)
} catch (err) {
this.error(`Failed to call ${config.selection}: ${err}`)
}
send(msg) send(msg)
}else{ }else{
@@ -46,9 +51,10 @@ const nodeInit: NodeInitializer = (RED): void => {
done() done()
}) })
} }
RED.nodes.registerType("ts3-get", Ts3Get); RED.nodes.registerType("ts3-call", Ts3Call);
}; };
export = nodeInit; export = nodeInit;

View File

@@ -0,0 +1,15 @@
import { NodeDef, Node, EditorNodeProperties } from "node-red";
export interface Ts3CallProps {
configid: string
selection: string
}
export interface Ts3CallData {
}
export interface Ts3CallConfig extends NodeDef, Ts3CallProps { }
export interface Ts3CallNode extends Node, Ts3CallData {}
export interface Ts3CallEditorNodeProperties extends EditorNodeProperties,Ts3CallProps {}

View File

@@ -0,0 +1,162 @@
<div class="form-row">
<label for="node-input-name"><i class="fa fa-globe"></i> Name</label>
<input type="text" id="node-input-name">
</div>
<div class="form-row">
<label for="node-input-configid"><i class="fa fa-server"></i> Connection</label>
<input type="text" id="node-input-configid">
</div>
<div class="form-row">
<label for="node-input-configid"><i class="fa fa-terminal"></i> Function</label>
<select class="form-select" id="node-input-selection">
<option value="queryLoginAdd" >queryLoginAdd</option>
<option value="queryLoginDel" >queryLoginDel</option>
<option value="queryLoginList" >queryLoginList</option>
<option value="apiKeyAdd" >apiKeyAdd</option>
<option value="apiKeyList" >apiKeyList</option>
<option value="apiKeyDel" >apiKeyDel</option>
<option value="clientSetServerQueryLogin" >clientSetServerQueryLogin</option>
<option value="clientUpdate" >clientUpdate</option>
<option value="version" >version</option>
<option value="hostInfo" >hostInfo</option>
<option value="instanceInfo" >instanceInfo</option>
<option value="instanceEdit" >instanceEdit</option>
<option value="bindingList" >bindingList</option>
<option value="useByPort" >useByPort</option>
<option value="useBySid" >useBySid</option>
<option value="whoami" >whoami</option>
<option value="serverInfo" >serverInfo</option>
<option value="serverIdGetByPort" >serverIdGetByPort</option>
<option value="serverEdit" >serverEdit</option>
<option value="serverProcessStop" >serverProcessStop</option>
<option value="connectionInfo" >connectionInfo</option>
<option value="serverCreate" >serverCreate</option>
<option value="serverDelete" >serverDelete</option>
<option value="serverStart" >serverStart</option>
<option value="serverStop" >serverStop</option>
<option value="serverGroupCreate" >serverGroupCreate</option>
<option value="serverGroupClientList" >serverGroupClientList</option>
<option value="serverGroupAddClient" >serverGroupAddClient</option>
<option value="serverGroupDelClient" >serverGroupDelClient</option>
<option value="serverGroupsByClientId" >serverGroupsByClientId</option>
<option value="clientAddServerGroup" >clientAddServerGroup</option>
<option value="clientDelServerGroup" >clientDelServerGroup</option>
<option value="serverGroupDel" >serverGroupDel</option>
<option value="serverGroupCopy" >serverGroupCopy</option>
<option value="serverGroupRename" >serverGroupRename</option>
<option value="serverGroupPermList" >serverGroupPermList</option>
<option value="serverGroupAddPerm" >serverGroupAddPerm</option>
<option value="serverGroupDelPerm" >serverGroupDelPerm</option>
<option value="serverTempPasswordAdd" >serverTempPasswordAdd</option>
<option value="serverTempPasswordDel" >serverTempPasswordDel</option>
<option value="serverTempPasswordList" >serverTempPasswordList</option>
<option value="channelCreate" >channelCreate</option>
<option value="channelGroupCreate" >channelGroupCreate</option>
<option value="getChannelById" >getChannelById</option>
<option value="getChannelByName" >getChannelByName</option>
<option value="channelFind" >channelFind</option>
<option value="channelInfo" >channelInfo</option>
<option value="channelMove" >channelMove</option>
<option value="channelDelete" >channelDelete</option>
<option value="channelEdit" >channelEdit</option>
<option value="channelPermList" >channelPermList</option>
<option value="channelSetPerm" >channelSetPerm</option>
<option value="channelSetPerms" >channelSetPerms</option>
<option value="channelDelPerm" >channelDelPerm</option>
<option value="getClientById" >getClientById</option>
<option value="getClientByDbid" >getClientByDbid</option>
<option value="getClientByUid" >getClientByUid</option>
<option value="getClientByName" >getClientByName</option>
<option value="clientInfo" >clientInfo</option>
<option value="clientDbList" >clientDbList</option>
<option value="clientDbInfo" >clientDbInfo</option>
<option value="clientKick" >clientKick</option>
<option value="clientMove" >clientMove</option>
<option value="clientPoke" >clientPoke</option>
<option value="clientPermList" >clientPermList</option>
<option value="clientAddPerm" >clientAddPerm</option>
<option value="clientDelPerm" >clientDelPerm</option>
<option value="customSearch" >customSearch</option>
<option value="customInfo" >customInfo</option>
<option value="customDelete" >customDelete</option>
<option value="customSet" >customSet</option>
<option value="sendTextMessage" >sendTextMessage</option>
<option value="sendChannelMessage" >sendChannelMessage</option>
<option value="getServerGroupById" >getServerGroupById</option>
<option value="getServerGroupByName" >getServerGroupByName</option>
<option value="getChannelGroupById" >getChannelGroupById</option>
<option value="getChannelGroupByName" >getChannelGroupByName</option>
<option value="setClientChannelGroup" >setClientChannelGroup</option>
<option value="deleteChannelGroup" >deleteChannelGroup</option>
<option value="channelGroupCopy" >channelGroupCopy</option>
<option value="channelGroupRename" >channelGroupRename</option>
<option value="channelGroupPermList" >channelGroupPermList</option>
<option value="channelGroupAddPerm" >channelGroupAddPerm</option>
<option value="channelGroupDelPerm" >channelGroupDelPerm</option>
<option value="channelGroupClientList" >channelGroupClientList</option>
<option value="permOverview" >permOverview</option>
<option value="permissionList" >permissionList</option>
<option value="permIdGetByName" >permIdGetByName</option>
<option value="permIdsGetByName" >permIdsGetByName</option>
<option value="permGet" >permGet</option>
<option value="permFind" >permFind</option>
<option value="permReset" >permReset</option>
<option value="privilegeKeyList" >privilegeKeyList</option>
<option value="privilegeKeyAdd" >privilegeKeyAdd</option>
<option value="serverGroupPrivilegeKeyAdd" >serverGroupPrivilegeKeyAdd</option>
<option value="channelGroupPrivilegeKeyAdd" >channelGroupPrivilegeKeyAdd</option>
<option value="privilegeKeyDelete" >privilegeKeyDelete</option>
<option value="privilegeKeyUse" >privilegeKeyUse</option>
<option value="messageList" >messageList</option>
<option value="messageAdd" >messageAdd</option>
<option value="messageDel" >messageDel</option>
<option value="messageGet" >messageGet</option>
<option value="messageUpdate" >messageUpdate</option>
<option value="complainList" >complainList</option>
<option value="complainAdd" >complainAdd</option>
<option value="complainDel" >complainDel</option>
<option value="banList" >banList</option>
<option value="ban" >ban</option>
<option value="banClient" >banClient</option>
<option value="banDel" >banDel</option>
<option value="logView" >logView</option>
<option value="logAdd" >logAdd</option>
<option value="gm" >gm</option>
<option value="clientFind" >clientFind</option>
<option value="clientGetIds" >clientGetIds</option>
<option value="clientGetDbidFromUid" >clientGetDbidFromUid</option>
<option value="clientGetNameFromUid" >clientGetNameFromUid</option>
<option value="clientGetUidFromClid" >clientGetUidFromClid</option>
<option value="clientGetNameFromDbid" >clientGetNameFromDbid</option>
<option value="clientEdit" >clientEdit</option>
<option value="clientDbFind" >clientDbFind</option>
<option value="clientDbEdit" >clientDbEdit</option>
<option value="clientDbDelete" >clientDbDelete</option>
<option value="serverList" >serverList</option>
<option value="channelClientPermList" >channelClientPermList</option>
<option value="channelGroupList" >channelGroupList</option>
<option value="serverGroupList" >serverGroupList</option>
<option value="channelList" >channelList</option>
<option value="clientList" >clientList</option>
<option value="ftList" >ftList</option>
<option value="ftGetFileList" >ftGetFileList</option>
<option value="ftGetFileInfo" >ftGetFileInfo</option>
<option value="ftStop" >ftStop</option>
<option value="ftDeleteFile" >ftDeleteFile</option>
<option value="ftCreateDir" >ftCreateDir</option>
<option value="ftRenameFile" >ftRenameFile</option>
<option value="ftInitUpload" >ftInitUpload</option>
<option value="ftInitDownload" >ftInitDownload</option>
<option value="uploadFile" >uploadFile</option>
<option value="downloadFile" >downloadFile</option>
<option value="downloadIcon" >downloadIcon</option>
<option value="uploadIcon" >uploadIcon</option>
<option value="getIconId" >getIconId</option>
<option value="createSnapshot" >createSnapshot</option>
<option value="deploySnapshot" >deploySnapshot</option>
</select>
<div class="form-row">
You can find documentation for all functions
<a target="_blank" href="https://multivit4min.github.io/TS3-NodeJS-Library/classes/teamspeak.teamspeak-2.html#on"> here</a>
</div>
</div>

View File

@@ -0,0 +1 @@
<p>Call a function on a Teamspeak 3 server.</p>

View File

@@ -1,9 +1,9 @@
import { EditorRED } from "node-red"; import { EditorRED } from "node-red";
import { Ts3GetEditorNodeProperties } from "../types"; import { Ts3CallEditorNodeProperties } from "../types";
declare const RED: EditorRED; declare const RED: EditorRED;
RED.nodes.registerType<Ts3GetEditorNodeProperties>('ts3-get',{ RED.nodes.registerType<Ts3CallEditorNodeProperties>('ts3-call',{
category: 'function', category: 'function',
color: '#a6bbcf', color: '#a6bbcf',
defaults: { defaults: {
@@ -14,6 +14,6 @@ RED.nodes.registerType<Ts3GetEditorNodeProperties>('ts3-get',{
inputs: 1, inputs: 1,
outputs: 1, outputs: 1,
label: function() { label: function() {
return this.name || "TS3 Get"; return this.name || "TS3 " + this.selection;
} }
}); });

View File

@@ -0,0 +1,47 @@
import { NodeInitializer } from "node-red";
import { Ts3ConfigNode } from "../ts3-config/types";
import { Ts3EventConfig, Ts3EventNode } from "./types";
const nodeInit: NodeInitializer = (RED): void => {
function Ts3Event(
this: Ts3EventNode,
config: Ts3EventConfig
): void {
RED.nodes.createNode(this, config);
const ts3Config = RED.nodes.getNode(config.configid) as Ts3ConfigNode
// HACK: ts3Config.on("connected") would not work because i dont know how to use typescript
ts3Config.addListener("connected",()=>{
this.status({fill:"green",shape:"dot",text:"Connected"})
})
ts3Config.addListener("disconnect",()=>{
this.status({fill:"grey",shape:"dot",text:"not conncted"})
})
ts3Config.addListener("error",()=>{
this.status({fill:"red",shape:"dot",text:"Error"})
});
(async() =>{
const client = await ts3Config.getConnection()
this.warn("added: " + config.selection)
// HACK: like above i dont know how to use typescript
client.addListener(config.selection,(event: any)=>{
let msg = {
payload: event
}
console.log("### EVENT ###")
console.log(event)
this.send(msg)
})
})();
}
RED.nodes.registerType("ts3-event", Ts3Event);
};
export = nodeInit;

View File

@@ -0,0 +1,15 @@
import { NodeDef, Node, EditorNodeProperties } from "node-red";
export interface Ts3EventProps {
configid: string
selection: string
}
export interface Ts3EventData {
}
export interface Ts3EventConfig extends NodeDef, Ts3EventProps { }
export interface Ts3EventNode extends Node, Ts3EventData {}
export interface Ts3EventEditorNodeProperties extends EditorNodeProperties,Ts3EventProps {}

View File

@@ -0,0 +1,28 @@
<div class="form-row">
<label for="node-input-name"><i class="fa fa-globe"></i> Name</label>
<input type="text" id="node-input-name">
</div>
<div class="form-row">
<label for="node-input-configid"><i class="fa fa-server"></i> Connection</label>
<input type="text" id="node-input-configid">
</div>
<div class="form-row">
<label for="node-input-configid"><i class="fa fa-terminal"></i> Event</label>
<select class="form-select" id="node-input-selection">
<option value="channelcreate" >ChannelCreate </option>
<option value="channeldelete" >ChannelDelete </option>
<option value="channeledit" >ChannelEdit </option>
<option value="channelmove" >ChannelMove </option>
<option value="clientconnect" >ClientConnect </option>
<option value="clientdisconnect" >ClientDisconnect </option>
<option value="clientmoved" >ClientMoved </option>
<option value="serveredit" >ServerEdit </option>
<option value="textmessage" >TextMessage </option>
<option value="tokenused" >TokenUsed </option>
</select>
</div>
<div class="form-row">
You can find documentation for all events
<a target="_blank" href="https://multivit4min.github.io/TS3-NodeJS-Library/modules/types_events.html"> here</a>
</div>

View File

@@ -0,0 +1 @@
<p>Listen on events on Teamspeak</p>

View File

@@ -0,0 +1,19 @@
import { EditorRED } from "node-red";
import { Ts3EventEditorNodeProperties } from "../types";
declare const RED: EditorRED;
RED.nodes.registerType<Ts3EventEditorNodeProperties>('ts3-event',{
category: 'function',
color: '#a6bbcf',
defaults: {
name: {value:""},
configid: { type:"ts3-config", value: "" },
selection: { value:"" }
},
inputs: 0,
outputs: 1,
label: function() {
return this.name || "TS3 " + this.selection;
}
});

View File

@@ -1,15 +0,0 @@
import { NodeDef, Node, EditorNodeProperties } from "node-red";
export interface Ts3GetProps {
configid: string
selection: string
}
export interface Ts3GetData {
}
export interface Ts3GetConfig extends NodeDef, Ts3GetProps { }
export interface Ts3GetNode extends Node, Ts3GetData {}
export interface Ts3GetEditorNodeProperties extends EditorNodeProperties,Ts3GetProps {}

View File

@@ -1,83 +0,0 @@
<div class="form-row">
<label for="node-input-name"><i class="fa fa-globe"></i> Name</label>
<input type="text" id="node-input-name">
</div>
<div class="form-row">
<label for="node-input-configid"><i class="fa fa-server"></i> Connection</label>
<input type="text" id="node-input-configid">
</div>
<div class="form-row">
<label for="node-input-configid"><i class="fa fa-terminal"></i> Function</label>
<select class="form-select" id="node-input-selection">
<option value="version" selected>version</option>
<option value="apiKeyList">apiKeyList</option>
<option value="hostInfo">hostInfo</option>
<option value="instanceInfo">instanceInfo</option>
<option value="bindingList">bindingList</option>
<option value="whoami">whoami</option>
<option value="serverInfo">serverInfo</option>
<option value="serverIdGetByPort">serverIdGetByPort</option>
<option value="connectionInfo">connectionInfo</option>
<option value="serverGroupClientList">serverGroupClientList</option>
<option value="serverGroupsByClientId">serverGroupsByClientId</option>
<option value="serverGroupPermList">serverGroupPermList</option>
<option value="serverTempPasswordList">serverTempPasswordList</option>
<option value="getChannelById">getChannelById</option>
<option value="channelPermList">channelPermList</option>
<option value="getClientById">getClientById</option>
<option value="getChannelByName">getChannelByName</option>
<option value="channelFind">channelFind</option>
<option value="channelInfo">channelInfo</option>
<option value="getClientByDbid">getClientByDbid</option>
<option value="getClientByUid">getClientByUid</option>
<option value="getClientByName">getClientByName</option>
<option value="clientInfo">clientInfo</option>
<option value="clientDbList">clientDbList</option>
<option value="clientDbInfo">clientDbInfo</option>
<option value="clientPermList">clientPermList</option>
<option value="customSearch">customSearch</option>
<option value="customInfo">customInfo</option>
<option value="getServerGroupById">getServerGroupById</option>
<option value="getServerGroupByName">getServerGroupByName</option>
<option value="getChannelGroupById">getChannelGroupById</option>
<option value="getChannelGroupByName">getChannelGroupByName</option>
<option value="setClientChannelGroup">setClientChannelGroup</option>
<option value="channelGroupPermList">channelGroupPermList</option>
<option value="channelGroupClientList">channelGroupClientList</option>
<option value="permOverview">permOverview</option>
<option value="permissionList">permissionList</option>
<option value="permIdGetByName">permIdGetByName</option>
<option value="permIdsGetByName">permIdsGetByName</option>
<option value="permGet">permGet</option>
<option value="permFind">permFind</option>
<option value="privilegeKeyList">privilegeKeyList</option>
<option value="messageList">messageList</option>
<option value="messageGet">messageGet</option>
<option value="complainList">complainList</option>
<option value="banList">banList</option>
<option value="logView">logView</option>
<option value="clientFind">clientFind</option>
<option value="clientGetIds">clientGetIds</option>
<option value="clientGetDbidFromUid">clientGetDbidFromUid</option>
<option value="clientGetNameFromUid">clientGetNameFromUid</option>
<option value="clientGetUidFromClid">clientGetUidFromClid</option>
<option value="clientGetNameFromDbid">clientGetNameFromDbid</option>
<option value="clientDbFind">clientDbFind</option>
<option value="serverList">serverList</option>
<option value="channelClientPermList">channelClientPermList</option>
<option value="channelGroupList">channelGroupList</option>
<option value="serverGroupList">serverGroupList</option>
<option value="channelList">channelList</option>
<option value="clientList">clientList</option>
<option value="ftList">ftList</option>
<option value="ftGetFileList">ftGetFileList</option>
<option value="ftGetFileInfo">ftGetFileInfo</option>
<option value="downloadFile">downloadFile</option>
<option value="downloadIcon">downloadIcon</option>
<option value="getIconId">getIconId</option>
</select>
<div class="form-row">
You can find documentation for all functions
<a target="_blank" href="https://multivit4min.github.io/TS3-NodeJS-Library/classes/teamspeak.teamspeak-2.html"> here</a>
</div>
</div>

View File

@@ -1 +0,0 @@
<p>Get information from a Teamspeak 3 server.</p>