chore(linting): refresh configs and sweep auto-fix
Pull in the refreshed linter and tooling configs (editorconfig, gitignore, gitattributes, prettierignore, prettierrc, markdownlint, yamllint, env.example, dotnet-tools) and run prettier and markdownlint in --fix / --write mode across the repo so the existing tree matches the new rules. - prettier 2-space indent on yaml/yml and json overrides, asterisk strong, underscore emphasis, proseWrap always - markdownlint MD007 indent aligned to 2 and MD049 to underscore so prettier output stays passing - preflight Block F also ignores CLAUDE.md (gitignored personal file) - prettierignore extended to keep HellionChat.yaml manifest and the NuGet packages.lock.json out of the formatter No semantic content changed; csharpier, build, full build-suite (729/729) and the new prettier/markdownlint/yamllint checks all green.
This commit is contained in:
+47
-38
@@ -1,28 +1,31 @@
|
||||
# Hellion Chat IPC Integration Guide
|
||||
|
||||
This document describes the inter-plugin-communication (IPC) channels that Hellion Chat exposes to other Dalamud
|
||||
plugins. Two integration surfaces are covered: the **Context Menu IPC** for adding custom items to Hellion Chat's
|
||||
right-click menus, and the **Typing State IPC** for reacting to the user's input-box activity.
|
||||
This document describes the inter-plugin-communication (IPC) channels that Hellion Chat exposes to
|
||||
other Dalamud plugins. Two integration surfaces are covered: the **Context Menu IPC** for adding
|
||||
custom items to Hellion Chat's right-click menus, and the **Typing State IPC** for reacting to the
|
||||
user's input-box activity.
|
||||
|
||||
---
|
||||
|
||||
## Compatibility with Chat 2
|
||||
|
||||
Hellion Chat is a standalone fork of [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2). The IPC surface is one
|
||||
of the parts the fork inherits directly: the same call shapes, the same tuple payloads, the same call semantics, the
|
||||
same lifecycle. We did not redesign the API, we re-published it under our own plugin name.
|
||||
Hellion Chat is a standalone fork of [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2).
|
||||
The IPC surface is one of the parts the fork inherits directly: the same call shapes, the same tuple
|
||||
payloads, the same call semantics, the same lifecycle. We did not redesign the API, we re-published
|
||||
it under our own plugin name.
|
||||
|
||||
Concretely, this means:
|
||||
|
||||
- **Tuple shapes are identical.** A subscriber that worked against Chat 2's `ChatTwo.Invoke` works against Hellion
|
||||
Chat's `HellionChat.Invoke` without any code change beyond the channel string.
|
||||
- **Lifecycle is identical.** The `Available` ping fires when the plugin becomes ready, your subscriber re-registers,
|
||||
and the registration ID is returned by the same `Register` call as before.
|
||||
- **Channel-name prefix changed in v1.0.0.** Every `ChatTwo.*` channel name is now `HellionChat.*`. Existing third-party
|
||||
integrations need a one-line rename per channel string and nothing else.
|
||||
- **Tuple shapes are identical.** A subscriber that worked against Chat 2's `ChatTwo.Invoke` works
|
||||
against Hellion Chat's `HellionChat.Invoke` without any code change beyond the channel string.
|
||||
- **Lifecycle is identical.** The `Available` ping fires when the plugin becomes ready, your
|
||||
subscriber re-registers, and the registration ID is returned by the same `Register` call as
|
||||
before.
|
||||
- **Channel-name prefix changed in v1.0.0.** Every `ChatTwo.*` channel name is now `HellionChat.*`.
|
||||
Existing third-party integrations need a one-line rename per channel string and nothing else.
|
||||
|
||||
If your plugin already supports Chat 2 and you want to add Hellion Chat support, the cleanest path is to bind both
|
||||
prefixes and treat whichever one becomes available first as the active host.
|
||||
If your plugin already supports Chat 2 and you want to add Hellion Chat support, the cleanest path
|
||||
is to bind both prefixes and treat whichever one becomes available first as the active host.
|
||||
|
||||
---
|
||||
|
||||
@@ -41,18 +44,20 @@ prefixes and treat whichever one becomes available first as the active host.
|
||||
|
||||
## Context Menu IPC
|
||||
|
||||
Use this surface to draw your own selectables inside Hellion Chat's right-click context menus. All registrations are
|
||||
called inside an ImGui `BeginMenu`, so anything you draw appears as a regular menu entry.
|
||||
Use this surface to draw your own selectables inside Hellion Chat's right-click context menus. All
|
||||
registrations are called inside an ImGui `BeginMenu`, so anything you draw appears as a regular menu
|
||||
entry.
|
||||
|
||||
### Lifecycle
|
||||
|
||||
1. Subscribe to `HellionChat.Available`. The host fires this once when it loads or reloads, so your plugin can
|
||||
re-register without polling.
|
||||
2. Call `HellionChat.Register` to obtain a registration ID. Save it. You need it to filter `Invoke` callbacks that
|
||||
target your registration and to call `Unregister` later.
|
||||
3. Subscribe to `HellionChat.Invoke` and draw your menu items inside the handler when the `id` matches your saved
|
||||
registration ID.
|
||||
4. On plugin disable or unload, call `HellionChat.Unregister` with your saved ID and unsubscribe from `Invoke`.
|
||||
1. Subscribe to `HellionChat.Available`. The host fires this once when it loads or reloads, so your
|
||||
plugin can re-register without polling.
|
||||
2. Call `HellionChat.Register` to obtain a registration ID. Save it. You need it to filter `Invoke`
|
||||
callbacks that target your registration and to call `Unregister` later.
|
||||
3. Subscribe to `HellionChat.Invoke` and draw your menu items inside the handler when the `id`
|
||||
matches your saved registration ID.
|
||||
4. On plugin disable or unload, call `HellionChat.Unregister` with your saved ID and unsubscribe
|
||||
from `Invoke`.
|
||||
|
||||
### Example
|
||||
|
||||
@@ -137,12 +142,14 @@ If your plugin already integrates with `ChatTwo.*`, the rename is the only requi
|
||||
|
||||
## Typing State IPC
|
||||
|
||||
Use this surface when you need to know whether the player is currently interacting with Hellion Chat's input box. Useful
|
||||
for typing indicators, keyboard-shortcut suppression, or HUD elements that hide while the user is typing.
|
||||
Use this surface when you need to know whether the player is currently interacting with Hellion
|
||||
Chat's input box. Useful for typing indicators, keyboard-shortcut suppression, or HUD elements that
|
||||
hide while the user is typing.
|
||||
|
||||
### Tuple Payload
|
||||
|
||||
Both `HellionChat.GetChatInputState` (poll) and `HellionChat.ChatInputStateChanged` (event) return the same tuple:
|
||||
Both `HellionChat.GetChatInputState` (poll) and `HellionChat.ChatInputStateChanged` (event) return
|
||||
the same tuple:
|
||||
|
||||
```cs
|
||||
(bool InputVisible, bool InputFocused, bool HasText, bool IsTyping, int TextLength, ChatType ChannelType)
|
||||
@@ -159,17 +166,19 @@ Both `HellionChat.GetChatInputState` (poll) and `HellionChat.ChatInputStateChang
|
||||
|
||||
### Where `ChannelType` comes from
|
||||
|
||||
`ChannelType` is the `HellionChat.Code.ChatType` enum value representing the target channel for the current submission.
|
||||
It is sourced from the active tab's `UsedChannel` (`HellionChat/Configuration.cs`), which the plugin keeps in sync by
|
||||
hooking the in-game shell (`HellionChat/GameFunctions/Chat.cs`) and by resolving temporary overrides inside the chat UI
|
||||
(`HellionChat/Ui/ChatLogWindow.cs:597`). `InputChannel` values are converted into the exported `ChatType` via
|
||||
`HellionChat/Code/InputChannelExt.ToChatType`.
|
||||
`ChannelType` is the `HellionChat.Code.ChatType` enum value representing the target channel for the
|
||||
current submission. It is sourced from the active tab's `UsedChannel`
|
||||
(`HellionChat/Configuration.cs`), which the plugin keeps in sync by hooking the in-game shell
|
||||
(`HellionChat/GameFunctions/Chat.cs`) and by resolving temporary overrides inside the chat UI
|
||||
(`HellionChat/Ui/ChatLogWindow.cs:597`). `InputChannel` values are converted into the exported
|
||||
`ChatType` via `HellionChat/Code/InputChannelExt.ToChatType`.
|
||||
|
||||
### Behavior
|
||||
|
||||
- `ChatInputStateChanged` fires once immediately after subscribe so you do not need a separate `GetChatInputState` poll
|
||||
for the initial snapshot.
|
||||
- After that it fires only when one or more fields actually change, so it is safe to subscribe without rate-limiting.
|
||||
- `ChatInputStateChanged` fires once immediately after subscribe so you do not need a separate
|
||||
`GetChatInputState` poll for the initial snapshot.
|
||||
- After that it fires only when one or more fields actually change, so it is safe to subscribe
|
||||
without rate-limiting.
|
||||
- `GetChatInputState` is available for one-shot polls, e.g. on plugin enable.
|
||||
|
||||
### Example 2
|
||||
@@ -223,7 +232,7 @@ Same shape as the Context Menu surface — only the channel-name prefix needs th
|
||||
|
||||
## License & Attribution
|
||||
|
||||
This guide and the IPC surface it documents derive directly from the Chat 2 codebase. Hellion Chat is licensed under
|
||||
[EUPL-1.2](LICENSE), and credit for the original IPC design and implementation goes to
|
||||
**[Infiziert90 (Infi)](https://github.com/Infiziert90)** and **[Anna](https://github.com/anna-is-cute)**,— see
|
||||
[`NOTICE.md`](NOTICE.md) for full attribution.
|
||||
This guide and the IPC surface it documents derive directly from the Chat 2 codebase. Hellion Chat
|
||||
is licensed under [EUPL-1.2](LICENSE), and credit for the original IPC design and implementation
|
||||
goes to **[Infiziert90 (Infi)](https://github.com/Infiziert90)** and
|
||||
**[Anna](https://github.com/anna-is-cute)**,— see [`NOTICE.md`](NOTICE.md) for full attribution.
|
||||
|
||||
Reference in New Issue
Block a user