-
每日定时和随机误差时间签到
-
根据配置的文本点击键盘
-
调用AI进行图片识别并点击键盘
-
个人、群组、频道消息监控与自动回复
...
需要Python3.9及以上
pip install -U tg-signer
或者为了提升程序速度:
pip install "tg-signer[speedup]"
未上传直接使用的镜像,可以自行build镜像,见docker 目录下的Dockerfile和 README 。
Usage: tg-signer [OPTIONS] COMMAND [ARGS]...
使用<子命令> --help查看使用说明
子命令别名:
run_once -> run-once
send_text -> send-text
Options:
-l, --log-level [debug|info|warn|error]
日志等级, `debug`, `info`, `warn`, `error`
[default: info]
--log-file PATH 日志文件路径, 可以是相对路径 [default: tg-signer.log]
-p, --proxy TEXT 代理地址, 例如: socks5://127.0.0.1:1080,
会覆盖环境变量`TG_PROXY`的值 [env var: TG_PROXY]
--session_dir PATH 存储TG Sessions的目录, 可以是相对路径 [default: .]
-a, --account TEXT 自定义账号名称,对应session文件名为<account>.session [env
var: TG_ACCOUNT; default: my_account]
-w, --workdir PATH tg-signer工作目录,用于存储配置和签到记录等 [default:
.signer]
--session-string TEXT Telegram Session String,
会覆盖环境变量`TG_SESSION_STRING`的值 [env var:
TG_SESSION_STRING]
--in-memory 是否将session存储在内存中,默认为False,存储在文件
--help Show this message and exit.
Commands:
export 导出配置,默认为输出到终端。
import 导入配置,默认为从终端读取。
list 列出已有配置
list-members 查询聊天(群或频道)的成员, 频道需要管理员权限
list-schedule-messages 显示已配置的定时消息
login 登录账号(用于获取session)
logout 登出账号并删除session文件
monitor 配置和运行监控
multi-run 使用一套配置同时运行多个账号
reconfig 重新配置
run 根据任务配置运行签到
run-once 运行一次签到任务,即使该签到任务今日已执行过
schedule-messages 批量配置Telegram自带的定时发送消息功能
send-text 发送一次消息, 请确保当前会话已经"见过"该`chat_id`
version Show version
例如:
tg-signer run
tg-signer run my_sign # 不询问,直接运行'my_sign'任务
tg-signer run-once my_sign # 直接运行一次'my_sign'任务
tg-signer send-text 8671234001 /test # 向chat_id为'8671234001'的聊天发送'/test'文本
tg-signer send-text -- -10006758812 浇水 # 对于负数需要使用POSIX风格,在短横线'-'前方加上'--'
tg-signer send-text --delete-after 1 8671234001 /test # 向chat_id为'8671234001'的聊天发送'/test'文本, 并在1秒后删除发送的消息
tg-signer list-members --chat_id -1001680975844 --admin # 列出频道的管理员
tg-signer schedule-messages --crontab '0 0 * * *' --next-times 10 -- -1001680975844 你好 # 在未来10天的每天0点向'-1001680975844'发送消息
tg-signer monitor run # 配置个人、群组、频道消息监控与自动回复
tg-signer multi-run -a account_a -a account_b same_task # 使用'same_task'的配置同时运行'account_a'和'account_b'两个账号
tg-signer
不读取系统代理,可以使用环境变量 TG_PROXY
或命令参数--proxy
进行配置
例如:
export TG_PROXY=socks5://127.0.0.1:7890
tg-signer login
根据提示输入手机号码和验证码进行登录并获取最近的聊天列表,确保你想要签到的聊天在列表内。
tg-signer send-text 8671234001 hello # 向chat_id为'8671234001'的聊天发送'hello'文本
tg-signer run
或预先执行任务名:
tg-signer run linuxdo
根据提示进行配置即可。
开始配置任务<linuxdo>
第1个签到
1. Chat ID(登录时最近对话输出中的ID): 10086
2. 签到文本(如 /sign): /check_in
3. 等待N秒后删除签到消息(发送消息后等待进行删除, '0'表示立即删除, 不需要删除直接回车), N: 5
4. 是否有键盘?(y/N):y
5. 键盘中需要点击的按钮文本(无则直接回车): 签到
6. 是否需要通过图片识别选择选项?(y/N):y
在运行前请通过环境变量正确设置`OPENAI_API_KEY`, `OPENAI_BASE_URL`。默认模型为"gpt-4o", 可通过环境变量`OPENAI_MODEL`更改。
继续配置签到?(y/N):n
每日签到时间(如 06:00:00): 08:10:00
签到时间误差随机秒数(默认为0): 10
tg-signer monitor run my_monitor
根据提示进行配置。
开始配置任务<my_monitor>
聊天chat id和用户user id均同时支持整数id和字符串username, username必须以@开头,如@neo
配置第1个监控项
1. Chat ID(登录时最近对话输出中的ID): -4573702599
2. 匹配规则('exact', 'contains', 'regex', 'all'): contains
3. 规则值(不可为空): kfc
4. 只匹配来自特定用户ID的消息(多个用逗号隔开, 匹配所有用户直接回车): @neo
5. 默认发送文本: V Me 50
6. 从消息中提取发送文本的正则表达式:
7. 等待N秒后删除签到消息(发送消息后等待进行删除, '0'表示立即删除, 不需要删除直接回车), N:
继续配置?(y/N):y
配置第2个监控项
1. Chat ID(登录时最近对话输出中的ID): -4573702599
2. 匹配规则('exact', 'contains', 'regex'): regex
3. 规则值(不可为空): 参与关键词:「.*?」
4. 只匹配来自特定用户ID的消息(多个用逗号隔开, 匹配所有用户直接回车): 61244351
5. 默认发送文本:
6. 从消息中提取发送文本的正则表达式: 参与关键词:「(?P<keyword>(.*?))」\n
7. 等待N秒后删除签到消息(发送消息后等待进行删除, '0'表示立即删除, 不需要删除直接回车), N: 5
继续配置?(y/N):n
-
聊天
chat id
和用户user id
均同时支持整数id和字符串username, username必须以@开头 如"neo"输入"@neo",注意* username* 可能不存在,示例中chat id
为-4573702599表示规则只对-4573702599对应的聊天有效。 -
匹配规则,目前皆忽略大小写:
-
exact
为精确匹配,消息必须精确等于该值。 -
contains
为包含匹配,如contains="kfc",那么只要收到的消息中包含"kfc"如"I like MacDonalds rather than KfC" 即匹配到(注意忽略了大小写) -
regex
为正则,参考 Python正则表达式 ,在消息中有**搜索到该正则即匹配 **,示例中的 "参与关键词:「.*?」" 可以匹配消息: "新的抽奖已经创建... 参与关键词:「我要抽奖」建议先私聊机器人"
-
可以只匹配来自特定用户的消息,如群管理员而不是随便什么人发布的抽奖消息
-
可以设置默认发布文本, 即只要匹配到消息即默认发送该文本
-
提取发布文本的正则,例如 "参与关键词:「(.*?)」\n" ,注意用括号
(...)
捕获要提取的文本, 可以捕获第3点示例消息的关键词"我要抽奖"并自动发送
-
[INFO] [tg-signer] 2024-10-25 12:29:06,516 core.py 458 开始监控...
[INFO] [tg-signer] 2024-10-25 12:29:37,034 core.py 439 匹配到监控项:MatchConfig(chat_id=-4573702599, rule=contains, rule_value=kfc), default_send_text=V me 50, send_text_search_regex=None
[INFO] [tg-signer] 2024-10-25 12:29:37,035 core.py 442 发送文本:V me 50
[INFO] [tg-signer] 2024-10-25 12:30:02,726 core.py 439 匹配到监控项:MatchConfig(chat_id=-4573702599, rule=regex, rule_value=参与关键词:「.*?」), default_send_text=None, send_text_search_regex=参与关键词:「(?P<keyword>(.*?))」\n
[INFO] [tg-signer] 2024-10-25 12:30:02,727 core.py 442 发送文本:我要抽奖
[INFO] [tg-signer] 2024-10-25 12:30:03,001 core.py 226 Message「我要抽奖」 to -4573702599 will be deleted after 5 seconds.
[INFO] [tg-signer] 2024-10-25 12:30:03,001 core.py 229 Waiting...
[INFO] [tg-signer] 2024-10-25 12:30:08,260 core.py 232 Message「我要抽奖」 to -4573702599 deleted!
- 忽略签到时发送消息失败的聊天
- 支持点击按钮文本后继续进行图片识别
- Signer支持通过crontab定时
- Monitor匹配规则添加
all
支持所有消息 - Monitor支持匹配到消息后通过server酱推送
- Signer新增
multi-run
用于使用一套配置同时运行多个账号
- Monitor支持配置AI进行消息回复
- 增加批量配置「Telegram自带的定时发送消息功能」的功能
- 添加
import
和export
命令用于导入导出配置
- 根据配置的文本点击键盘
- 调用AI识别图片点击键盘
数据和配置默认保存在 .signer
目录中。然后运行 tree .signer
,你将看到:
.signer
├── latest_chats.json # 获取的最近对话
├── me.json # 个人信息
├── monitors # 监控
│ ├── my_monitor # 监控任务名
│ └── config.json # 监控配置
└── signs # 签到任务
└── linuxdo # 签到任务名
├── config.json # 签到配置
└── sign_record.json # 签到记录
3 directories, 4 files