This commit is contained in:
2021-04-22 00:00:13 +02:00
parent a652d42472
commit 7a668cbd80
7 changed files with 63 additions and 14 deletions

View File

@@ -10,3 +10,20 @@ services:
- ./docker:/data - ./docker:/data
ports: ports:
- 1880:1880 - 1880:1880
networks:
- tsNet
ts3:
image: "teamspeak"
container_name: "ts3"
environment:
- TS3SERVER_LICENSE=accept
ports:
- "9987:9987/udp"
- "10011:10011"
- "30033:30033"
networks:
- tsNet
networks:
tsNet:
driver: bridge

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env sh #!/usr/bin/env sh
set -e set -e
rm -r dist rm -rf dist
yarn run build yarn run build

View File

@@ -12,8 +12,6 @@
], ],
"node-red": { "node-red": {
"nodes": { "nodes": {
"lower-case": "dist/nodes/lower-case/lower-case.js",
"lower-case-creds": "dist/nodes/lower-case-creds/lower-case-creds.js",
"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-get/ts3-get.js"
} }

View File

@@ -1,16 +1,39 @@
import { NodeDef, NodeInitializer, Node } from "node-red"; import { NodeDef, NodeInitializer, Node } from "node-red";
import { Ts3ConfigConfig, Ts3ConfigNode } from "./types"; import { Ts3ConfigConfig, Ts3ConfigNode } from "./types";
import { TeamSpeak, QueryProtocol } from "ts3-nodejs-library"
const nodeInit: NodeInitializer = (RED): void => { const nodeInit: NodeInitializer = (RED): void => {
function Ts3Config( function Ts3Config(
this: Ts3ConfigNode, this: Ts3ConfigNode,
config: Ts3ConfigConfig config: Ts3ConfigConfig
): void { ): void {
RED.nodes.createNode(this, config); RED.nodes.createNode(this, config)
this.host = config.host
this.nickname = config.nickname
// TODO connect ts3 query here const host = config.host
const nickname = config.nickname
let client: TeamSpeak | null = null
let connectPromise: Promise<TeamSpeak> | null = null
this.getConnection = async (): Promise<TeamSpeak>=>{
if (client){
return client
}else if (connectPromise){
return connectPromise
}else{
connectPromise = TeamSpeak.connect({
host: host,
protocol: QueryProtocol.RAW,
queryport: 10011,
serverport: 9987,
username: this.credentials.username,
password: this.credentials.password,
nickname: nickname
})
this.emit("connected")
return await connectPromise
}
}
} }
RED.nodes.registerType("ts3-config", Ts3Config,{ RED.nodes.registerType("ts3-config", Ts3Config,{

View File

@@ -1,4 +1,5 @@
import { NodeDef, Node } from "node-red"; import { NodeDef, Node } from "node-red";
import { TeamSpeak } from "ts3-nodejs-library"
export interface Ts3ConfigProps{ export interface Ts3ConfigProps{
host: string, host: string,
@@ -10,6 +11,11 @@ export interface Ts3ConfigCreds {
password: string password: string
} }
export interface Ts3ConfigData {
getConnection(): Promise<TeamSpeak>
}
export interface Ts3ConfigConfig extends NodeDef, Ts3ConfigProps, Ts3ConfigCreds { } export interface Ts3ConfigConfig extends NodeDef, Ts3ConfigProps, Ts3ConfigCreds { }
export interface Ts3ConfigNode extends Node<Ts3ConfigCreds>, Ts3ConfigProps {} export interface Ts3ConfigNode extends Node<Ts3ConfigCreds>, Ts3ConfigData {}

View File

@@ -8,12 +8,18 @@ const nodeInit: NodeInitializer = (RED): void => {
config: Ts3GetConfig config: Ts3GetConfig
): void { ): void {
RED.nodes.createNode(this, config); RED.nodes.createNode(this, config);
this.warn(config.configid)
this.ts3Config = RED.nodes.getNode(config.configid) as Ts3ConfigNode
this.on("input", (msg) => { const ts3Config = RED.nodes.getNode(config.configid) as Ts3ConfigNode
msg.payload = this.ts3Config.credentials.username
this.send(msg) this.on("input", async (msg,send,done) => {
const client = await ts3Config.getConnection()
let clients = await client.clientList({ clientType: 0 })
msg.payload = clients
send(msg)
done()
}) })
} }

View File

@@ -6,7 +6,6 @@ export interface Ts3GetProps {
} }
export interface Ts3GetData { export interface Ts3GetData {
ts3Config: Ts3ConfigNode
} }
export interface Ts3GetConfig extends NodeDef, Ts3GetProps { } export interface Ts3GetConfig extends NodeDef, Ts3GetProps { }