开发电报关键词提醒机器人 telegram keyword monitor bot

前言

之前使用了一个电报关键词提醒机器人项目.

使用下来觉得功能有点重. 原项目考虑到多人使用, 不同的用户关注不同的关键字和不同的群组. 所以原项目需要用到数据库.

我准备自己开发一个轻量的适合个人使用的电报关键词提醒机器人.

借助现在强大的gpt的力量写代码.

第一版代码生成是用的免费的 claude

后续代码调试是用的免费的 M$ copilot


设计功能

bot只接受来自指定id的 user 或 group 的控制命令, 
bot监听到关键字后, 发送通知信息给指定id 的 user 或 group 或 channel,
关注的 关键字列表 支持正则表达式
排除的 关键字列表 支持正则表达式
关注的 关键字列表 和 排除的 关键字列表 都更新到配置文件中保存

设计配置文件

配置文件 yaml 格式, 内容如下:
# 账户信息
account: 
  # 监听信息的user
  api_id: '1400003'
  api_hash: 'd11xxxxx112a7e059e831'
  user_phone: '+86190000010'

  # 发送消息的bot
  bot_token: '1000007:AAHNh8axxxxxxxxxxxxxxxxHA'
  bot_username: 'keyxxxxxrt_bot'

# LOG
logger:
  path: null # e.g. /root/absolute-path/   default null: {_current_path}/logs/
  level: INFO # FATAL,ERROR,WARN,INFO,DEBUG,NOTSET

# 代理
proxy:
  type: SOCKS5 # e.g. SOCKS4, SOCKS5, HTTP
  address: null  # e.g. 127.0.0.1
  port: null # e.g. 1088

# 非公共服务
# bot只接收来自以下ID的命令 可以设置为user或group的ID
command_id_list: 
  - 123456789
  - 987654321
# bot的通知信息发送到以下ID 可以设置为user或group或channel的ID
result_id_list: 
  - 123456789
  - 987654321

# 不处理来自机器人的消息
# 比如,有些群里有自动回复机器人,回复的都是重复的消息;或者一些广告机器人加群之后开始刷屏
ignore_bot_msg: true

# 临时禁止一些数据源, 而不需要user从群组或频道中退出
source_filter: false # 开关, 默认 false
source_filter_ignore_list:
  - 123456789
  - 987654321

# 关注的 关键字列表 支持正则表达式
keyword_list:
  - /keyword1|keyword2|keyword3/ig
  - /keyword4|keyword5|keyword6/ig

# 排除的 关键字列表 支持正则表达式
keyword_exclude_list:
  - /exkeyword1|exkeyword2|exkeyword3/ig
  - /exkeyword4|exkeyword5|exkeyword6/ig

将功能描述和配置文件丢给claude


搭环境

apt install -y python3-pip
pip3 install -r requirements.txt

调试

1. 验证user和bot启动部分的代码

正确启动的结果是, 

第一次运行, 命令行会提示要输入验证码.

之后 的运行不提示输入验证码.



2. 屏蔽user处理收到新消息的功能,
屏蔽bot判断命令来源的功能,
验证bot处理 /start 命令的代码

正确的结果是,

用任意telegram user向bot发 /start 命令, bot能收到 /start 消息并给出回应


3. 验证 查询 关键字列表 的命令 /list_keywords

正确的结果是,

能正确显示配置文件中的 关注关键字列表 和 排除关键字列表


4. 验证 添加和删除关键字列表的命令 

/add_keyword <正则表达式> - 添加关注关键字
/remove_keyword <正则表达式> - 移除关注关键字
/add_exclude <正则表达式> - 添加排除关键字
/remove_exclude <正则表达式> - 移除排除关键字

正确的结果是,

能将修改内容保存到配置文件


5. 放开user处理收到新消息的功能

在命令行打印调试信息

正确的结果是,

能收到新消息, 在命令行有打印


6. 验证关注关键字列表功能 以及 通知信息发送给指定user的功能

正确的结果是,

包含 关键字的消息 会给指定user发送通知.

不包含 关键字的消息 不会给指定user发送通知.


7. 验证通知信息发送给指定group的功能

正确的结果是,

包含 关键字的消息 会给指定group发送通知.


8. 验证通知信息发送给指定channel的功能

正确的结果是,

包含 关键字的消息 会在指定channel内发送通知.


9. 验证排除关键字列表功能

正确的结果是,

包含 关注关键字, 并且 包含 排除关键字的消息 不会发送通知.

包含 关注关键字, 并且 不包含 排除关键字的消息 会发送通知.


10. 验证屏蔽来源功能

正确的结果是,

在一般来源中收到 包含 关注关键字 的消息, 会发送通知.

在屏蔽来源中收到 包含 关注关键字 的消息, 不会发送通知.


11. 放开bot判断命令来源的功能, 验证功能

正确的结果是,

从合法的命令来源发消息, bot给出回应.

否则bot回应 没有使用权限.


基本功能就这样了.

还有一些自以为是的优化, 就不在这里啰嗦了.

已上传github

https://github.com/crazypeace/tg-keyword-monitor-bot


实际效果

https://t.me/FuckGFWNewbieNeedHelp


搭建教程随后就到, 可以关注我的博客. :)

https://zelikk.blogspot.com/p/icdyct.html


评论

The Hot3 in Last 30 Days

Mihomo (Clash-meta) 择优录取 url-test 自动选择能用的端口和协议

Debian10 apt update问题 更新软件源 2025-8-11

Mihomo (Clash-meta) 故障转移 fallback 自动选择能用的端口