Compare commits

...

59 Commits

Author SHA1 Message Date
3503a63a10 Merge branch 'main' of https://github.com/JohnXLivingston/peertube-plugin-livechat 2025-06-15 09:19:36 -04:00
John Livingston
e41529b61f
update note 2025-06-09 12:18:14 +02:00
John Livingston
1e7e851dc9
Release v13.0.0 2025-06-09 11:11:23 +02:00
John Livingston
80a5b76172
Updating SPDX headers. 2025-06-09 10:48:43 +02:00
John Livingston
6cd7f013f2
Merge pull request #698 from JohnXLivingston/dependabot/npm_and_yarn/minor-and-patch-434c38cfec
Bump the minor-and-patch group across 1 directory with 2 updates
2025-06-09 10:45:52 +02:00
John Livingston
419355640a
Merge pull request #696 from framabot/weblate-peertube-livechat-peertube-plugin-livechat-documentation
Translations update from Framasoft Weblate
2025-06-09 10:45:45 +02:00
Jiří Podhorecký
9c2d8cfbb6
Translated using Weblate (Czech)
Currently translated at 47.7% (430 of 900 strings)

Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/cs/
2025-06-09 10:45:32 +02:00
fran secs
06c274c4b5
Translated using Weblate (Catalan)
Currently translated at 100.0% (900 of 900 strings)

Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/ca/
2025-06-09 10:45:32 +02:00
Victor Hampel
bdf8817bf8
Translated using Weblate (German)
Currently translated at 100.0% (900 of 900 strings)

Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/de/
2025-06-09 10:45:32 +02:00
John Livingston
cd1fa7c4d4
Translated using Weblate (French)
Currently translated at 83.7% (754 of 900 strings)

Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/fr/
2025-06-09 10:45:32 +02:00
John Livingston
d75e07e022
Merge pull request #697 from framabot/weblate-peertube-livechat-peertube-plugin-livechat
Translations update from Framasoft Weblate
2025-06-09 10:45:27 +02:00
dependabot[bot]
bebb7918bd
Bump the minor-and-patch group across 1 directory with 2 updates
Bumps the minor-and-patch group with 2 updates in the / directory: [@types/express](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `@types/express` from 5.0.2 to 5.0.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/express)

Updates `typescript-eslint` from 8.33.0 to 8.33.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.33.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@types/express"
  dependency-version: 5.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: typescript-eslint
  dependency-version: 8.33.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-09 03:45:13 +00:00
Victor Hampel
14ff00c730
Translated using Weblate (German)
Currently translated at 100.0% (317 of 317 strings)

Translation: PeerTube LiveChat/Peertube Plugin LiveChat
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/de/
2025-06-07 10:38:23 +02:00
John Livingston
edd29ed1ed
Mentioning the NlNet funding. 2025-06-06 17:29:47 +02:00
John Livingston
e24385c3f1
Updating documentation + removing deprecated field description 2025-06-06 17:08:53 +02:00
John Livingston
0be11fb2ae
Security Fix: mitigate ReDOS attacks on the chat bot. 2025-06-06 16:41:22 +02:00
John Livingston
98dc729447
Merge pull request #681 from framabot/weblate-peertube-livechat-peertube-plugin-livechat
Translations update from Framasoft Weblate
2025-06-06 16:40:22 +02:00
Fjuro
7dcfac00cb
Translated using Weblate (Czech)
Currently translated at 100.0% (318 of 318 strings)

Translation: PeerTube LiveChat/Peertube Plugin LiveChat
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/cs/
2025-06-06 16:40:06 +02:00
fran secs
3b319927c6
Translated using Weblate (Catalan)
Currently translated at 100.0% (318 of 318 strings)

Translation: PeerTube LiveChat/Peertube Plugin LiveChat
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/ca/
2025-06-06 16:40:06 +02:00
John Livingston
ad1d7786af
Merge pull request #692 from framabot/weblate-peertube-livechat-peertube-plugin-livechat-documentation
Translations update from Framasoft Weblate
2025-06-06 16:39:58 +02:00
Jiří Podhorecký
500624d0ff
Translated using Weblate (Czech)
Currently translated at 46.8% (421 of 899 strings)

Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/cs/
2025-06-04 00:35:13 +02:00
John Livingston
6dd4639727
Merge pull request #691 from JohnXLivingston/dependabot/npm_and_yarn/minor-and-patch-5bad440f25
Bump the minor-and-patch group across 1 directory with 7 updates
2025-06-03 16:19:12 +02:00
John Livingston
c00f5d1593
Merge pull request #685 from framabot/weblate-peertube-livechat-peertube-plugin-livechat-documentation
Translations update from Framasoft Weblate
2025-06-03 16:18:50 +02:00
dependabot[bot]
ee1417774a
Bump the minor-and-patch group across 1 directory with 7 updates
Bumps the minor-and-patch group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.27.0` | `9.28.0` |
| [@tsconfig/node16](https://github.com/tsconfig/bases/tree/HEAD/bases) | `16.1.3` | `16.1.4` |
| [esbuild](https://github.com/evanw/esbuild) | `0.25.4` | `0.25.5` |
| [globals](https://github.com/sindresorhus/globals) | `16.1.0` | `16.2.0` |
| [sass](https://github.com/sass/dart-sass) | `1.89.0` | `1.89.1` |
| [stylelint](https://github.com/stylelint/stylelint) | `16.19.1` | `16.20.0` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.32.1` | `8.33.0` |



Updates `@eslint/js` from 9.27.0 to 9.28.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.28.0/packages/js)

Updates `@tsconfig/node16` from 16.1.3 to 16.1.4
- [Commits](https://github.com/tsconfig/bases/commits/HEAD/bases)

Updates `esbuild` from 0.25.4 to 0.25.5
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.25.4...v0.25.5)

Updates `globals` from 16.1.0 to 16.2.0
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.1.0...v16.2.0)

Updates `sass` from 1.89.0 to 1.89.1
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.0...1.89.1)

Updates `stylelint` from 16.19.1 to 16.20.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.19.1...16.20.0)

Updates `typescript-eslint` from 8.32.1 to 8.33.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.33.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@tsconfig/node16"
  dependency-version: 16.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: esbuild
  dependency-version: 0.25.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: globals
  dependency-version: 16.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: sass
  dependency-version: 1.89.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: stylelint
  dependency-version: 16.20.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: typescript-eslint
  dependency-version: 8.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 04:20:02 +00:00
Jiří Podhorecký
dfd694782e
Translated using Weblate (Czech)
Currently translated at 43.1% (388 of 899 strings)

Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/cs/
2025-05-23 00:47:28 +02:00
Fjuro
8348011b34
Translated using Weblate (Czech)
Currently translated at 42.8% (385 of 899 strings)

Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/cs/
2025-05-22 19:48:39 +02:00
John Livingston
b0c08e72e2
Fix: message deletion were not properly anonymized when using "Anonymize moderation actions" option. 2025-05-21 18:18:44 +02:00
John Livingston
60ea2b4ed0
Fix #626: Bot timer was buggy, using seconds as delay instead of minutes.
There was a regression some months ago in the "bot timer" functionnality.
In the channels settings, the delay between two quotes is supposed to be in minutes, but in fact we applied seconds.
We don't have any way to detect if the user meant seconds or minutes when they configured their channels (it depends if it was before or after the regression).
So we encourage all streamers to go through their channel settings, check the frequency of their bot timers (if enabled), set them to the correct value, and save the form.
Users must save the form to be sure to apply the correct value.
2025-05-21 17:51:54 +02:00
John Livingston
078515572e
Fix data type. 2025-05-21 17:45:56 +02:00
John Livingston
8a12ddabc2
Fix: bot timer can't be negative or null. 2025-05-21 17:12:14 +02:00
John Livingston
1b8531a198
Fix: bot timer can't be negative or null. 2025-05-21 16:51:47 +02:00
John Livingston
a5ede49402
Fix tasks: checkbox state does not change when clicked. 2025-05-21 16:36:44 +02:00
John Livingston
4bebc18c67
Fix: moderation notes: fix filter button wrongly displayed on notes without associated occupant.
Also fix typo.
2025-05-21 16:25:11 +02:00
John Livingston
562e6a16e2
npm audit fix 2025-05-21 12:28:24 +02:00
John Livingston
1bb79054b4
Merge pull request #677 from JohnXLivingston/dependabot/npm_and_yarn/minor-and-patch-86ff11a346
Bump the minor-and-patch group across 1 directory with 5 updates
2025-05-21 12:24:15 +02:00
John Livingston
8ec8eb63e4
Merge pull request #678 from framabot/weblate-peertube-livechat-peertube-plugin-livechat
Translations update from Framasoft Weblate
2025-05-21 10:58:58 +02:00
Anonymous
688c4099ad
Translated using Weblate (Czech)
Currently translated at 99.0% (315 of 318 strings)

Translation: PeerTube LiveChat/Peertube Plugin LiveChat
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/cs/
2025-05-21 10:58:12 +02:00
John Livingston
238407c060
Changelog. 2025-05-21 10:57:24 +02:00
John Livingston
97587ab92f
Merge pull request #671 from framabot/weblate-peertube-livechat-peertube-plugin-livechat
Translations update from Framasoft Weblate
2025-05-21 10:56:31 +02:00
John Livingston
fdff085b37
Merge branch 'main' into weblate-peertube-livechat-peertube-plugin-livechat 2025-05-21 10:51:41 +02:00
dependabot[bot]
743e794d5d
Bump the minor-and-patch group across 1 directory with 5 updates
Bumps the minor-and-patch group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.26.0` | `9.27.0` |
| [@types/express](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express) | `5.0.1` | `5.0.2` |
| [sass](https://github.com/sass/dart-sass) | `1.88.0` | `1.89.0` |
| [sharp](https://github.com/lovell/sharp) | `0.34.1` | `0.34.2` |
| [yaml](https://github.com/eemeli/yaml) | `2.7.1` | `2.8.0` |



Updates `@eslint/js` from 9.26.0 to 9.27.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.27.0/packages/js)

Updates `@types/express` from 5.0.1 to 5.0.2
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/express)

Updates `sass` from 1.88.0 to 1.89.0
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.88.0...1.89.0)

Updates `sharp` from 0.34.1 to 0.34.2
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.34.1...v0.34.2)

Updates `yaml` from 2.7.1 to 2.8.0
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.7.1...v2.8.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.27.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@types/express"
  dependency-version: 5.0.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: sass
  dependency-version: 1.89.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: sharp
  dependency-version: 0.34.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: yaml
  dependency-version: 2.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-21 03:41:47 +00:00
Mehdi Benadel
9669861dec Add activate chat via short UUID mention to documentation (translation fr, en, es) 2025-05-20 16:54:42 +02:00
Mehdi Benadel
bb78c61b08 Fix #75: Short uuid handling 2025-05-20 16:54:42 +02:00
axolotle
5b8ccdf5ae Put occupants filters items on a single line 2025-05-20 16:48:35 +02:00
John Livingston
922e2fbdf4 Minor refactoring and fix. 2025-05-20 16:48:35 +02:00
John Livingston
42e589d397 Fix: Converse bottom panel messages not visible on new Peertube v7 theme (for example for muted users) 2025-05-20 16:48:35 +02:00
axolotle
02fff14351 update changelog 2025-05-20 16:48:35 +02:00
axolotle
3e70fd3892 Enlarge a custom emoji when posted without any other text 2025-05-20 16:48:35 +02:00
axolotle
dd040582d4 Resize custom emojis to text height 2025-05-20 16:48:35 +02:00
axolotle
d79deef5c0 Handle draggable lines on touch screens 2025-05-20 16:48:35 +02:00
axolotle
048c003ff0 Hide offline occupants in list by default 2025-05-20 16:48:35 +02:00
axolotle
ccbfe8e6d5 Add go to last msg button in chat bottom panel 2025-05-20 16:48:35 +02:00
axolotle
3bc8d2466b auto focus message field after anonymous user has entered nickname 2025-05-20 16:48:35 +02:00
John Livingston
356b385fc9
Translated using Weblate (French)
Currently translated at 100.0% (317 of 317 strings)

Translation: PeerTube LiveChat/Peertube Plugin LiveChat
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/fr/
2025-05-20 13:08:04 +02:00
Victor Hampel
b5c7fa4246
Translated using Weblate (German)
Currently translated at 100.0% (317 of 317 strings)

Translation: PeerTube LiveChat/Peertube Plugin LiveChat
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/de/
2025-05-20 13:08:04 +02:00
fran secs
e7c0be98ee
Translated using Weblate (Catalan)
Currently translated at 100.0% (317 of 317 strings)

Translation: PeerTube LiveChat/Peertube Plugin LiveChat
Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/ca/
2025-05-20 13:08:04 +02:00
John Livingston
ca13d237a3
Fix documentation. 2025-05-20 13:07:45 +02:00
John Livingston
799043c88e
Merge pull request #670 from JohnXLivingston/dependabot/npm_and_yarn/minor-and-patch-9184e5ce34
Bump typescript-eslint from 8.32.0 to 8.32.1 in the minor-and-patch group
2025-05-13 09:26:24 +02:00
dependabot[bot]
f12d4cb13a
Bump typescript-eslint in the minor-and-patch group
Bumps the minor-and-patch group with 1 update: [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `typescript-eslint` from 8.32.0 to 8.32.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.32.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.32.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-13 03:53:35 +00:00
468 changed files with 6444 additions and 10903 deletions

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

2
.gitmodules vendored
View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View File

@ -10,27 +10,27 @@ Source: https://github.com/JohnXLivingston/peertube-plugin-livechat/
# License: ... # License: ...
Files: CHANGELOG.md Files: CHANGELOG.md
Copyright: 2024 John Livingston <https://www.john-livingston.fr/> Copyright: 2024-2025 John Livingston <https://www.john-livingston.fr/>
License: AGPL-3.0-only License: AGPL-3.0-only
Files: languages/* Files: languages/*
Copyright: 2024 John Livingston <https://www.john-livingston.fr/> Copyright: 2024-2025 John Livingston <https://www.john-livingston.fr/>
License: AGPL-3.0-only License: AGPL-3.0-only
Files: support/documentation/po/* Files: support/documentation/po/*
Copyright: 2024 John Livingston <https://www.john-livingston.fr/> Copyright: 2024-2025 John Livingston <https://www.john-livingston.fr/>
License: AGPL-3.0-only License: AGPL-3.0-only
Files: support/documentation/content/en/* Files: support/documentation/content/en/*
Copyright: 2024 John Livingston <https://www.john-livingston.fr/> Copyright: 2024-2025 John Livingston <https://www.john-livingston.fr/>
License: AGPL-3.0-only License: AGPL-3.0-only
Files: .github/ISSUE_TEMPLATE/* Files: .github/ISSUE_TEMPLATE/*
Copyright: 2024 John Livingston <https://www.john-livingston.fr/> Copyright: 2024-2025 John Livingston <https://www.john-livingston.fr/>
License: AGPL-3.0-only License: AGPL-3.0-only
Files: .github/PULL_REQUEST_TEMPLATE.md Files: .github/PULL_REQUEST_TEMPLATE.md
Copyright: 2024 John Livingston <https://www.john-livingston.fr/> Copyright: 2024-2025 John Livingston <https://www.john-livingston.fr/>
License: AGPL-3.0-only License: AGPL-3.0-only
Files: prosody-modules/mod_firewall/* Files: prosody-modules/mod_firewall/*

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,57 @@
# Changelog # Changelog
## 13.0.0
**Important note**: if you got an error on updating the plugin, please try to restart Peertube and install it again.
### Security Fix
Severity: low.
[Radically Open Security](radicallyopensecurity.com) reported a security vulnerability: a malicious user can forge a malicious Regular Expression to cause a [ReDOS](https://en.wikipedia.org/wiki/ReDoS) on the Chat Bot.
Such attack would only make the bot unresponsive, and won't affect the Peertube server or the XMPP server.
This version mitigates the attack by using the [RE2](https://github.com/google/re2) regular expression library.
Thanks [NlNet](https://nlnet.nl/) for funding the security audit.
### Breaking changes
#### Bot timers
There was a regression some months ago in the "bot timer" functionnality.
In the channels settings, the delay between two quotes is supposed to be in minutes, but in fact we applied seconds.
We don't have any way to detect if the user meant seconds or minutes when they configured their channels (it depends if it was before or after the regression).
So we encourage all streamers to go through their channel settings, check the frequency of their bot timers (if enabled), set them to the correct value, and save the form.
Users must save the form to be sure to apply the correct value.
#### Bot forbidden words
When using regular expressions for the forbidden words, the chat bot now uses the [RE2](https://github.com/google/re2) regular expression library.
This library does not support all character classes, and all regular expressions that were previously possible (with the Javascript RegExp class).
For more information about the accepted regular expression, please refer to the [documentation](https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/bot/forbidden_words/#consider-as-regular-expressions).
If you configured non-compatible regular expressions, the bot will just ignore them, and log an error.
When saving channel's preference, if non-compatible regular expression is used, an error will be shown.
### Minor changes and fixes
* Translations updates.
* Dependencies updates.
* Fix #329: auto focus message field after anonymous user has entered nickname (Thanks [Axolotle](https://github.com/axolotle).
* Fix #392: add draggable items touch screen handling (Thanks [Axolotle](https://github.com/axolotle).
* Fix #506: hide offline users by default in occupant list (Thanks [Axolotle](https://github.com/axolotle).
* Fix #547: add button to go to the end of the chat (Thanks [Axolotle](https://github.com/axolotle).
* Fix #503: set custom emojis max height to text height + bigger when posted alone (Thanks [Axolotle](https://github.com/axolotle).
* Fix: Converse bottom panel messages not visible on new Peertube v7 theme (for example for muted users).
* Fix #75: New short video urls makes it difficult to use the settings «Activate chat for these videos».
* Fix moderation notes: fix filter button wrongly displayed on notes without associated occupant.
* Fix tasks: checkbox state does not change when clicked.
* Fix: bot timer can't be negative or null.
* Fix #626: Bot timer was buggy, using seconds as delay instead of minutes.
* Fix: message deletions were not properly anonymized when using "Anonymize moderation actions" option.
## 12.0.4 ## 12.0.4
### Minor changes and fixes ### Minor changes and fixes

View File

@ -1,5 +1,5 @@
<!-- <!--
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only
--> -->

View File

@ -1,5 +1,5 @@
<!-- <!--
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only
--> -->

View File

@ -1,5 +1,5 @@
<!-- <!--
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only
--> -->

View File

@ -1,5 +1,5 @@
<!-- <!--
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only
--> -->

View File

@ -1,5 +1,5 @@
<!-- <!--
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only
--> -->

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */

View File

@ -1,6 +1,6 @@
#!/usr/bin/env node #!/usr/bin/env node
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com> # SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
@ -56,7 +56,6 @@ declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_ENABLE_BOT_LABEL: string
declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_BOT_OPTIONS_TITLE: string declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_BOT_OPTIONS_TITLE: string
declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_LABEL: string declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_LABEL: string
declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_DESC: string declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_DESC: string
declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_DESC2: string
declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_RETRACTATION_REASON_LABEL: string declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_RETRACTATION_REASON_LABEL: string
declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_RETRACTATION_REASON_DESC: string declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_RETRACTATION_REASON_DESC: string
declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_REGEXP_LABEL: string declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_REGEXP_LABEL: string

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
@ -16,8 +16,7 @@ export function tplChannelConfiguration (el: ChannelConfigurationElement): Templ
const tableHeaderList: Record<string, DynamicFormHeader> = { const tableHeaderList: Record<string, DynamicFormHeader> = {
forbiddenWords: { forbiddenWords: {
entries: { entries: {
colName: ptTr(LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_LABEL), colName: ptTr(LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_LABEL)
description: ptTr(LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_DESC2)
}, },
regexp: { regexp: {
colName: ptTr(LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_REGEXP_LABEL), colName: ptTr(LOC_LIVECHAT_CONFIGURATION_CHANNEL_FORBIDDEN_WORDS_REGEXP_LABEL),
@ -97,7 +96,8 @@ export function tplChannelConfiguration (el: ChannelConfigurationElement): Templ
}, },
delay: { delay: {
inputType: 'number', inputType: 'number',
default: 10 default: 10,
min: 1
} }
}, },
commands: { commands: {

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
@ -121,6 +121,15 @@ export class ChannelDetailsService {
} }
} }
for (const [i, q] of botConf.quotes.entries()) {
propertiesError[`bot.quotes.${i}.delay`] = []
if ((typeof q.delay !== 'number') || isNaN(q.delay)) {
propertiesError[`bot.quotes.${i}.delay`].push(ValidationErrorType.WrongFormat)
} else if (q.delay <= 0) {
propertiesError[`bot.quotes.${i}.delay`].push(ValidationErrorType.NotInRange)
}
}
for (const [i, cd] of botConf.commands.entries()) { for (const [i, cd] of botConf.commands.entries()) {
propertiesError[`bot.commands.${i}.command`] = [] propertiesError[`bot.commands.${i}.command`] = []
@ -142,6 +151,29 @@ export class ChannelDetailsService {
return true return true
} }
frontToBack = (channelConfigurationOptions: ChannelConfigurationOptions): ChannelConfigurationOptions => {
// // This is a dirty hack, because backend wants seconds for botConf.quotes.delay, and front wants minutes.
const c = JSON.parse(JSON.stringify(channelConfigurationOptions)) as ChannelConfigurationOptions // clone
c.bot?.quotes.forEach(q => {
if (typeof q.delay === 'number') {
q.delay = Math.round(q.delay * 60)
}
})
return c
}
backToFront = (channelConfiguration: any): ChannelConfiguration => {
// This is a dirty hack, because backend wants seconds for botConf.quotes.delay, and front wants minutes.
const c = JSON.parse(JSON.stringify(channelConfiguration)) as ChannelConfiguration // clone
c.configuration.bot?.quotes.forEach(q => {
if (typeof q.delay === 'number') {
q.delay = Math.round(q.delay / 60)
if (q.delay < 1) { q.delay = 1 }
}
})
return c
}
saveOptions = async (channelId: number, saveOptions = async (channelId: number,
channelConfigurationOptions: ChannelConfigurationOptions): Promise<Response> => { channelConfigurationOptions: ChannelConfigurationOptions): Promise<Response> => {
if (!await this.validateOptions(channelConfigurationOptions)) { if (!await this.validateOptions(channelConfigurationOptions)) {
@ -153,11 +185,21 @@ export class ChannelDetailsService {
{ {
method: 'POST', method: 'POST',
headers: this._headers, headers: this._headers,
body: JSON.stringify(channelConfigurationOptions) body: JSON.stringify(
this.frontToBack(channelConfigurationOptions)
)
} }
) )
if (!response.ok) { if (!response.ok) {
let e
try {
// checking if there are some json data in the response, with custom error message.
e = await response.json()
} catch (_err) {}
if (e?.validationErrorMessage && (typeof e.validationErrorMessage === 'string')) {
throw new Error('Failed to save configuration options: ' + e.validationErrorMessage)
}
throw new Error('Failed to save configuration options.') throw new Error('Failed to save configuration options.')
} }
@ -209,7 +251,7 @@ export class ChannelDetailsService {
throw new Error('Can\'t get channel configuration options.') throw new Error('Can\'t get channel configuration options.')
} }
return response.json() return this.backToFront(await response.json())
} }
public async fetchEmojisConfiguration (channelId: number): Promise<ChannelEmojisConfiguration> { public async fetchEmojisConfiguration (channelId: number): Promise<ChannelEmojisConfiguration> {

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
@ -753,6 +753,9 @@ export class DynamicTableFormElement extends LivechatElement {
.split(propertySchema.separator) .split(propertySchema.separator)
} }
break break
case Number:
rowById.row[propertyName] = Number(value)
break
default: default:
rowById.row[propertyName] = value rowById.row[propertyName] = value
break break

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,3 +1,4 @@
SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com>
SPDX-License-Identifier: AGPL-3.0-only SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable @typescript-eslint/no-unsafe-function-type */ /* eslint-disable @typescript-eslint/no-unsafe-function-type */

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,6 +1,6 @@
#!/usr/bin/env node #!/usr/bin/env node
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> // SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
// SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com> // SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com>
// //
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> # SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
# SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com> # SPDX-FileCopyrightText: 2025 Mehdi Benadel <https://mehdibenadel.com>
# #
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

Some files were not shown because too many files have changed in this diff Show More