Compare commits

...

12 Commits

Author SHA1 Message Date
t.behrendt 981c64d1b0 ci: skip arm64 build
CI / Test (pull_request) Successful in 1m14s
2026-05-31 10:58:56 +02:00
t.behrendt 9b639f240e ci: add docker build cache 2026-05-31 10:58:29 +02:00
t.behrendt 150aa67971 ci: add bun dep cache 2026-05-31 10:58:07 +02:00
renovate-bot f6834a1d2c chore(deps): update dependency ts3-nodejs-library to v3.5.3 (#123)
CD / Test (push) Successful in 4m56s
CD / Create tag (push) Successful in 12s
CD / Build and push (amd64) (push) Successful in 33s
CD / Build and push (arm64) (push) Successful in 7m1s
CD / Create manifest (push) Successful in 7s
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [ts3-nodejs-library](https://github.com/Multivit4min/TS3-NodeJS-Library) | [`3.5.2` → `3.5.3`](https://renovatebot.com/diffs/npm/ts3-nodejs-library/3.5.2/3.5.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/ts3-nodejs-library/3.5.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ts3-nodejs-library/3.5.2/3.5.3?slim=true) |

---

### Release Notes

<details>
<summary>Multivit4min/TS3-NodeJS-Library (ts3-nodejs-library)</summary>

### [`v3.5.3`](https://github.com/Multivit4min/TS3-NodeJS-Library/blob/HEAD/CHANGELOG.md#353---11052026)

[Compare Source](https://github.com/Multivit4min/TS3-NodeJS-Library/compare/2d7ec0093f6e080a2f84209511d3c60114556740...0c69b7ee80fa5b74e9175cf4ae3018346f7eb300)

- reverted pull request [199](https://github.com/Multivit4min/TS3-NodeJS-Library/pull/199)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41LjQiLCJ1cGRhdGVkSW5WZXIiOiI0My41LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Reviewed-on: #123
Reviewed-by: t.behrendt <2+t.behrendt@noreply.localhost>
Co-authored-by: Renovate Bot <renovate@t00n.de>
Co-committed-by: Renovate Bot <renovate@t00n.de>
2026-05-28 19:51:45 +02:00
renovate-bot 4b1e738020 chore(deps): pin dependencies (#122)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| docker.io/library/teamspeak | pinDigest |  → `11fb1dd` |
| ghcr.io/gotify/server | pinDigest |  → `a3af470` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41LjQiLCJ1cGRhdGVkSW5WZXIiOiI0My41LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Reviewed-on: #122
Reviewed-by: t.behrendt <2+t.behrendt@noreply.localhost>
Co-authored-by: Renovate Bot <renovate@t00n.de>
Co-committed-by: Renovate Bot <renovate@t00n.de>
2026-05-28 19:49:34 +02:00
renovate-bot 2b3a93d6b2 chore(deps): update https://gitea.t000-n.de/t.behrendt/actions action to v0.2.4 (#118)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [https://gitea.t000-n.de/t.behrendt/actions](https://gitea.t000-n.de/t.behrendt/actions) | action | patch | `0.2.3` → `0.2.4` |

---

### Release Notes

<details>
<summary>t.behrendt/actions (https://gitea.t000-n.de/t.behrendt/actions)</summary>

### [`v0.2.4`](https://gitea.t000-n.de/t.behrendt/actions/compare/0.2.3...0.2.4)

[Compare Source](https://gitea.t000-n.de/t.behrendt/actions/compare/0.2.3...0.2.4)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41LjQiLCJ1cGRhdGVkSW5WZXIiOiI0My41LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImFjdGlvbiIsImRlcHMiXX0=-->

Reviewed-on: #118
Reviewed-by: t.behrendt <t.behrendt@noreply.localhost>
Co-authored-by: Renovate Bot <renovate@t00n.de>
Co-committed-by: Renovate Bot <renovate@t00n.de>
2026-05-19 10:41:03 +02:00
t.behrendt d6d9c63b3d fix: disconnection issue by adding a persistent ping (#121)
CD / Test (push) Successful in 19s
CD / Create tag (push) Successful in 18s
CD / Build and push (amd64) (push) Successful in 34s
CD / Build and push (arm64) (push) Successful in 1m38s
CD / Create manifest (push) Successful in 8s
Fixes the frequent disconnection issue, by adding a ping.
The "version" call works without authentication and is lightweight. Passing the "true" flag, prevents delivery of cached results.
This keeps the socket always connected. Feature may be removed in the future if the upstream library has a proper fix for the issue.

Reviewed-on: #121
Co-authored-by: Timo Behrendt <t.behrendt@t00n.de>
Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
2026-05-09 14:38:52 +02:00
t.behrendt eb9b335789 chore: add compose local test setup (#120)
Reviewed-on: #120
Co-authored-by: Timo Behrendt <t.behrendt@t00n.de>
Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
2026-05-09 14:18:49 +02:00
t.behrendt 0e4ab1bfc6 fix: enable soft reconnect (#119)
CD / Test (push) Successful in 19s
CD / Build and push (amd64) (push) Successful in 33s
CD / Create tag (push) Successful in 6s
CD / Build and push (arm64) (push) Successful in 1m33s
CD / Create manifest (push) Successful in 8s
Try to reconnect softly to the ts3 server instead of crashing hard in case of closed connection or errors. Also tracks if a re-connection attempt is currently in progress.

Reviewed-on: #119
Reviewed-by: branch-buddy <branch-buddy@t00n.de>
Co-authored-by: Timo Behrendt <t.behrendt@t00n.de>
Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
2026-05-07 19:10:17 +02:00
renovate-bot 0670e54cf1 chore(deps): update https://gitea.t000-n.de/t.behrendt/actions action to v0.2.3 (#116)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [https://gitea.t000-n.de/t.behrendt/actions](https://gitea.t000-n.de/t.behrendt/actions) | action | patch | `0.2.2` → `0.2.3` |

---

### Release Notes

<details>
<summary>t.behrendt/actions (https://gitea.t000-n.de/t.behrendt/actions)</summary>

### [`v0.2.3`](https://gitea.t000-n.de/t.behrendt/actions/compare/0.2.2...0.2.3)

[Compare Source](https://gitea.t000-n.de/t.behrendt/actions/compare/0.2.2...0.2.3)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41LjQiLCJ1cGRhdGVkSW5WZXIiOiI0My41LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImFjdGlvbiIsImRlcHMiXX0=-->

Reviewed-on: #116
Reviewed-by: t.behrendt <t.behrendt@noreply.localhost>
Co-authored-by: Renovate Bot <renovate@t00n.de>
Co-committed-by: Renovate Bot <renovate@t00n.de>
2026-04-28 17:10:03 +02:00
renovate-bot 494c71d4c7 chore(deps): update https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment action to v0.1.32 (#117)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment](https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment) | action | patch | `0.1.31` → `0.1.32` |

---

### Release Notes

<details>
<summary>t.behrendt/conventional-semantic-git-tag-increment (https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment)</summary>

### [`v0.1.32`](https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment/compare/0.1.31...0.1.32)

[Compare Source](https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment/compare/0.1.31...0.1.32)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41LjQiLCJ1cGRhdGVkSW5WZXIiOiI0My41LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImFjdGlvbiIsImRlcHMiXX0=-->

Reviewed-on: #117
Reviewed-by: t.behrendt <t.behrendt@noreply.localhost>
Co-authored-by: Renovate Bot <renovate@t00n.de>
Co-committed-by: Renovate Bot <renovate@t00n.de>
2026-04-28 17:01:03 +02:00
renovate-bot 74dd61ee7f chore(deps): update dependency typescript to v6.0.3 (#115)
CD / Test (push) Successful in 22s
CD / Create tag (push) Successful in 17s
CD / Build and push (amd64) (push) Successful in 33s
CD / Build and push (arm64) (push) Successful in 1m38s
CD / Create manifest (push) Successful in 7s
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [typescript](https://www.typescriptlang.org/) ([source](https://github.com/microsoft/TypeScript)) | [`6.0.2` → `6.0.3`](https://renovatebot.com/diffs/npm/typescript/6.0.2/6.0.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/6.0.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/6.0.2/6.0.3?slim=true) |

---

### Release Notes

<details>
<summary>microsoft/TypeScript (typescript)</summary>

### [`v6.0.3`](https://github.com/microsoft/TypeScript/releases/tag/v6.0.3): TypeScript 6.0.3

[Compare Source](https://github.com/microsoft/TypeScript/compare/v6.0.2...v6.0.3)

For release notes, check out the [release announcement blog post](https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/).

- [fixed issues query for TypeScript 6.0.0 (Beta)](https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+6.0.0%22).
- [fixed issues query for TypeScript 6.0.1 (RC)](https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+6.0.1%22).
- [fixed issues query for TypeScript 6.0.2 (Stable)](https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+6.0.2%22).
- [fixed issues query for TypeScript 6.0.3 (Stable)](https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+6.0.3%22).

Downloads are available on:

- [npm](https://www.npmjs.com/package/typescript)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41LjQiLCJ1cGRhdGVkSW5WZXIiOiI0My41LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Reviewed-on: #115
Reviewed-by: t.behrendt <t.behrendt@noreply.localhost>
Co-authored-by: Renovate Bot <renovate@t00n.de>
Co-committed-by: Renovate Bot <renovate@t00n.de>
2026-04-27 18:29:26 +02:00
8 changed files with 101 additions and 13 deletions
+6
View File
@@ -0,0 +1,6 @@
*
!package.json
!bun.lockb
!src/
!tsconfig.json
+6 -5
View File
@@ -41,7 +41,7 @@ jobs:
name: Build and push
strategy:
matrix:
arch: [ amd64, arm64 ]
arch: [amd64]
needs:
- test
runs-on:
@@ -77,6 +77,8 @@ jobs:
provenance: false
tags: |
${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}-${{ matrix.arch }}
cache-from: type=registry,ref=${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:cache
cache-to: type=registry,ref=${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:cache,mode=max
create_tag:
name: Create tag
@@ -89,12 +91,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@38c1bbd8bad3e7965744d03de85faa4a5b808d1b # 0.2.4
with:
tag: ${{ steps.tag.outputs.new-tag }}
- name: Set output
@@ -127,7 +129,6 @@ jobs:
- name: Create manifest
run: |
docker manifest create ${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ needs.create_tag.outputs.tag }} \
${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}-amd64 \
${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}-arm64
${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}-amd64
docker manifest push ${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ needs.create_tag.outputs.tag }}
+9
View File
@@ -15,7 +15,16 @@ jobs:
with:
bun-version-file: ".bun-version"
- name: Cache dependencies
id: cache-deps
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
with:
path: |
node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('bun.lockb') }}
- name: Install dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
run: bun install --frozen-lockfile
- name: Run lint
+3
View File
@@ -130,3 +130,6 @@ dist
.yarn/install-state.gz
.pnp.*
# Local docker test setup
gotify_data/
ts3_data/
BIN
View File
Binary file not shown.
+47
View File
@@ -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:11fb1dd03c68ae7b3a8a86c5a08827d01d87a833177ad92ee5c19d7b72d08ce0
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/"
+2 -2
View File
@@ -10,7 +10,7 @@
"@typescript-eslint/parser": "5.62.0",
"cspell": "10.0.0",
"eslint": "8.57.1",
"typescript": "6.0.2",
"typescript": "6.0.3",
"@types/bun": "latest"
},
"dependencies": {
@@ -18,7 +18,7 @@
"gotify": "1.1.0",
"pino": "10.3.1",
"pino-pretty": "13.1.3",
"ts3-nodejs-library": "3.5.2"
"ts3-nodejs-library": "3.5.3"
},
"name": "ts3gotify",
"module": "src/main.ts",
+27 -5
View File
@@ -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 {