feat: add IRCv3 cap negotiation, channel management, state persistence
Implement CAP LS 302 flow with configurable ircv3_caps list, replacing the minimal SASL-only registration. Parse IRCv3 message tags (@key=value) with proper value unescaping. Add channel management plugin (kick, ban, unban, topic, mode) and bot API methods. Add SQLite key-value StateStore for plugin state persistence with !state inspection command. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -68,6 +68,37 @@ admins = ["*!~user@trusted.host", "ops!*@*.ops.net"]
|
||||
|
||||
IRC operators are auto-detected via WHO. Hostmask patterns use fnmatch.
|
||||
|
||||
## Channel Management (admin)
|
||||
|
||||
```
|
||||
!kick nick reason # Kick user from channel
|
||||
!ban *!*@bad.host # Ban hostmask
|
||||
!unban *!*@bad.host # Remove ban
|
||||
!topic New topic text # Set channel topic
|
||||
!topic # Query current topic
|
||||
!mode +m # Set channel mode
|
||||
!mode +o nick # Give ops
|
||||
```
|
||||
|
||||
## State Store (admin)
|
||||
|
||||
```
|
||||
!state list myplugin # List keys
|
||||
!state get myplugin key # Get value
|
||||
!state del myplugin key # Delete key
|
||||
!state clear myplugin # Clear all keys
|
||||
```
|
||||
|
||||
## IRCv3 Capabilities
|
||||
|
||||
```toml
|
||||
# config/derp.toml
|
||||
[server]
|
||||
ircv3_caps = ["multi-prefix", "away-notify", "server-time"]
|
||||
```
|
||||
|
||||
SASL auto-added when sasl_user/sasl_pass configured.
|
||||
|
||||
## Plugin Management (admin)
|
||||
|
||||
```
|
||||
@@ -232,6 +263,7 @@ msg.is_channel # True if channel
|
||||
msg.prefix # nick!user@host
|
||||
msg.command # PRIVMSG, JOIN, etc.
|
||||
msg.params # All params list
|
||||
msg.tags # IRCv3 tags dict
|
||||
```
|
||||
|
||||
## Config Locations
|
||||
|
||||
Reference in New Issue
Block a user