docs: update docs for Teams integration
- USAGE.md: Teams Integration section (config, setup, compat matrix) - CHEATSHEET.md: Teams config snippet - API.md: TeamsBot and TeamsMessage reference - README.md: Teams in features list - ROADMAP.md: v2.1.0 milestone - TODO.md/TASKS.md: Teams items Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
60
docs/API.md
60
docs/API.md
@@ -228,6 +228,66 @@ Wire-format encode/decode for raw DNS queries and responses.
|
||||
|
||||
---
|
||||
|
||||
## `derp.teams` -- Teams Adapter
|
||||
|
||||
Alternative bot adapter for Microsoft Teams via outgoing/incoming webhooks.
|
||||
Exposes the same plugin API as `derp.bot.Bot` so protocol-agnostic plugins
|
||||
work without modification.
|
||||
|
||||
### `TeamsMessage` dataclass
|
||||
|
||||
Duck-typed compatible with IRC `Message`:
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `raw` | `dict` | Original Activity JSON |
|
||||
| `nick` | `str \| None` | Sender display name |
|
||||
| `prefix` | `str \| None` | Sender AAD object ID (for ACL) |
|
||||
| `text` | `str \| None` | Message body (stripped of @mention) |
|
||||
| `target` | `str \| None` | Conversation/channel ID |
|
||||
| `is_channel` | `bool` | Always `True` (outgoing webhooks) |
|
||||
| `command` | `str` | Always `"PRIVMSG"` (compat shim) |
|
||||
| `params` | `list[str]` | `[target, text]` |
|
||||
| `tags` | `dict[str, str]` | Empty dict (no IRCv3 tags) |
|
||||
| `_replies` | `list[str]` | Reply buffer (unstable) |
|
||||
|
||||
### `TeamsBot`
|
||||
|
||||
Same stable attributes and methods as `Bot`:
|
||||
|
||||
| Attribute | Type | Description |
|
||||
|-----------|------|-------------|
|
||||
| `name` | `str` | Always `"teams"` |
|
||||
| `config` | `dict` | Merged TOML configuration |
|
||||
| `nick` | `str` | Bot display name (`teams.bot_name`) |
|
||||
| `prefix` | `str` | Command prefix (from `[bot]`) |
|
||||
| `state` | `StateStore` | Persistent key-value storage |
|
||||
| `registry` | `PluginRegistry` | Shared command and event registry |
|
||||
|
||||
**Sending messages** -- same signatures, different transport:
|
||||
|
||||
| Method | Behaviour |
|
||||
|--------|-----------|
|
||||
| `send(target, text)` | POST to incoming webhook URL |
|
||||
| `reply(msg, text)` | Append to `msg._replies` (HTTP response) |
|
||||
| `long_reply(msg, lines, *, label="")` | Paste overflow, appends to replies |
|
||||
| `action(target, text)` | Italic text via incoming webhook |
|
||||
| `shorten_url(url)` | Same FlaskPaste integration |
|
||||
|
||||
**IRC no-ops** (debug log, no error):
|
||||
|
||||
`join`, `part`, `kick`, `mode`, `set_topic`
|
||||
|
||||
**Plugin management** -- delegates to shared registry:
|
||||
|
||||
`load_plugins`, `load_plugin`, `reload_plugin`, `unload_plugin`
|
||||
|
||||
**Permission tiers** -- same model, exact AAD object ID matching:
|
||||
|
||||
`_get_tier(msg)`, `_is_admin(msg)`
|
||||
|
||||
---
|
||||
|
||||
## Handler Signatures
|
||||
|
||||
All command and event handlers are async functions receiving `bot` and
|
||||
|
||||
Reference in New Issue
Block a user