Compare commits
2
Commits
v2.0.2
...
34483004d2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34483004d2 | ||
|
|
6e24885241 |
@@ -32,7 +32,7 @@
|
|||||||
WaveOutEvent and WaveFileReader both live in NAudio.WinMM + NAudio.Core. -->
|
WaveOutEvent and WaveFileReader both live in NAudio.WinMM + NAudio.Core. -->
|
||||||
<PackageReference Include="NAudio.WinMM" Version="2.3.0" />
|
<PackageReference Include="NAudio.WinMM" Version="2.3.0" />
|
||||||
<PackageReference Include="Pidgin" Version="[3.5.1, 4.0.0)" />
|
<PackageReference Include="Pidgin" Version="[3.5.1, 4.0.0)" />
|
||||||
<PackageReference Include="SixLabors.ImageSharp" Version="[3.1.12, 4.0.0)" />
|
<PackageReference Include="SixLabors.ImageSharp" Version="[3.1.12,4.1.0]" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -119,7 +119,7 @@
|
|||||||
},
|
},
|
||||||
"SixLabors.ImageSharp": {
|
"SixLabors.ImageSharp": {
|
||||||
"type": "Direct",
|
"type": "Direct",
|
||||||
"requested": "[3.1.12, 4.0.0)",
|
"requested": "[3.1.12, 4.1.0]",
|
||||||
"resolved": "3.1.12",
|
"resolved": "3.1.12",
|
||||||
"contentHash": "iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A=="
|
"contentHash": "iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A=="
|
||||||
},
|
},
|
||||||
|
|||||||
+25
-38
@@ -20,8 +20,8 @@ Last reviewed: 2026-08-18 (HellionChat v1.12.0).
|
|||||||
`pluginConfigs/HellionChat/` directory.
|
`pluginConfigs/HellionChat/` directory.
|
||||||
- The plugin does not phone home. No telemetry, no analytics, no crash reporter, no usage counter,
|
- The plugin does not phone home. No telemetry, no analytics, no crash reporter, no usage counter,
|
||||||
no remote update check beyond what Dalamud itself does.
|
no remote update check beyond what Dalamud itself does.
|
||||||
- One outbound network call exists by design: the BetterTTV emote service (for chat emotes). It is
|
- As of v2.0.2 the plugin makes **no outbound network requests at all**. The one that existed, the
|
||||||
documented in detail below and can be reasoned about per request.
|
BetterTTV emote service, was removed along with the feature it served.
|
||||||
- You can export every message the plugin has stored, in Markdown, JSON or CSV. You can delete it by
|
- You can export every message the plugin has stored, in Markdown, JSON or CSV. You can delete it by
|
||||||
channel, by age, or all of it at once.
|
channel, by age, or all of it at once.
|
||||||
|
|
||||||
@@ -42,8 +42,9 @@ HellionChat keeps three kinds of state on your machine, all under
|
|||||||
ExtraChat. Public chat, NPC dialogue, system messages and battle logs are dropped on the storage
|
ExtraChat. Public chat, NPC dialogue, system messages and battle logs are dropped on the storage
|
||||||
layer and never written to disk.
|
layer and never written to disk.
|
||||||
|
|
||||||
3. **Cached emote images** (`EmoteCacheV1/` directory). Image files downloaded from BetterTTV when
|
Earlier versions kept a third item here, an `EmoteCacheV1/` directory of images downloaded from
|
||||||
an emote appears in a message you receive. See "Outbound network calls" below.
|
BetterTTV. Nothing writes to it as of v2.0.2. If you used a version before that, the directory is
|
||||||
|
still on disk and can be deleted by hand; the plugin no longer reads or creates it.
|
||||||
|
|
||||||
There is no shared state with the upstream Chat 2 plugin. `pluginConfigs/HellionChat/` is
|
There is no shared state with the upstream Chat 2 plugin. `pluginConfigs/HellionChat/` is
|
||||||
independent from `pluginConfigs/ChatTwo/`.
|
independent from `pluginConfigs/ChatTwo/`.
|
||||||
@@ -73,35 +74,23 @@ turn the retention sweep on in the settings. Until then, stored messages stay un
|
|||||||
|
|
||||||
## Outbound network calls
|
## Outbound network calls
|
||||||
|
|
||||||
HellionChat makes one kind of automatic outbound network request, inherited from upstream Chat 2 and
|
**None.** As of v2.0.2 the plugin makes no automatic outbound network requests of any kind. Both
|
||||||
documented here because "GDPR-by-design" means you should know what your client does on your behalf.
|
calls this section used to describe are gone, and the section is kept so the claim can be checked
|
||||||
The second one this section used to list, the Lodestone font download, was removed in v1.0.4 and the
|
against what it replaced rather than simply asserted.
|
||||||
font is bundled instead.
|
|
||||||
|
|
||||||
### 1. BetterTTV emote service (`api.betterttv.net`, `cdn.betterttv.net`)
|
### 1. BetterTTV emote service (removed in v2.0.2)
|
||||||
|
|
||||||
- **What it does:** When a chat message arrives that references a BetterTTV emote, the plugin asks
|
Until v2.0.2 the plugin fetched an emote list from `api.betterttv.net` once per session at startup,
|
||||||
the BetterTTV API for the emote metadata and downloads the image from the BetterTTV CDN to display
|
and individual images from `cdn.betterttv.net` on demand, caching them in `EmoteCacheV1/`. The
|
||||||
it inline.
|
startup fetch meant BetterTTV's edge saw your IP as soon as the plugin loaded, whether or not an
|
||||||
- **What is sent:** A standard HTTPS GET request. Your IP address reaches BetterTTV (unavoidable for
|
emote ever appeared in your chat. A setting could switch it off, but it was on by default.
|
||||||
any HTTPS request); the request itself contains no identifying user data, no character name, no
|
|
||||||
message text. Only the emote ID being looked up is in the URL path.
|
|
||||||
- **When it triggers:**
|
|
||||||
- The emote _list_ (global emotes plus the top-1500 community emotes over fifteen API pages) is
|
|
||||||
fetched from `api.betterttv.net` once per session at plugin startup, provided the **Show
|
|
||||||
emotes** option is on. This first list-fetch happens before any chat message has arrived.
|
|
||||||
BetterTTV's edge therefore sees your IP as soon as the plugin loads, not only after an emote is
|
|
||||||
mentioned.
|
|
||||||
- The individual emote _images_ on `cdn.betterttv.net` are fetched on demand, only when an
|
|
||||||
incoming chat message contains a token matching one of the cached IDs. These are cached locally
|
|
||||||
(`EmoteCacheV1/`) and reused across sessions.
|
|
||||||
- **Cached:** Yes, in `EmoteCacheV1/`. A given emote is downloaded once per machine and reused.
|
|
||||||
- **How to opt out:** Turn off the **Show emotes** option in Settings → Chat → Display modes. With
|
|
||||||
it disabled, the emote cache does not load and no requests to BetterTTV are made for the rest of
|
|
||||||
the session.
|
|
||||||
- **BetterTTV's privacy policy:** <https://betterttv.com/privacy>
|
|
||||||
|
|
||||||
Source: `HellionChat/EmoteCache.cs`.
|
The feature was removed rather than defaulted off: BetterTTV moved its shared-emote endpoint behind
|
||||||
|
authentication, which left 54 mostly static images from a set of 65, and that is not worth a
|
||||||
|
connection nobody asked for. The download path, the cache directory and the renderer are gone from
|
||||||
|
the source.
|
||||||
|
|
||||||
|
Messages already stored with emotes in them remain readable and show the code that was typed.
|
||||||
|
|
||||||
### 2. Square Enix Lodestone font (removed in v1.0.4)
|
### 2. Square Enix Lodestone font (removed in v1.0.4)
|
||||||
|
|
||||||
@@ -204,13 +193,12 @@ messages. Existing data needs the retroactive cleanup to apply retroactively, by
|
|||||||
|
|
||||||
| Party | Why they appear | What reaches them | Their privacy policy |
|
| Party | Why they appear | What reaches them | Their privacy policy |
|
||||||
| ---------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------- |
|
| ---------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------- |
|
||||||
| BetterTTV (NightDev LLC) | Optional emote rendering | HTTPS request for an emote ID; your IP | <https://betterttv.com/privacy> |
|
|
||||||
| Hellion Forge (Gitea, self-hosted by Hellion Online Media) | Plugin distribution via custom repo, issue tracker | Whatever the Gitea instance sees from any HTTPS request to a public repo | <https://hellion-media.de/datenschutz> |
|
| Hellion Forge (Gitea, self-hosted by Hellion Online Media) | Plugin distribution via custom repo, issue tracker | Whatever the Gitea instance sees from any HTTPS request to a public repo | <https://hellion-media.de/datenschutz> |
|
||||||
| Dalamud / XIVLauncher (goatcorp) | Plugin loader, font subsystem, repo polling | Whatever Dalamud reports for itself; out of HellionChat's scope | <https://github.com/goatcorp/Dalamud> |
|
| Dalamud / XIVLauncher (goatcorp) | Plugin loader, font subsystem, repo polling | Whatever Dalamud reports for itself; out of HellionChat's scope | <https://github.com/goatcorp/Dalamud> |
|
||||||
|
|
||||||
The Hellion Forge Gitea instance and the Dalamud/XIVLauncher loader are unavoidable for anyone using
|
Both are unavoidable for anyone using HellionChat through Dalamud at all. Since v2.0.2 the plugin
|
||||||
HellionChat through Dalamud at all. BetterTTV is the only third party HellionChat introduces on top
|
introduces no third party on top of that baseline: BetterTTV was the only one, and it left with the
|
||||||
of that baseline, and it is opt-out via settings.
|
emote feature.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -223,11 +211,10 @@ plugin pulls in:
|
|||||||
- `Microsoft.Data.Sqlite`: local SQLite access, no network.
|
- `Microsoft.Data.Sqlite`: local SQLite access, no network.
|
||||||
- `morelinq`: LINQ helpers, no network.
|
- `morelinq`: LINQ helpers, no network.
|
||||||
- `Pidgin`: parser combinators, no network.
|
- `Pidgin`: parser combinators, no network.
|
||||||
- `SixLabors.ImageSharp`: image decoding (used for the BetterTTV emote pipeline), no network on its
|
- `SixLabors.ImageSharp`: image decoding (icon handling), no network on its own.
|
||||||
own.
|
|
||||||
|
|
||||||
The single network call listed under "Outbound network calls" is written directly in HellionChat's
|
No dependency opens a connection on the plugin's behalf, and since v2.0.2 the plugin opens none
|
||||||
own source, not delegated to a dependency.
|
itself either.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -84,9 +84,9 @@ Hellion Chat is developed under **Hellion Forge**, the specialized modding and p
|
|||||||
- **Export** to Markdown, JSON, or CSV via the Dalamud file dialog (GDPR Art. 15 right of access).
|
- **Export** to Markdown, JSON, or CSV via the Dalamud file dialog (GDPR Art. 15 right of access).
|
||||||
Narrow it by channel group, by age in days, or by a substring of the sender's name.
|
Narrow it by channel group, by age in days, or by a substring of the sender's name.
|
||||||
- **Full privacy overview** in [`PRIVACY.md`](PRIVACY.md) and third-party components in
|
- **Full privacy overview** in [`PRIVACY.md`](PRIVACY.md) and third-party components in
|
||||||
[`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, the single outbound
|
[`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, an explicit
|
||||||
call that exists and how to switch it off (BetterTTV), an explicit no-telemetry statement,
|
no-telemetry statement, and the mapping of GDPR rights (Art. 15/17/18/20/21) to concrete plugin
|
||||||
and the mapping of GDPR rights (Art. 15/17/18/20/21) to concrete plugin functions.
|
functions. As of v2.0.2 the plugin makes no outbound network requests at all.
|
||||||
|
|
||||||
### Onboarding
|
### Onboarding
|
||||||
|
|
||||||
@@ -143,7 +143,6 @@ Deuteranopia/Protanopia-safe (red-green color blindness) based on the Wong/Okabe
|
|||||||
|
|
||||||
### Stability
|
### Stability
|
||||||
|
|
||||||
- BetterTTV cache crash fix (null key handling).
|
|
||||||
- Font atlas build fallback for missing system fonts.
|
- Font atlas build fallback for missing system fonts.
|
||||||
- Defensive wrapping of all migration operations.
|
- Defensive wrapping of all migration operations.
|
||||||
|
|
||||||
@@ -272,9 +271,6 @@ Linux / XIVLauncher Core:
|
|||||||
```bash
|
```bash
|
||||||
mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \
|
mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \
|
||||||
~/.xlcore/pluginConfigs/HellionChat/chat-sqlite.db
|
~/.xlcore/pluginConfigs/HellionChat/chat-sqlite.db
|
||||||
[ -d ~/.xlcore/pluginConfigs/ChatTwo/EmoteCacheV1 ] && \
|
|
||||||
mv ~/.xlcore/pluginConfigs/ChatTwo/EmoteCacheV1 \
|
|
||||||
~/.xlcore/pluginConfigs/HellionChat/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Windows / XIVLauncher:
|
Windows / XIVLauncher:
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ I respond on weekdays during European business hours.
|
|||||||
influence)
|
influence)
|
||||||
- The privacy filter in `MessageStore.cs` and the export pipeline
|
- The privacy filter in `MessageStore.cs` and the export pipeline
|
||||||
- The configuration migration logic
|
- The configuration migration logic
|
||||||
- The `EmoteCache` HTTP client and path handling
|
|
||||||
- The Auto-Tell-Tabs spawn logic and history preload
|
- The Auto-Tell-Tabs spawn logic and history preload
|
||||||
|
|
||||||
### Out of scope
|
### Out of scope
|
||||||
|
|||||||
@@ -12,6 +12,18 @@ be a poor fit for the plugin's privacy-first scope during brainstorming.
|
|||||||
|
|
||||||
## Released
|
## Released
|
||||||
|
|
||||||
|
**v2.0.2 — Emotes out, placeholders fixed (2026-08-19)** removed BetterTTV emote
|
||||||
|
support entirely. Its shared-emote endpoint went behind authentication and that was
|
||||||
|
where nearly all of them came from; what remained was 54 mostly static images, one
|
||||||
|
of them animated at 492 frames. With it went the plugin's only outbound network
|
||||||
|
call. Also fixed five settings descriptions that printed `{0}` instead of the
|
||||||
|
plugin name, and replaced the preview images, which were older than every cycle in
|
||||||
|
2.0.0.
|
||||||
|
|
||||||
|
**v2.0.1 — Hotfix (2026-08-19)** lifted MessagePack to 3.1.7 and repaired the
|
||||||
|
release workflow, which built the 2.0.0 archive successfully and then failed to
|
||||||
|
attach it.
|
||||||
|
|
||||||
**v2.0.0 — Rebuilt, Repaired, Reset (2026-08-19)** ships everything that was
|
**v2.0.0 — Rebuilt, Repaired, Reset (2026-08-19)** ships everything that was
|
||||||
developed as v1.6.0 through v1.15.0. Those versions were never published on their
|
developed as v1.6.0 through v1.15.0. Those versions were never published on their
|
||||||
own: the whole window layer was being rewritten from ImGui defaults to custom
|
own: the whole window layer was being rewritten from ImGui defaults to custom
|
||||||
@@ -66,6 +78,25 @@ follows.
|
|||||||
Native-speaker review of the AI-assisted v1.5.3 translations (13 legacy Crowdin locales) runs in
|
Native-speaker review of the AI-assisted v1.5.3 translations (13 legacy Crowdin locales) runs in
|
||||||
parallel as a continuous correction pass, gathered via the Hellion Forge Discord.
|
parallel as a continuous correction pass, gathered via the Hellion Forge Discord.
|
||||||
|
|
||||||
|
### Carried over from the 2.0.x cycle
|
||||||
|
|
||||||
|
Small items that surfaced during the 2.0.0 release and were deliberately left for
|
||||||
|
a later pass rather than rushed into a patch:
|
||||||
|
|
||||||
|
- **Comment length.** 47 comment blocks run to 12 lines or more, the longest at 41.
|
||||||
|
The task codes and personal names came out in 2.0.0; trimming the long ones needs
|
||||||
|
judgement rather than a pattern, since several carry reasoning that is now the
|
||||||
|
basis of the style reference.
|
||||||
|
- **Channel names are only translated in 10 of 25 languages.** Spanish had two of
|
||||||
|
three translated and one left in English, which was corrected. The other 15 sit
|
||||||
|
fully in English, which is correct for anyone on an English client — FFXIV ships
|
||||||
|
four client languages — but inconsistent where a language does have its own.
|
||||||
|
- **An orphaned `EmoteCacheV1/` directory** stays on disk for anyone who ran a
|
||||||
|
version before 2.0.2. Nothing reads or writes it. A one-time cleanup on load
|
||||||
|
would be tidier than asking people to delete it by hand.
|
||||||
|
- **`Metrics.Scale` uses the deprecated `ImGuiHelpers.GlobalScaleSafe`**, which is
|
||||||
|
the only compiler warning left in the build.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.5.6 — Settings Overhaul + Filter & Notification Polish (released 2026-05-23)
|
## v1.5.6 — Settings Overhaul + Filter & Notification Polish (released 2026-05-23)
|
||||||
|
|||||||
@@ -55,13 +55,12 @@ history, including the close of active cherry-picking in the v1.4.x cycle.
|
|||||||
## Components that touch the network
|
## Components that touch the network
|
||||||
|
|
||||||
Of everything listed above, **none** of the bundled or NuGet components opens network connections on
|
Of everything listed above, **none** of the bundled or NuGet components opens network connections on
|
||||||
their own. All outbound traffic is initiated explicitly by HellionChat's own source files and is
|
their own, and as of v2.0.2 neither does HellionChat itself. Both calls this list used to name are
|
||||||
documented in `PRIVACY.md` under "Outbound network calls":
|
gone:
|
||||||
|
|
||||||
- `HellionChat/EmoteCache.cs` → BetterTTV API + CDN (opt-out via setting)
|
- `HellionChat/EmoteCache.cs` → BetterTTV API + CDN, removed in v2.0.2 along with the emote feature.
|
||||||
|
- The Square Enix Lodestone font download (`FontManager.cs`), removed in v1.0.4 — a leftover from
|
||||||
The earlier Square Enix Lodestone font download (`FontManager.cs`) was removed in v1.0.4 — it was a
|
upstream's removed webinterface feature that was no longer consumed.
|
||||||
leftover from upstream's removed webinterface feature and was no longer consumed.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user