Compare commits
6 Commits
0.0.15
..
0a0a1fc611
| Author | SHA1 | Date | |
|---|---|---|---|
| 0a0a1fc611 | |||
| d6d9c63b3d | |||
| eb9b335789 | |||
| 0e4ab1bfc6 | |||
| 0670e54cf1 | |||
| 494c71d4c7 |
@@ -0,0 +1,6 @@
|
||||
*
|
||||
|
||||
!package.json
|
||||
!bun.lockb
|
||||
!src/
|
||||
!tsconfig.json
|
||||
@@ -89,12 +89,12 @@ jobs:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment@74d41d9bd9c243f295b53762681c714f3d24fd4c # 0.1.31
|
||||
- uses: https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment@ef0c23189db33220a73022d8c29a27709d0df440 # 0.1.32
|
||||
id: tag
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
prerelease: ${{ github.event_name == 'workflow_dispatch' }}
|
||||
- uses: https://gitea.t000-n.de/t.behrendt/actions/release-git-tag@f386e2570df6a796ba0a69865c89ea0c1a7109ab # 0.2.2
|
||||
- uses: https://gitea.t000-n.de/t.behrendt/actions/release-git-tag@47a1c635cfc76cfb4eeee3db0d0b89bf19007c7a # 0.2.3
|
||||
with:
|
||||
tag: ${{ steps.tag.outputs.new-tag }}
|
||||
- name: Set output
|
||||
|
||||
@@ -130,3 +130,6 @@ dist
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
# Local docker test setup
|
||||
gotify_data/
|
||||
ts3_data/
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
services:
|
||||
ts3gotify:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
LOG_LEVEL: debug
|
||||
TS3_HOST: ts3
|
||||
TS3_QUERY_PORT: 10011
|
||||
TS3_SERVER_PORT: 9987
|
||||
TS3_USERNAME: serveradmin
|
||||
TS3_PASSWORD: Qx7uUh4i
|
||||
TS3_NICKNAME: ts3gotify
|
||||
GOTIFY_URL: http://gotify:80
|
||||
GOTIFY_TOKEN: ApvIy.aFpN3.QlQ
|
||||
GOTIFY_TITLE: ts3gotify
|
||||
MODE: '["connect", "disconnect", "moved", "message"]'
|
||||
|
||||
gotify:
|
||||
image: ghcr.io/gotify/server:latest@sha256:a3af47067ce6aad76aadf5ba32d6ddfecd1ae576a961359f039fd1831e8b7652
|
||||
ports:
|
||||
- 8080:80
|
||||
environment:
|
||||
TZ: "Europe/Amsterdam"
|
||||
GOTIFY_DEFAULTUSER_PASS: "admin"
|
||||
volumes:
|
||||
- "./gotify_data:/app/data"
|
||||
|
||||
ts3:
|
||||
image: docker.io/library/teamspeak:latest@sha256:4d3fa1c0db9a5a4ac69a2d07d6f0478539e464b15e7186c243a9f194bc1141fa
|
||||
ports:
|
||||
- name: voice
|
||||
target: 9987
|
||||
published: 9987
|
||||
protocol: udp
|
||||
- name: query
|
||||
target: 10011
|
||||
published: 10011
|
||||
protocol: tcp
|
||||
- name: filetransfer
|
||||
target: 30033
|
||||
published: 30033
|
||||
protocol: tcp
|
||||
environment:
|
||||
TS3SERVER_LICENSE: accept
|
||||
volumes:
|
||||
- "./ts3_data:/var/ts3server/"
|
||||
+27
-5
@@ -1,13 +1,13 @@
|
||||
import type { Gotify } from "gotify";
|
||||
import type { Logger } from "pino";
|
||||
import type { TeamSpeak, TextMessageTargetMode } from "ts3-nodejs-library";
|
||||
import type { GotifyConfig, Mode } from "./types";
|
||||
import {
|
||||
ClientConnect,
|
||||
ClientDisconnect,
|
||||
ClientMoved,
|
||||
TextMessage,
|
||||
} from "ts3-nodejs-library/lib/types/Events";
|
||||
import type { GotifyConfig, Mode } from "./types";
|
||||
|
||||
function resolveMessageTarget(target: TextMessageTargetMode): string {
|
||||
if (target === 1) {
|
||||
@@ -43,8 +43,11 @@ export function ts3gotifyFactory(
|
||||
ts3Client: TeamSpeak,
|
||||
gotifyClient: Gotify,
|
||||
gotifyConfig: GotifyConfig,
|
||||
logger: Logger
|
||||
logger: Logger,
|
||||
pingInterval = 2_500
|
||||
) {
|
||||
let reconnectInProgress = false;
|
||||
|
||||
function sendNotification(message: string) {
|
||||
gotifyClient
|
||||
.send({
|
||||
@@ -87,15 +90,34 @@ export function ts3gotifyFactory(
|
||||
}
|
||||
}
|
||||
|
||||
ts3Client.on("close", async () => {
|
||||
async function reconnectWithBackoff() {
|
||||
if (reconnectInProgress) {
|
||||
return;
|
||||
}
|
||||
|
||||
reconnectInProgress = true;
|
||||
logger.info("disconnected, trying to reconnect...");
|
||||
await ts3Client.reconnect(5, 1000);
|
||||
|
||||
try {
|
||||
await ts3Client.reconnect(10, 2000);
|
||||
logger.info("reconnected!");
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : String(error);
|
||||
logger.error(`Error reconnecting to TS3 server: ${message}`);
|
||||
} finally {
|
||||
reconnectInProgress = false;
|
||||
}
|
||||
}
|
||||
|
||||
setInterval(() => ts3Client.version(true), pingInterval);
|
||||
|
||||
ts3Client.on("close", async () => {
|
||||
await reconnectWithBackoff();
|
||||
});
|
||||
|
||||
ts3Client.on("error", (error: Error) => {
|
||||
logger.error(`Error connecting to TS3 server: ${error.message}`);
|
||||
process.exit(1);
|
||||
reconnectWithBackoff();
|
||||
});
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user