aboutsummaryrefslogtreecommitdiffstats

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 <city> Current weather conditions
!forecast <city> 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 <min> Set broadcast interval in minutes (owner/op)
!news count <n> 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:

{
  "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