Compare commits
2
Commits
v2.0.2
...
7deb3802ce
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7deb3802ce | ||
|
|
6e24885241 |
@@ -14,7 +14,7 @@
|
||||
<ItemGroup>
|
||||
<!-- Closed ranges prevent surprise major bumps during lock file regeneration -->
|
||||
<PackageReference Include="MessagePack" Version="[3.1.7, 4.0.0)" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.8" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.11" />
|
||||
<!-- v1.5.0 DI-container foundation; matches Lightless pin (Hosting 10.0.7) -->
|
||||
<PackageReference
|
||||
Include="Microsoft.Extensions.DependencyInjection"
|
||||
|
||||
@@ -27,13 +27,13 @@
|
||||
},
|
||||
"Microsoft.Data.Sqlite": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.8, )",
|
||||
"resolved": "10.0.8",
|
||||
"contentHash": "iyDWyD6r/SnqgoYYQIlLhxL1ZIGZr+SByMXrJKSA1w7sOt7bPMJmN3h2laqwKqyQkjh/lUPJ7LTXwpvqzhggOQ==",
|
||||
"requested": "[10.0.11, )",
|
||||
"resolved": "10.0.11",
|
||||
"contentHash": "7je7UELzm131GiLYc4PpZvfKXIgIyzPM+v+tjcd/nbnuWRfgcONYKzDTqJlURxwVCFsVnlpmq6y6yn4qvR8QXQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Data.Sqlite.Core": "10.0.8",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
|
||||
"SQLitePCLRaw.core": "2.1.11"
|
||||
"Microsoft.Data.Sqlite.Core": "10.0.11",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.12",
|
||||
"SQLitePCLRaw.core": "2.1.12"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -141,10 +141,10 @@
|
||||
},
|
||||
"Microsoft.Data.Sqlite.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.8",
|
||||
"contentHash": "26t7WDiEjjAls/sFpWvVEFDxt+7Q5VPt6+blU2Lafuj9L8PzAv/GtGV4cqVPtrhWbfD2BX/z2v8hD1qXYtK6Aw==",
|
||||
"resolved": "10.0.11",
|
||||
"contentHash": "hubA20AGenQ4Sx0ElWaPpB8DISjXpdx463+1zOGRslsT0e/t/06ITv+pHsop8CcJ0d8PZLfgnT7juCDVD79Dkw==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.11"
|
||||
"SQLitePCLRaw.core": "2.1.12"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration": {
|
||||
@@ -382,24 +382,24 @@
|
||||
},
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.11",
|
||||
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
|
||||
"resolved": "2.1.12",
|
||||
"contentHash": "mAgscpQMLw5/nfA1Q5oJVAT29yROUo1ifZGbbTpx/lwZpSxMUGoYbKfmvdm8oXER+RzxqBmmQzeBEVKfeHv2nw==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.12",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.12"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.11",
|
||||
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
|
||||
"resolved": "2.1.12",
|
||||
"contentHash": "ETpNw9DY3ckWLgRRAeCHj+GKOuPi61aeczkXhgHexUvqoZBAYg8RYESE2J7O1M7+o6QbdSEZwrw9bfqztUVWXg=="
|
||||
},
|
||||
"SQLitePCLRaw.provider.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.11",
|
||||
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
|
||||
"resolved": "2.1.12",
|
||||
"contentHash": "W3oH4XIfCzFrgUSDKHhN6N+dgzA5YHOR2VxX8GB6Qy7CyrJJgxPEG8NirgYWlPQC5P2jz2knSsexWu4tDUL33g==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.11"
|
||||
"SQLitePCLRaw.core": "2.1.12"
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.EventLog": {
|
||||
|
||||
+25
-38
@@ -20,8 +20,8 @@ Last reviewed: 2026-08-18 (HellionChat v1.12.0).
|
||||
`pluginConfigs/HellionChat/` directory.
|
||||
- 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.
|
||||
- One outbound network call exists by design: the BetterTTV emote service (for chat emotes). It is
|
||||
documented in detail below and can be reasoned about per request.
|
||||
- As of v2.0.2 the plugin makes **no outbound network requests at all**. The one that existed, the
|
||||
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
|
||||
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
|
||||
layer and never written to disk.
|
||||
|
||||
3. **Cached emote images** (`EmoteCacheV1/` directory). Image files downloaded from BetterTTV when
|
||||
an emote appears in a message you receive. See "Outbound network calls" below.
|
||||
Earlier versions kept a third item here, an `EmoteCacheV1/` directory of images downloaded from
|
||||
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
|
||||
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
|
||||
|
||||
HellionChat makes one kind of automatic outbound network request, inherited from upstream Chat 2 and
|
||||
documented here because "GDPR-by-design" means you should know what your client does on your behalf.
|
||||
The second one this section used to list, the Lodestone font download, was removed in v1.0.4 and the
|
||||
font is bundled instead.
|
||||
**None.** As of v2.0.2 the plugin makes no automatic outbound network requests of any kind. Both
|
||||
calls this section used to describe are gone, and the section is kept so the claim can be checked
|
||||
against what it replaced rather than simply asserted.
|
||||
|
||||
### 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
|
||||
the BetterTTV API for the emote metadata and downloads the image from the BetterTTV CDN to display
|
||||
it inline.
|
||||
- **What is sent:** A standard HTTPS GET request. Your IP address reaches BetterTTV (unavoidable for
|
||||
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>
|
||||
Until v2.0.2 the plugin fetched an emote list from `api.betterttv.net` once per session at startup,
|
||||
and individual images from `cdn.betterttv.net` on demand, caching them in `EmoteCacheV1/`. The
|
||||
startup fetch meant BetterTTV's edge saw your IP as soon as the plugin loaded, whether or not an
|
||||
emote ever appeared in your chat. A setting could switch it off, but it was on by default.
|
||||
|
||||
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)
|
||||
|
||||
@@ -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 |
|
||||
| ---------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------- |
|
||||
| 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> |
|
||||
| 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
|
||||
HellionChat through Dalamud at all. BetterTTV is the only third party HellionChat introduces on top
|
||||
of that baseline, and it is opt-out via settings.
|
||||
Both are unavoidable for anyone using HellionChat through Dalamud at all. Since v2.0.2 the plugin
|
||||
introduces no third party on top of that baseline: BetterTTV was the only one, and it left with the
|
||||
emote feature.
|
||||
|
||||
---
|
||||
|
||||
@@ -223,11 +211,10 @@ plugin pulls in:
|
||||
- `Microsoft.Data.Sqlite`: local SQLite access, no network.
|
||||
- `morelinq`: LINQ helpers, no network.
|
||||
- `Pidgin`: parser combinators, no network.
|
||||
- `SixLabors.ImageSharp`: image decoding (used for the BetterTTV emote pipeline), no network on its
|
||||
own.
|
||||
- `SixLabors.ImageSharp`: image decoding (icon handling), no network on its own.
|
||||
|
||||
The single network call listed under "Outbound network calls" is written directly in HellionChat's
|
||||
own source, not delegated to a dependency.
|
||||
No dependency opens a connection on the plugin's behalf, and since v2.0.2 the plugin opens none
|
||||
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).
|
||||
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
|
||||
[`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, the single outbound
|
||||
call that exists and how to switch it off (BetterTTV), an explicit no-telemetry statement,
|
||||
and the mapping of GDPR rights (Art. 15/17/18/20/21) to concrete plugin functions.
|
||||
[`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, an explicit
|
||||
no-telemetry statement, and the mapping of GDPR rights (Art. 15/17/18/20/21) to concrete plugin
|
||||
functions. As of v2.0.2 the plugin makes no outbound network requests at all.
|
||||
|
||||
### Onboarding
|
||||
|
||||
@@ -143,7 +143,6 @@ Deuteranopia/Protanopia-safe (red-green color blindness) based on the Wong/Okabe
|
||||
|
||||
### Stability
|
||||
|
||||
- BetterTTV cache crash fix (null key handling).
|
||||
- Font atlas build fallback for missing system fonts.
|
||||
- Defensive wrapping of all migration operations.
|
||||
|
||||
@@ -272,9 +271,6 @@ Linux / XIVLauncher Core:
|
||||
```bash
|
||||
mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \
|
||||
~/.xlcore/pluginConfigs/HellionChat/chat-sqlite.db
|
||||
[ -d ~/.xlcore/pluginConfigs/ChatTwo/EmoteCacheV1 ] && \
|
||||
mv ~/.xlcore/pluginConfigs/ChatTwo/EmoteCacheV1 \
|
||||
~/.xlcore/pluginConfigs/HellionChat/
|
||||
```
|
||||
|
||||
Windows / XIVLauncher:
|
||||
|
||||
@@ -24,7 +24,6 @@ I respond on weekdays during European business hours.
|
||||
influence)
|
||||
- The privacy filter in `MessageStore.cs` and the export pipeline
|
||||
- The configuration migration logic
|
||||
- The `EmoteCache` HTTP client and path handling
|
||||
- The Auto-Tell-Tabs spawn logic and history preload
|
||||
|
||||
### Out of scope
|
||||
|
||||
@@ -12,6 +12,18 @@ be a poor fit for the plugin's privacy-first scope during brainstorming.
|
||||
|
||||
## 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
|
||||
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
|
||||
@@ -66,6 +78,25 @@ follows.
|
||||
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.
|
||||
|
||||
### 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)
|
||||
|
||||
@@ -55,13 +55,12 @@ history, including the close of active cherry-picking in the v1.4.x cycle.
|
||||
## Components that touch the network
|
||||
|
||||
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
|
||||
documented in `PRIVACY.md` under "Outbound network calls":
|
||||
their own, and as of v2.0.2 neither does HellionChat itself. Both calls this list used to name are
|
||||
gone:
|
||||
|
||||
- `HellionChat/EmoteCache.cs` → BetterTTV API + CDN (opt-out via setting)
|
||||
|
||||
The earlier Square Enix Lodestone font download (`FontManager.cs`) was removed in v1.0.4 — it was a
|
||||
leftover from upstream's removed webinterface feature and was no longer consumed.
|
||||
- `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
|
||||
upstream's removed webinterface feature that was no longer consumed.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"csharpier": {
|
||||
"version": "1.2.6",
|
||||
"version": "1.3.0",
|
||||
"commands": ["csharpier"],
|
||||
"rollForward": false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user