aboutsummaryrefslogtreecommitdiffstats
path: root/docs/jeeves.md
diff options
context:
space:
mode:
authorAhmed <git@gumx.cc>2026-06-14 01:46:29 +0300
committerAhmed <git@gumx.cc>2026-06-14 01:46:29 +0300
commit5a8d568931d9b23ce0df1265d05259a7012081c9 (patch)
tree4ea19b8bb1763a38246f342f172c285f6579e09b /docs/jeeves.md
init: mostly vibed
Diffstat (limited to 'docs/jeeves.md')
-rw-r--r--docs/jeeves.md122
1 files changed, 122 insertions, 0 deletions
diff --git a/docs/jeeves.md b/docs/jeeves.md
new file mode 100644
index 0000000..77bd5e7
--- /dev/null
+++ b/docs/jeeves.md
@@ -0,0 +1,122 @@
+# jeeves
+
+Combined-features IRC bot. Brings together DJ queue management, duck hunting,
+recipes, news and weather, quote bank, image rendering, and keyword responses
+in a single bot with a shared runtime-configurable settings store.
+
+## Dependencies
+
+- Sopel IRC framework
+- Pillow (`pip install Pillow`) - only needed for `!draw`; all other features
+ work without it
+
+## Commands
+
+### DJ (anyone / op for controls)
+| Command | Description |
+|---------|-------------|
+| `!dj <url>` | Queue a YouTube URL (shorts, embeds, live not accepted) |
+| `!np` | Show currently playing track |
+| `!queue` | List up to 4 upcoming tracks |
+| `!loop` | Show loop state |
+| `!play` | Start or resume playback (op) |
+| `!stop` | Pause playback (op) |
+| `!skip` | Skip to next track (op) |
+| `!remove` | Remove current track from queue (op) |
+| `!loop <on\|off>` | Toggle queue looping (op) |
+| `!clear` | Clear queue and stop playback (op) |
+
+### Duck hunting (anyone in channel / op for control)
+| Command | Description |
+|---------|-------------|
+| `!bang` | Fire at the current duck |
+| `!reload` | Refill ammo (3-second cooldown) |
+| `!score` | Top 5 players for this channel |
+| `!score clear` | Clear scores for this channel (op/owner) |
+| `!hunt` | Show hunt state (includes current spawn/flee times) |
+| `!hunt start` | Start the hunt (op/owner) |
+| `!hunt stop` | Stop the hunt (op/owner) |
+
+### Recipes (anyone in channel)
+| Command | Description |
+|---------|-------------|
+| `!breakfast [list]` | Random breakfast suggestion, or list all |
+| `!lunch [list]` | Random lunch suggestion, or list all |
+| `!dinner [list]` | Random dinner suggestion, or list all |
+| `!snack [list]` | Random snack suggestion, or list all |
+| `!recipe <name>` | Full recipe: name, ingredients, steps |
+
+### News and weather (anyone)
+| Command | Description |
+|---------|-------------|
+| `!weather <city>` | Current weather conditions |
+| `!forecast <city>` | 3-day weather forecast |
+| `!headlines [global\|mena\|egypt] [count]` | Latest RSS headlines |
+| `!news` | Show auto-broadcast state |
+| `!news on\|off` | Enable/disable auto-broadcast (op/owner) |
+
+### Quotes (anyone / op for management)
+| Command | Description |
+|---------|-------------|
+| `!quote` | Post a random quote |
+| `!quote add <text>` | Add a quote (op/owner) |
+| `!quote del <N>` | Delete quote by index (op/owner) |
+| `!quote list` | Show total quote count |
+| `!quotes` | Show auto-post state |
+| `!quotes on\|off` | Enable/disable auto-posting (op/owner) |
+
+### Art (anyone in channel)
+| Command | Description |
+|---------|-------------|
+| `!draw [<lines>] <url>` | Render image as mIRC colour art (lines 4-12) |
+
+### Config (owner / op)
+| Command | Description |
+|---------|-------------|
+| `!set <key> <value>` | Set a config value (in channel: per-channel; in PM: global, owner only) |
+| `!config [#channel]` | Show all config values for a channel |
+
+### Admin (owner)
+| Command | Description |
+|---------|-------------|
+| `!join #channel` | Join a channel |
+| `!part [#channel]` | Leave a channel |
+| `!chans` | List joined channels |
+| `!pause` | Pause keyword responses |
+| `!resume` | Resume keyword responses |
+
+### Help
+| Command | Description |
+|---------|-------------|
+| `!help` | Topics overview |
+| `!help <topic>` | Commands in that topic |
+| `!help <cmd>` | Command description |
+
+## Runtime config keys
+
+All keys are set via `!set <key> <value>`. Per-channel keys can be set in a
+channel (affecting that channel only) or in PM (setting the global default).
+Global-only keys must be set in PM by the owner.
+
+| Key | Default | Scope | Description |
+|-----|---------|-------|-------------|
+| `dj_track_duration` | 120 | global | Seconds per track before auto-advance |
+| `dj_queue_cap` | 50 | global | Max tracks in queue |
+| `art_height` | 6 | global | Default lines for `!draw` (4-12) |
+| `duck_spawn_min` | 60 | per-channel | Min seconds between duck spawns |
+| `duck_spawn_max` | 300 | per-channel | Max seconds between duck spawns |
+| `duck_flee_time` | 45 | per-channel | Seconds before duck flees |
+| `duck_idle_rounds` | 3 | per-channel | Empty rounds before auto-stop (0=off) |
+| `news_interval` | 90 | per-channel | Minutes between news broadcasts |
+| `news_count` | 1 | per-channel | Headlines per broadcast cycle |
+| `quotes_interval` | 60 | per-channel | Minutes between quote auto-posts |
+
+## Config file keys
+
+| Key | Description |
+|-----|-------------|
+| `[jeeves] db_path` | Path to main JSON database |
+| `[jeeves] duck_db_path` | Path to duck scores SQLite database |
+| `[jeeves] recipes_path` | Path to recipes JSON file |
+| `[respond] keywords` | Newline-separated trigger words for keyword responses |
+| `[respond] responses` | Newline-separated response lines (random choice) |