# RSSRadio <p align="center"> <strong>RSS feed aggregator + Group chat digest with AI-powered summarization and virtual broadcaster personalities</strong> </p> <p align="center"> RSS订阅聚合 + 群聊日刊生成,结合AI智能摘要与虚拟主播人格系统 </p> --- > ### Notices / 公告 > > **v1.1.0 (2026-02-26)** > > - Scheduled auto-publish (`settings.yaml` groups) is newly implemented and **not yet fully tested in production**. If auto-publish does not trigger as expected, use `!daily publish` as a workaround. > - Per-group configuration currently requires manually editing `settings.yaml`. This will be migrated to the WebUI once LangBot supports per-group plugin configuration in a future release. > - RSSHub mirror availability varies by region. If RSS sources return empty results, try configuring a self-hosted RSSHub instance via the WebUI settings. > - This plugin is optimized for **QQ (aiocqhttp)** only. Forward card rendering on other platforms is untested and may not work. > > --- > > - 每日定时推送功能(`settings.yaml` 群组配置)为新实现,**尚未经过充分的生产环境测试**。如定时推送未正常触发,可使用 `!daily publish` 手动发布。 > - 按群独立配置目前需手动编辑 `settings.yaml`。待 LangBot 未来版本支持按群插件配置后,将迁移至 WebUI。 > - RSSHub 镜像可用性因地区而异。如 RSS 源返回空结果,请在 WebUI 设置中配置自建 RSSHub 实例。 > - 本插件仅针对 **QQ(aiocqhttp)** 优化,转发卡片在其他平台上未经测试,可能无法正常显示。 --- [English](#english) | [中文](#中文) ## Recent Changes / 更新日志 See [CHANGELOG.md](CHANGELOG.md) for full history. ### v1.1.0 (2026-02-26) - **New**: `settings.yaml` as single source of truth for sources, roles, groups, prompts - **New**: Per-group configuration and scheduled auto-publish - **New**: RSSHub mirror cache persisted across restarts - **Fixed**: Scheduled auto-publish not firing (groups not persisted in memory) - **Changed**: Removed source/role toggles from WebUI; managed via `settings.yaml` only ### v1.0.0 (2026-02-25) - Renamed from "Daily Magazine" to **RSSRadio** - Parallel RSS fetching with mirror racing - Added 6 gaming RSS sources - QQ forward card delivery --- ## English ### Overview RSSRadio is a **LangBot plugin** that aggregates both **external RSS feeds** and **internal group chat messages** into AI-powered daily digests. It fetches news from multiple RSS sources (via RSSHub mirrors with parallel racing), generates daily summaries of group conversations, and delivers everything to QQ groups as merged forward cards with customizable virtual broadcaster personalities. ### Features - **Multi-source RSS Aggregation**: 18 built-in RSS sources across categories: - Tech News (36Kr, Sspai) - Academic Papers (arXiv AI/ML/CV/NLP) - Developer News (Juejin, Hacker News) - Social Media (Zhihu Hot, Douban Movies) - Finance (CLS Telegraph) - Gaming (Gamersky, 3DM, Xiaoheihe, Steam News, Elite GalNet, etc.) - **Parallel RSS Fetching**: Race multiple RSSHub mirrors simultaneously - first success wins, with persistent mirror cache across restarts - **AI-Powered Summarization**: LLM-generated concise news summaries and commentaries - **Virtual Broadcaster System**: Customizable virtual roles with distinct personalities: - 🎙️ News Anchor - Professional news delivery - 📰 Reporter - Group chat digest specialist - 🎭 Critic - Opinionated commentary - 📊 Analyst - In-depth analysis - **Group Chat Digest**: AI-generated daily summary of group conversations - **Per-Group Configuration**: Each group can have independent sources, roles, publish time, and commentator bindings - **Scheduled Auto-Publish**: Groups configured in `settings.yaml` auto-publish at specified times - **QQ Forward Card**: All content delivered as a single merged forward card ### Installation 1. Install via LangBot plugin manager or upload `.lbpkg` file 2. Configure LLM model in WebUI plugin settings 3. Edit `data/plugins/ydzat__rss_radio/config/settings.yaml` to configure groups, sources, roles, and prompts 4. Click "Save Config" in WebUI to reload the plugin ### Configuration RSSRadio uses a **two-tier configuration** system: #### WebUI Settings (manifest.yaml) Basic settings editable via LangBot WebUI: | Setting | Required | Description | |---------|----------|-------------| | LLM Model | Yes | Model for content generation | | Default Publish Time | No | Fallback publish time (default: 08:00) | | RSSHub URL | No | Custom RSSHub instance (default: https://rsshub.app) | | RSS Fetch Interval | No | Fetch interval in minutes (default: 60) | | Items Per Source | No | Max items per RSS source (default: 5) | | Max Messages Per Day | No | Max chat messages for digest (default: 500) | | Data Retention Days | No | Chat history retention (default: 30) | #### Advanced Settings (settings.yaml) All advanced configuration is done in `data/plugins/ydzat__rss_radio/config/settings.yaml`: - **defaults** - Default sources, roles, and publish time for all groups - **groups** - Per-group configuration (sources, roles, publish time, commentator bindings) - **roles** - Virtual broadcaster personality definitions (name, icon, style, purpose) - **commentator_preferences** - Content categories each commentator prefers - **prompts** - AI prompt templates for all content generation Groups listed in `settings.yaml` are **auto-registered** for scheduled publishing and are **locked from command modifications** (managed via file only). After editing `settings.yaml`, go back to the WebUI plugin config page and click **"Save Config"** to reload. ### Usage | Command | Description | |---------|-------------| | `!daily` | Show today's digest status | | `!daily publish` | Manually publish digest | | `!daily config` | Show current configuration | | `!daily config sources` | List enabled sources | | `!daily config roles` | List enabled roles | | `!daily config bindings` | Show commentator bindings | | `!daily set sources <ids>` | Set enabled sources (comma-separated) | | `!daily set roles <roles>` | Set enabled roles | | `!daily set time HH:MM` | Set publish time | | `!daily set order <ids>` | Set source display order | | `!daily set position inline\|end` | Set commentary position | | `!daily bind <role> <sources>` | Bind commentator to sources | | `!daily unbind <role> <sources>` | Unbind commentator (use `all` to unbind all) | | `!daily help` | Show detailed help | > **Note:** Groups managed by `settings.yaml` cannot be modified via commands. Edit the YAML file instead. ### Available Sources | ID | Name | Category | |----|------|----------| | `chat_digest` | Group Chat Digest | General | | `36kr` | 36Kr Hot | Tech | | `sspai` | Sspai | Tech | | `juejin` | Juejin Hot | Tech | | `hackernews` | Hacker News | Tech | | `arxiv_ai` | arXiv AI | Academic | | `arxiv_ml` | arXiv ML | Academic | | `arxiv_cv` | arXiv CV | Academic | | `arxiv_nlp` | arXiv NLP | Academic | | `zhihu_hot` | Zhihu Hot | Social | | `douban_movie` | Douban Movies | Social | | `cls_telegraph` | CLS Telegraph | Finance | | `gamersky` | Gamersky | Gaming | | `3dmgame` | 3DM Game | Gaming | | `xiaoheihe` | Xiaoheihe | Gaming | | `yxdzqb` | Game Deals | Gaming | | `steam_news` | Steam News | Gaming | | `elite_galnet` | Elite GalNet | Gaming | ### Current Limitations 1. **Platform**: Optimized for QQ (aiocqhttp). Other platforms may not support merged forward cards. 2. **RSSHub Dependency**: Most sources rely on RSSHub availability. 3. **LLM Costs**: Multiple LLM calls per publish (greeting, summaries, commentaries, closing). 4. **Rate Limits**: Some sources may have rate limits or require authentication. ### Roadmap - [ ] Migrate per-group config to WebUI (pending LangBot support for per-group plugin settings) - [ ] Custom RSS sources via commands - [ ] Image/media support in digests - [ ] Multi-language content support - [ ] More platform support (Telegram, Discord) ### Requirements - LangBot >= 1.0.0 - Python >= 3.10 --- ## 中文 ### 概述 RSSRadio 是一个 **LangBot 插件**,同时支持**外部 RSS 订阅聚合**和**内部群聊日刊生成**。它从多个 RSS 源(通过 RSSHub 镜像并行竞速获取)抓取新闻,同时记录群聊消息并生成每日总结,使用 LLM 生成摘要,最终以合并转发卡片的形式发送到 QQ 群,支持可定制的虚拟主播人格。 ### 功能特性 - **多源 RSS 聚合**:18 个内置 RSS 源,涵盖多个类别: - 科技资讯(36氪、少数派) - 学术论文(arXiv AI/ML/CV/NLP) - 开发者资讯(掘金、Hacker News) - 社交热点(知乎热榜、豆瓣热映) - 财经金融(财联社电报) - 游戏资讯(游民星空、3DM、小黑盒、Steam新闻、Elite GalNet 等) - **并行 RSS 获取**:同时向多个 RSSHub 镜像发起请求,首个成功即返回,镜像缓存跨重启持久化 - **AI 智能摘要**:使用 LLM 生成简洁的新闻摘要和评论 - **虚拟主播系统**:可定制的虚拟角色: - 🎙️ 群主播 - 专业新闻播报 - 📰 群报社 - 群聊日刊专员 - 🎭 群评论家 - 观点鲜明的点评 - 📊 群分析师 - 深度分析 - **群聊日刊**:AI 生成的群聊每日总结 - **按群独立配置**:每个群可独立设置订阅源、角色、发布时间和评论家绑定 - **定时自动发布**:在 `settings.yaml` 中配置的群组会自动在指定时间发布速报 - **QQ 转发卡片**:所有内容以单条合并转发卡片形式发送 ### 安装 1. 通过 LangBot 插件管理器安装或上传 `.lbpkg` 文件 2. 在 WebUI 插件设置中配置 LLM 模型 3. 编辑 `data/plugins/ydzat__rss_radio/config/settings.yaml` 配置群组、订阅源、角色和 Prompt 模板 4. 回到 WebUI 插件配置页面,点击「保存配置」重载插件 ### 配置说明 RSSRadio 采用**两级配置**系统: #### WebUI 设置(manifest.yaml) 通过 LangBot WebUI 编辑的基本设置: | 设置项 | 必需 | 说明 | |--------|------|------| | LLM 模型 | 是 | 用于内容生成的模型 | | 默认发布时间 | 否 | 兜底发布时间(默认:08:00) | | RSSHub URL | 否 | 自定义 RSSHub 实例(默认:https://rsshub.app) | | RSS 抓取间隔 | 否 | 抓取间隔,单位分钟(默认:60) | | 每源条目数 | 否 | 每个 RSS 源最多显示条目数(默认:5) | | 每日最大消息数 | 否 | 群聊日刊最多处理消息数(默认:500) | | 数据保留天数 | 否 | 聊天记录保留天数(默认:30) | #### 高级设置(settings.yaml) 所有高级配置在 `data/plugins/ydzat__rss_radio/config/settings.yaml` 中编辑: - **defaults** — 所有群组的默认订阅源、角色和发布时间 - **groups** — 按群配置(订阅源、角色、发布时间、评论家绑定) - **roles** — 虚拟主播人格定义(名称、图标、风格、用途) - **commentator_preferences** — 各评论家偏好的内容类别 - **prompts** — 所有内容生成的 AI Prompt 模板 在 `settings.yaml` 中列出的群组会**自动注册**定时发布,且**锁定命令修改**(仅通过文件管理)。 修改 `settings.yaml` 后,回到 WebUI 插件配置页面点击**「保存配置」**即可重载。 ### 使用方法 | 命令 | 说明 | |------|------| | `!daily` | 查看今日速报状态 | | `!daily publish` | 手动发布速报 | | `!daily config` | 查看当前配置 | | `!daily config sources` | 查看已启用的订阅源 | | `!daily config roles` | 查看已启用的角色 | | `!daily config bindings` | 查看评论家绑定 | | `!daily set sources <源>` | 设置订阅源(逗号分隔) | | `!daily set roles <角色>` | 设置启用的角色 | | `!daily set time HH:MM` | 设置发布时间 | | `!daily set order <源>` | 设置显示顺序 | | `!daily set position inline\|end` | 设置评论位置 | | `!daily bind <角色> <源>` | 绑定评论家到指定源 | | `!daily unbind <角色> <源>` | 解除绑定(用 `all` 解除全部) | | `!daily help` | 显示详细帮助 | > **注意:** 由 `settings.yaml` 管理的群组无法通过命令修改配置,请直接编辑 YAML 文件。 ### 可用订阅源 | ID | 名称 | 类别 | |----|------|------| | `chat_digest` | 群聊日刊 | 通用 | | `36kr` | 36氪热榜 | 科技 | | `sspai` | 少数派 | 科技 | | `juejin` | 掘金热榜 | 科技 | | `hackernews` | Hacker News | 科技 | | `arxiv_ai` | arXiv AI | 学术 | | `arxiv_ml` | arXiv ML | 学术 | | `arxiv_cv` | arXiv CV | 学术 | | `arxiv_nlp` | arXiv NLP | 学术 | | `zhihu_hot` | 知乎热榜 | 社交 | | `douban_movie` | 豆瓣热映 | 社交 | | `cls_telegraph` | 财联社电报 | 财经 | | `gamersky` | 游民星空 | 游戏 | | `3dmgame` | 3DM游戏网 | 游戏 | | `xiaoheihe` | 小黑盒 | 游戏 | | `yxdzqb` | 游戏打折情报 | 游戏 | | `steam_news` | Steam新闻 | 游戏 | | `elite_galnet` | Elite GalNet | 游戏 | ### 当前限制 1. **平台支持**:针对 QQ(aiocqhttp)优化,其他平台可能不支持合并转发卡片 2. **RSSHub 依赖**:大部分源依赖 RSSHub 可用性 3. **LLM 成本**:每次发布会有多次 LLM 调用(开场、摘要、评论、结尾) 4. **速率限制**:部分源可能有速率限制或需要认证 ### 开发路线 - [ ] 按群配置迁移至 WebUI(等待 LangBot 支持按群插件配置) - [ ] 通过命令添加自定义 RSS 源 - [ ] 摘要中的图片/媒体支持 - [ ] 多语言内容支持 - [ ] 更多平台支持(Telegram、Discord) ### 系统要求 - LangBot >= 1.0.0 - Python >= 3.10 --- ## Contributing / 贡献 Contributions are welcome! 欢迎贡献! 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## License / 许可证 MIT
RSSRadio by ydzat
RSSRadio - RSS feed aggregator + group chat digest with AI-powered summarization and virtual broadcaster personalities for QQ groups
Loading...