|
|
2 months ago | |
|---|---|---|
| web | 2 months ago | |
| .env.example | 2 months ago | |
| .gitignore | 2 months ago | |
| Dockerfile | 2 months ago | |
| README.md | 2 months ago | |
| bot.py | 2 months ago | |
| config.example.yaml | 2 months ago | |
| config.py | 2 months ago | |
| dedup.py | 2 months ago | |
| forwarder.py | 2 months ago | |
| lark2lark.md | 2 months ago | |
| main.py | 2 months ago | |
| ratelimit.py | 2 months ago | |
| requirements.txt | 2 months ago |
基于飞书企业自建应用 + WebSocket 长连接,实现 7x24 小时无人值守的消息自动转发。
源群 ──┐
├─ WebSocket 事件 ──> 白名单过滤 ──> 防死循环 ──> 去重 ──> 限流队列 ──> Forward API ──> 目标群
源群 ──┘ (匀速 <5 QPS)
| 模块 | 职责 |
|---|---|
config.py |
加载 YAML / 环境变量配置 |
dedup.py |
message_id LRU 去重(飞书重发保护) |
ratelimit.py |
asyncio.Queue + 单 Worker 匀速消费(<5 QPS) |
forwarder.py |
事件处理 + 白名单 + sender_type=bot 过滤 + Forward API 调用 |
bot.py |
Bot 子进程入口:WebSocket 长连接 + 限流 Worker |
main.py |
入口,启动 Web 面板(含 Bot 子进程管理) |
web/supervisor.py |
FastAPI 面板后端:配置/状态/日志 API + 子进程管理 |
web/auth.py |
面板密码登录 + Cookie 签名鉴权 |
web/index.html |
单文件前端:配置/状态/日志三 Tab |
App ID 和 App Secretim:message.group_msg(获取群组所有消息)im:message:send_as_bot(以机器人身份发消息)im:resource(可选,建议申请)im.message.receive_v1在每个群设置 → 群机器人 → 添加机器人 → 选你的应用。
# 可用飞书开放平台调试台,或调用获取群列表 API
# https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/list
cp config.example.yaml config.yaml
# 编辑 config.yaml 填入 app_id / app_secret / source_chat_ids / target_chat_ids
# Linux
export LARK_PANEL_PASSWORD="your-strong-password"
# Windows PowerShell
$env:LARK_PANEL_PASSWORD="your-strong-password"
pip install -r requirements.txt
python main.py
启动后访问 http://服务器IP:8080,用密码登录面板。
首次启动可只用面板配置:把
config.example.yaml复制为config.yaml(不必填真实凭据),启动后通过面板的"配置"页填入并保存即可,Bot 会自动重连。
面板提供三个功能页:
面板密码通过环境变量 LARK_PANEL_PASSWORD 设置(推荐),或在 config.yaml 的 panel.password 配置(仅本地调试用)。
docker build -t lark2lark .
docker run -d --name lark2lark \
-p 8080:8080 \
-e LARK_PANEL_PASSWORD="your-strong-password" \
-v $(pwd)/config.yaml:/app/config.yaml \
--restart unless-stopped \
lark2lark
sender_type == "bot" 的消息,避免双向转发风暴1/max_qps 秒,保守默认 4 QPS