{"id":28522044,"url":"https://github.com/furyolo/tgsigner","last_synced_at":"2025-07-04T00:31:34.729Z","repository":{"id":296726301,"uuid":"994273427","full_name":"furyolo/tgsigner","owner":"furyolo","description":"Multi-account Telegram CLI automation tool with centralized session management and flexible logging (push to Telegram bot \u0026 local), ideal for batch operations and secure ops.","archived":false,"fork":false,"pushed_at":"2025-06-03T06:28:45.000Z","size":52,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-09T08:49:49.076Z","etag":null,"topics":["automation-tool","multi-account","telegram-bot","telegram-cli"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/furyolo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-01T15:40:45.000Z","updated_at":"2025-06-03T06:28:46.000Z","dependencies_parsed_at":"2025-06-02T01:50:43.197Z","dependency_job_id":"8c809598-4f7c-4956-bd6e-fb54eafdb5a6","html_url":"https://github.com/furyolo/tgsigner","commit_stats":null,"previous_names":["furyolo/tgsigner"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/furyolo/tgsigner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/furyolo%2Ftgsigner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/furyolo%2Ftgsigner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/furyolo%2Ftgsigner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/furyolo%2Ftgsigner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/furyolo","download_url":"https://codeload.github.com/furyolo/tgsigner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/furyolo%2Ftgsigner/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263426110,"owners_count":23464793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation-tool","multi-account","telegram-bot","telegram-cli"],"created_at":"2025-06-09T08:42:25.421Z","updated_at":"2025-07-04T00:31:33.651Z","avatar_url":"https://github.com/furyolo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Telegram 多账户命令行自动化与日志推送工具\n\n\u003e 支持批量运维、集中 session 管理、日志推送到 Telegram bot 与本地持久化\n\u003e 更新时间：2025-06-03 14:24:06 +08:00\n\n## 项目简介\n本项目基于 Telethon，支持多账户、集中 session 管理、命令行灵活操作（消息发送、登录、登出、延迟删除、代理、对话查询等），适用于 Telegram 群组/频道自动化、批量运维等场景。\n\n## 核心特性\n- 多账户支持，账户配置集中于 .env，字段如 ANZO_API_ID/ANZO_API_HASH。\n- 所有 session 文件集中于 `sessions/` 目录，命名为 `{account}.session`。\n- 命令行接口基于 click，支持账户切换、代理、消息发送与删除、登录登出、对话查询等。\n- 日志安全、参数校验、异常处理完善。\n- 日志可自动推送到 Telegram bot，支持本地持久化、分段、等级过滤、异常降级。\n- 结构清晰，便于扩展批量/文件发送等功能。\n\n## 快速开始\n1. **安装依赖**\n   ```bash\n   uv sync --default-index https://pypi.tuna.tsinghua.edu.cn/simple\n   ```\n2. **配置 .env**（参考 .env.example）\n   ```env\n   # anzo 账户\n   ANZO_API_ID=123456\n   ANZO_API_HASH=abcdef1234567890abcdef1234567890\n   # fury 账户\n   FURY_API_ID=654321\n   FURY_API_HASH=098765fedcba098765fedcba098765fe\n   # Telegram 日志推送配置\n   LOG_BOT_TOKEN=your_bot_token_here\n   LOG_BOT_CHAT_ID=123456789\n   LOG_BOT_LEVEL=ERROR\n   ```\n3. **确保 `sessions/` 和 `logs/` 目录存在**，首次运行会自动创建，无需手动操作。\n\n## 命令行用法\n以 uv 为例：\n\n- **发送消息并 10 秒后删除**\n  ```bash\n  uv run main.py -a fury send-text --delete-after 10 77893 hello\n  ```\n- **使用代理**\n  ```bash\n  uv run main.py -a anzo -p socks5://localhost:3067 send-text --delete-after 5 77893 签到\n  ```\n- **登录账户（首次/需验证码时）**\n  ```bash\n  uv run main.py -a anzo login\n  ```\n- **登出账户**\n  ```bash\n  uv run main.py -a fury logout\n  ```\n- **查询所有对话（dialog）ID与名称**\n  ```bash\n  uv run main.py -a anzo list-dialogs\n  ```\n- **dialog_id 为负数时的用法**\n  \u003e **注意：** 如果 dialog_id 为负数，需在参数前加 `--`，如：\n  ```bash\n  uv run main.py -a fury send-text --delete-after 10 -- -105275 hello\n  ```\n  `--` 告诉命令行解析器，后面的内容全部作为\"位置参数\"处理，不再解析为选项。\n- **发送消息并监听回复写入日志**\n  ```bash\n  uv run main.py -a fury send-and-log-reply 77893 \"你好，机器人\" --timeout 30 --max-messages 1 --delete-after 5\n  ```\n  \u003e 发送后自动监听目标对话的回复（默认首条，支持--timeout、--max-messages、--delete-after），收到内容自动写入日志。\n  \u003e\n  \u003e **说明：**\n  \u003e - `--delete-after` 倒计时从消息发送后立即开始，监听回复与消息删除互不阻塞。\n  \u003e - 若消息发送失败，不会启动监听/删除，日志有详细错误提示。\n\n## 参数说明\n- `-a/--account`：账户名（如 anzo, fury），必填。\n- `-p/--proxy`：代理地址（如 socks5://localhost:3067），可选。\n- `send-text`：发送消息命令，需指定 dialog_id 和消息内容。\n- `--delete-after`：N 秒后自动删除消息，可选。\n- `login`/`logout`：登录/登出账户。\n- `list-dialogs`：查询所有对话ID与名称。\n- `send-and-log-reply`：发送消息并监听目标对话回复，收到内容写入日志。参数：dialog_id, message, --timeout, --max-messages, --delete-after。监听与删除并发，delete-after倒计时从消息发送后立即开始。\n\n## 日志推送与本地持久化\n- **日志推送到Telegram bot**：\n  - 需在.env中配置：\n    - `LOG_BOT_TOKEN`：用于推送日志的bot token\n    - `LOG_BOT_CHAT_ID`：日志推送目标chat_id（个人或群组）\n    - `LOG_BOT_LEVEL`：推送日志的最低等级（如ERROR/CRITICAL/INFO）\n  - 日志推送支持：\n    - 日志等级过滤（仅推送高于设定等级的日志）\n    - 内容分段（单条消息最大4096字符，自动分段推送）\n    - 异常catch降级（推送失败自动降级为本地持久化，不影响主业务）\n    - 敏感信息保护（日志不含API密钥等敏感信息）\n  - 配置缺失或错误时，日志推送自动降级为本地持久化。\n- **本地日志持久化**：\n  - 日志文件存放于 `logs/{account}.log`，每个账户独立日志文件，统一存放于 logs/ 目录。\n  - 日志文件自动轮转：单文件最大10MB，最多7个历史文件，超出自动轮转。\n  - 控制台与文件双输出，便于开发与生产调试。\n  - logs/目录首次运行自动创建。\n  - 日志内容不含API_ID、API_HASH等敏感信息。\n  - 建议设置logs/目录合理权限，防止未授权访问。\n- **详细日志策略与安全说明**见 `/project_document/logging_policy.md`。\n\n## 常见问题 FAQ\n- **如何扩展新账户？**\n  在 .env 中新增 `NEWACCOUNT_API_ID` 和 `NEWACCOUNT_API_HASH`，并在命令行用 `-a newaccount` 指定。\n- **session 文件如何管理？**\n  所有 session 文件自动存放于 `sessions/` 目录，命名为 `{account}.session`。\n- **代理支持哪些格式？**\n  支持 socks5/http，格式如 `socks5://host:port`。\n- **dialog_id 为负数如何输入？**\n  在命令行参数前加 `--`，如：\n  ```bash\n  uv run main.py -a fury send-text --delete-after 10 -- -105275 hello\n  ```\n- **如何查询所有对话ID与名称？**\n  使用 `list-dialogs` 命令：\n  ```bash\n  uv run main.py -a anzo list-dialogs\n  ```\n- **日志推送到Telegram bot如何配置？推送失败会怎样？**\n  需在.env配置LOG_BOT_TOKEN、LOG_BOT_CHAT_ID、LOG_BOT_LEVEL，推送失败自动降级为本地日志，不影响主业务。\n- **日志本地持久化如何轮转？**\n  日志文件最大10MB，最多7个历史文件，超出自动轮转。\n- **本地日志文件示例？**\n  日志文件按账户区分，示例：\n  ```\n  logs/anzo.log\n  logs/fury.log\n  ```\n- **日志是否包含敏感信息？**\n  日志不记录API密钥等敏感信息。\n- **如何发送消息并监听回复写入日志？**\n  使用 send-and-log-reply 命令：\n  ```bash\n  uv run main.py -a fury send-and-log-reply 77893 \"你好，机器人\" --timeout 30 --max-messages 1 --delete-after 5\n  ```\n  \u003e 发送后自动监听目标对话的回复（默认首条，支持--timeout、--max-messages、--delete-after），收到内容自动写入日志。\n  \u003e\n  \u003e **说明：**\n  \u003e - `--delete-after` 倒计时从消息发送后立即开始，监听回复与消息删除互不阻塞。\n  \u003e - 若消息发送失败，不会启动监听/删除，日志有详细错误提示。\n- **send-and-log-reply 异常场景说明**\n  - 若消息发送失败（如网络异常、权限不足等），不会启动监听/删除，日志会详细记录错误。\n  - 监听期间如遇超时、无回复、或删除失败，均有详细日志提示，便于排查。\n\n## 文档与归档说明\n- 所有设计、决策、会议纪要、实现细节、日志策略均归档于 `/project_document/` 目录，详见 `tgsigner_task.md`、`logging_policy.md`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuryolo%2Ftgsigner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffuryolo%2Ftgsigner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuryolo%2Ftgsigner/lists"}