# shireen News and weather bot. Fetches current weather and forecasts from wttr.in, and streams headlines from configurable RSS feeds. Posts fresh headlines automatically at a per-channel interval and deduplicates across restarts. ## Dependencies No external libraries required (uses `urllib` and `xml.etree.ElementTree`). ## Commands | Command | Description | |---------|-------------| | `!weather ` | Current weather conditions | | `!forecast ` | Brief forecast (today + next 2 days) | | `!headlines [global\|mena\|egypt] [n]` | Fresh headlines, optionally filtered by label or count | | `!news` | Show auto-broadcast state for this channel | | `!news on` | Enable auto-broadcast (owner/op) | | `!news off` | Disable auto-broadcast (owner/op) | | `!news interval ` | Set broadcast interval in minutes (owner/op) | | `!news count ` | Set headlines per broadcast cycle (owner/op) | ### Admin (owner) | Command | Description | |---------|-------------| | `!join #channel` | Join a channel | | `!part [#channel]` | Leave a channel | | `!chans` | List channels | | `!help` | Show usage (PM) | ## Auto-broadcast Every 90 minutes (default, per channel) shireen posts 1 headline (default) it hasn't posted before. GUIDs are persisted to the data JSON so the same article is never repeated across restarts. The cap is 1000 seen GUIDs (oldest pruned). Interval and count are configurable per channel with `!news interval` and `!news count`. ## URL cleaning All query strings and fragments are stripped from feed links before posting. News article URLs are fully identified by their path; query parameters from feeds are always tracking noise. ## Default RSS feeds | ID | Name | Label | |----|------|-------| | `bbc_world` | BBC World | global | | `reuters_world` | Reuters World | global | | `ap_world` | AP News | global | | `guardian_world` | The Guardian | global | | `arab_news` | Arab News | mena | | `aljazeera` | Al Jazeera | mena | | `al_monitor` | Al-Monitor | mena | | `egypt_indep` | Egypt Independent | egypt | | `daily_news_egypt` | Daily News Egypt | egypt | Feeds can be modified directly in the data JSON (`feeds` array) while the bot is stopped. Each feed has: `id`, `name`, `url`, `label`, `enabled`. ## Data file format Created automatically at `data_path` on first run: ```json { "channels": { "#example": { "news_enabled": true, "broadcast_interval": 90, "broadcast_count": 1, "last_broadcast": 0 } }, "feeds": [...], "seen": ["guid1", "guid2"] } ``` ## Config keys | Key | Default | Description | |-----|---------|-------------| | `[shireen] data_path` | `/var/shireen/data.json` | Path to state/config JSON (auto-created) | | `[shireen] broadcast_interval` | `90` | Default minutes between auto-broadcast cycles | | `[shireen] broadcast_count` | `1` | Default headlines posted per broadcast cycle | | `[shireen] headlines_count` | `1` | Default headlines returned by `!headlines` |