Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/crawler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,12 @@ jobs:
NTFY_TOKEN: ${{ secrets.NTFY_TOKEN }}
BARK_URL: ${{ secrets.BARK_URL }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
# Langbot配置
LANGBOT_API_BASE: ${{ secrets.LANGBOT_API_BASE }}
LANGBOT_BOT_UUID: ${{ secrets.LANGBOT_BOT_UUID }}
LANGBOT_API_KEY: ${{ secrets.LANGBOT_API_KEY }}
LANGBOT_TARGET_TYPE: ${{ secrets.LANGBOT_TARGET_TYPE }}
LANGBOT_TARGET_ID: ${{ secrets.LANGBOT_TARGET_ID }}
# 通用Webhook配置
GENERIC_WEBHOOK_URL: ${{ secrets.GENERIC_WEBHOOK_URL }}
GENERIC_WEBHOOK_TEMPLATE: ${{ secrets.GENERIC_WEBHOOK_TEMPLATE }}
Expand Down
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 忽略 Python 字节码
**/__pycache__/
*.pyc

# 忽略项目输出目录
output/

# 忽略二进制和旧文件
supercronic
docker/supercronic
docker/Dockerfileold

# 忽略编辑器和环境配置
.env
.idea/
.vscode/
uv.lock
116 changes: 114 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@
**🎉 核心功能增强**

1. **多账号推送支持**
- 所有推送渠道(飞书、钉钉、企业微信、Telegram、ntfy、Bark、Slack)支持多账号配置
- 所有推送渠道(飞书、钉钉、企业微信、Telegram、ntfy、Bark、Slack、Langbot)支持多账号配置
- 使用分号 `;` 分隔多个账号,例如:`FEISHU_WEBHOOK_URL=url1;url2`
- 自动验证配对配置(如 Telegram 的 token 和 chat_id)数量一致性

Expand Down Expand Up @@ -944,7 +944,7 @@ frequency_words.txt 文件增加了一个【必须词】功能,使用 + 号

### **多渠道多账号推送**

支持**企业微信**(+ 微信推送方案)、**飞书**、**钉钉**、**Telegram**、**邮件**、**ntfy**、**Bark**、**Slack**,消息直达手机和邮箱
支持**企业微信**(+ 微信推送方案)、**飞书**、**钉钉**、**Telegram**、**邮件**、**ntfy**、**Bark**、**Slack**、**Langbot**,消息直达手机和邮箱

> 💡 详细配置教程见 [推送到多个群/设备](#10-推送到多个群设备)

Expand Down Expand Up @@ -1742,6 +1742,118 @@ ai_translation:

</details>

<details>
<summary>👉 点击展开:<strong>Langbot 推送</strong>(支持 QQ/微信/Telegram 等多平台聊天机器人)</summary>
<br>

**GitHub Secret 配置(⚠️ Name 名称必须严格一致):**
- **Name(名称)**:`LANGBOT_API_BASE`
- **Secret(值)**:Langbot API 地址(如 `http://192.168.1.100:5301`)

- **Name(名称)**:`LANGBOT_BOT_UUID`
- **Secret(值)**:你的 Bot UUID

- **Name(名称)**:`LANGBOT_API_KEY`
- **Secret(值)**:你的 API Key(格式:`lbk_xxx`)

- **Name(名称)**:`LANGBOT_TARGET_TYPE`
- **Secret(值)**:目标类型(`group` 或 `person`)

- **Name(名称)**:`LANGBOT_TARGET_ID`
- **Secret(值)**:目标 ID(群号或用户 ID)

**说明**:Langbot 需要配置**5个** Secret,请分别点击五次"New repository secret"按钮添加

<br>

**Langbot 简介:**

Langbot 是一个多平台聊天机器人框架,支持:
- **QQ**:通过 QQ 机器人推送到 QQ 群或私聊
- **微信**:通过微信机器人推送(需配合 WeChat Hook)
- **Telegram**:直接推送到 Telegram 群组或用户
- **其他平台**:支持扩展接入更多平台

**设置步骤:**

### 步骤 1:部署 Langbot 服务

1. **安装 Langbot**:
- 访问 [Langbot 官网](https://langbot.app/) 或 GitHub 仓库
- 按照官方文档部署 Langbot 服务
- 记录下服务地址(如 `http://192.168.1.100:5301`)

2. **创建机器人**:
- 登录 Langbot 管理后台
- 创建新的机器人实例
- 配置机器人连接到目标平台(QQ/微信/Telegram 等)
- 获取 Bot UUID 和 API Key

### 步骤 2:获取目标 ID

**QQ 群推送**:
- `target_type`:`group`
- `target_id`:QQ 群号(如 `123456789`)

**QQ 私聊推送**:
- `target_type`:`private`
- `target_id`:QQ 号(如 `987654321`)

**微信群推送**:
- `target_type`:`group`
- `target_id`:微信群 ID(从 Langbot 管理后台获取)

### 步骤 3:配置到 TrendRadar

**GitHub Actions**:
在 GitHub Secrets 中添加上述 5 个配置项

**Docker 部署**:
在 `docker/.env` 文件中添加:
```env
LANGBOT_API_BASE=http://192.168.1.100:5301
LANGBOT_BOT_UUID=your_bot_uuid
LANGBOT_API_KEY=lbk_your_api_key
LANGBOT_TARGET_TYPE=group
LANGBOT_TARGET_ID=123456789
```

**本地运行**:
在 `config/config.yaml` 中配置:
```yaml
notification:
channels:
langbot:
api_base: "http://192.168.1.100:5301"
bot_uuid: "your_bot_uuid"
api_key: "lbk_your_api_key"
target_type: "group"
target_id: "123456789"
```

---

**注意事项:**
- ✅ 支持 Markdown 格式(纯文本显示)
- ✅ 支持自动分批推送
- ✅ 支持热榜+RSS合并+独立展示区
- ✅ 支持 AI 分析内容推送
- ⚠️ 需要自行部署 Langbot 服务
- ⚠️ API Base 地址必须能从运行环境访问(GitHub Actions 需要公网地址)
- ⚠️ 建议使用内网部署,配合 Docker 版本使用

**使用场景:**
- 想在 QQ 群接收热点推送
- 需要微信机器人推送(企业微信之外的选择)
- 已有 Langbot 机器人,希望复用现有基础设施
- 需要统一管理多个平台的机器人推送

**相关链接:**
- [Langbot 官方网站](https://langbot.app/)
- [Langbot GitHub](https://github.com/langgenius/langbot)(如有开源版本)

</details>

<br>

### 3️⃣ 第三步:手动测试新闻推送
Expand Down
7 changes: 7 additions & 0 deletions config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,13 @@ notification:
slack:
webhook_url: "" # Slack Incoming Webhook URL

langbot:
api_base: "" # Langbot API 地址(如:http://192.168.31.143:5301)
bot_uuid: "" # Langbot Bot UUID
api_key: "" # Langbot API Key(格式:lbk_xxx)
target_type: "group" # 目标类型:group(群聊)或 person(私聊)
target_id: "" # 目标 ID(群号或用户 ID)

generic_webhook:
webhook_url: "" # 通用 Webhook URL(支持 Discord、Matrix、IFTTT 等)
payload_template: "" # JSON 模板,支持 {title} 和 {content} 占位符
Expand Down
92 changes: 0 additions & 92 deletions docker/.env

This file was deleted.

58 changes: 11 additions & 47 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,70 +2,34 @@ FROM python:3.10-slim

WORKDIR /app

# Latest releases available at https://github.com/aptible/supercronic/releases
ARG TARGETARCH
ENV SUPERCRONIC_VERSION=v0.2.39
# 1. 直接从本地复制已经下载好的 supercronic
# 确保文件已重命名为 supercronic 并位于 Dockerfile 同级目录
COPY supercronic /usr/local/bin/supercronic

RUN set -ex && \
apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates && \
case ${TARGETARCH} in \
amd64) \
export SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/${SUPERCRONIC_VERSION}/supercronic-linux-amd64; \
export SUPERCRONIC_SHA1SUM=c98bbf82c5f648aaac8708c182cc83046fe48423; \
export SUPERCRONIC=supercronic-linux-amd64; \
;; \
arm64) \
export SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/${SUPERCRONIC_VERSION}/supercronic-linux-arm64; \
export SUPERCRONIC_SHA1SUM=5ef4ccc3d43f12d0f6c3763758bc37cc4e5af76e; \
export SUPERCRONIC=supercronic-linux-arm64; \
;; \
*) \
echo "Unsupported architecture: ${TARGETARCH}"; \
exit 1; \
;; \
esac && \
echo "Downloading supercronic for ${TARGETARCH} from ${SUPERCRONIC_URL}" && \
# 重试机制:最多3次,每次超时30秒
for i in 1 2 3; do \
echo "Download attempt $i/3"; \
if curl -fsSL --connect-timeout 30 --max-time 60 -o "$SUPERCRONIC" "$SUPERCRONIC_URL"; then \
echo "Download successful"; \
break; \
else \
echo "Download attempt $i failed"; \
if [ $i -eq 3 ]; then \
echo "All download attempts failed"; \
exit 1; \
fi; \
sleep 2; \
fi; \
done && \
echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - && \
chmod +x "$SUPERCRONIC" && \
mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" && \
ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic && \
supercronic -version && \
apt-get remove -y curl && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 2. 设置执行权限并验证版本
RUN chmod +x /usr/local/bin/supercronic && \
supercronic -version

# 3. 安装 Python 依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 4. 复制项目文件
COPY docker/manage.py .
COPY trendradar/ ./trendradar/

# 复制 entrypoint.sh 并强制转换为 LF 格式
# 5. 复制并处理 entrypoint.sh (处理 Windows 换行符问题)
COPY docker/entrypoint.sh /entrypoint.sh.tmp
RUN sed -i 's/\r$//' /entrypoint.sh.tmp && \
mv /entrypoint.sh.tmp /entrypoint.sh && \
chmod +x /entrypoint.sh && \
chmod +x manage.py && \
mkdir -p /app/config /app/output

# 6. 环境变量设置
ENV PYTHONUNBUFFERED=1 \
CONFIG_PATH=/app/config/config.yaml \
FREQUENCY_WORDS_PATH=/app/config/frequency_words.txt

# 7. 启动
ENTRYPOINT ["/entrypoint.sh"]
6 changes: 6 additions & 0 deletions docker/docker-compose-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ services:
- BARK_URL=${BARK_URL:-}
# Slack配置
- SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL:-}
# Langbot配置
- LANGBOT_API_BASE=${LANGBOT_API_BASE:-}
- LANGBOT_BOT_UUID=${LANGBOT_BOT_UUID:-}
- LANGBOT_API_KEY=${LANGBOT_API_KEY:-}
- LANGBOT_TARGET_TYPE=${LANGBOT_TARGET_TYPE:-group}
- LANGBOT_TARGET_ID=${LANGBOT_TARGET_ID:-}
# 通用Webhook配置
- GENERIC_WEBHOOK_URL=${GENERIC_WEBHOOK_URL:-}
- GENERIC_WEBHOOK_TEMPLATE=${GENERIC_WEBHOOK_TEMPLATE:-}
Expand Down
Loading