Telegram每日自动签到/个人、群组、频道消息监控与自动回复

上一个帖子: tg-signer,电报每日自动签到 受到不少佬友点赞和反馈,于是加班加点(不是)更新:
加了消息监控功能 @Microsoft
加了发送消息后删除的功能 @Lapdog
加了直接发送一条消息的功能 @user94
@GinWU 佬友帮忙测试和提供了参考的docker compose配置
@sunnyan 打包了docker镜像

https://github.com/amchii/tg-signer
当前是0.4.0版本,以下是tg-signer的简要介绍:

Telegram每日自动签到/个人、群组、频道消息监控与自动回复

安装

注意国内镜像源可能拉取的不是最新版本,这时可以加上--index-url https://pypi.org/simple 来使用官方源

pip install -U tg-signer

或者为了提升程序速度:

pip install "tg-signer[speedup]"

使用方法

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]
  --help                          Show this message and exit.

Commands:
  list       列出已有配置
  login      登录账号(用于获取session)
  logout     登出账号并删除session文件
  monitor    配置和运行监控
  reconfig   重新配置
  run        根据任务配置运行签到
  run-once   运行一次签到任务,即使该签到任务今日已执行过
  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 --delete-after 1 8671234001 /test  # 向chat_id为'8671234001'的聊天发送'/test'文本, 并在1秒后删除发送的消息
tg-signer monitor run  # 配置个人、群组、频道消息监控与自动回复

配置代理(如有需要)

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
继续配置签到?(y/N):n
4. 每日签到时间(如 06:00:00): 08:10:00
5. 签到时间误差随机秒数(默认为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'): 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

示例解释:

  1. 聊天chat id和用户user id均同时支持整数id和字符串username, username必须以@开头 如"neo"输入"@neo",注意username 可能不存在,示例中chat id为-4573702599表示规则只对-4573702599对应的聊天有效。

  2. 匹配规则,目前皆忽略大小写

    1. exact 为精确匹配,消息必须精确等于该值。

    2. contains 为包含匹配,如contains=“kfc”,那么只要收到的消息中包含"kfc"如"I like MacDonalds rather than KfC"即匹配到(注意忽略了大小写)

    3. regex 为正则匹配,在消息中有搜索到该正则即匹配,示例中的
      参与关键词:「.*?」 可以匹配消息:
      “新的抽奖已经创建

      参与关键词:「我要抽奖」
      建议先私聊机器人”,
      不熟悉的可以给AI示例让它帮你生成。

    4. 可以只匹配来自特定用户的消息,如群管理员而不是随便什么人发布的抽奖消息

    5. 可以设置默认发布文本, 即只要匹配到消息即默认发送该文本

    6. 提取发布文本的正则,例如 “参与关键词:「(.*?)」\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 目录中。然后运行 tree .signer,你将看到:

.signer
├── latest_chats.json  # 获取的最近对话
├── me.json  # 个人信息
└── signs
    └── linuxdo  # 签到任务名
        ├── config.json  # 签到配置
        └── sign_record.json  # 签到记录

3 directories, 4 files

欢迎使用和反馈: https://github.com/amchii/tg-signer

321 个赞

感谢佬分享 :+1:

5 个赞

感谢你的分享

太强了

7 个赞

感谢大佬教程

5 个赞

感谢大佬分享!

4 个赞

有点厉害支持~~

10 个赞

感谢分享大佬厉害啊

6 个赞


这种可以吗?

8 个赞

如果这个点击签到是发送一条文本的话就可以,如果是单纯点击keyboard,目前还不支持。

1 个赞

感谢大佬分享!

11 个赞

强,特强,感谢老板分享,不是一点点厉害,是很厉害,爱了:heart:

4 个赞

6字即可 :tieba_001:

1 个赞

感谢分享大佬厉害啊

6 个赞

使用这条评论的文本进行正则匹配示例:
---------------------------
新的抽奖已经创建
抽奖信息
抽奖 ID:9fcef4ddddddd
创建者:哈哈
奖品:
▸ 激活码 * 10
中奖概率:10/500=2.00%
简介:xxxxx
抽奖创建时间:2024-07-18 17:50:26

抽奖设置
允许一个人中多种奖品:否
开奖方式:条件开奖
自动开奖人数:500
自动开奖时间:不会按时间开奖

参与设置
允许普通用户参加:是
允许频道参加:否
允许匿名群组管理员参加:否
参与关键词:「我要抽奖」

建议先私聊机器人,这样中奖、参加时可以便可以收到机器人的私聊通知(皮套除外)
----------------------------
因为使用的是搜索文字匹配,也就是在这段文字中包含正则表达的内容即可, 那么“新的抽奖”、“新的抽奖已经创建”和“参与关键词”都能命中,为了精确(防止误发)点,可以对“参与关键词:「我要抽奖」”进行匹配:“参与关键词:「.?」” ,.*?表示任意非贪婪匹配,即「这里的任何内容都可以」。
提取发送文本的正则可以是:“参与关键词:「(.
?)」”,括号()中的即为提取内容,对应示例就是“我要抽奖”。

2 个赞

期待能够支持验证码ocr和keyboard点击

2 个赞

感谢大佬分享,教程很详细

11 个赞

keyboard倒是不难,验证码可以看我上一篇关于AI识别验证码的帖子,GPT4o对于简单的确实可以识别,其他千奇百怪的就不一定了。。。

3 个赞

感谢owner点名~
看起来这次的v0.4.0支持的功能更加强大。
文档也非常详尽,跟着文档一路阅读,就像是亲自使用了一次一番。
希望佬继续加油!:muscle:

3 个赞

感谢大佬,辛苦了

5 个赞

有docker 版吗