目录

Telegram关键词自动回复机器人

前言

高中时期了解了telegram,大学期间正式开始使用。自己的频道最多的时候有上万人关注,聊天群组里人数也很多,但是时间久了我发现了一个问题。因为telegram在国内并不常用,新加入的成员往往都是新手,通常会问一些琐碎的、相似的问题,例如:如何汉化tg、+86号码无法私聊别人,等等相关的问题是在不想重复回答,便产生了制作一个关键词回复机器人的想法。

功能

下面简单说一下机器人实现的一些功能,具体还是推荐你亲身进行体验。

  • 首先为了满足最初的需求,机器人需要能够对特定关键词回复特定的文字内容。
  • 为了能够更加灵活的匹配关键词,针对关键词识别增加了正则匹配方式的关键词识别方法,可以让用户能够编写更加灵活的关键词规则。
  • 为了满足更加更多种类的回复内容,回复种类除了文字还增加了照片、动图、视频、文件、表情、Marddown等其他的回复种类,并且允许给图片、文件等添加描述信息。
  • 为了满足部分群组的多样化回复需求,回复方式增加了 多个回复消息混合、多个回复类型混合、回复内容随机选择 等复杂但灵活的规则配置方式。
  • 为了能够实现部分群管功能,回复类型增加了群管操作,包括 消息删除、消息置顶、人员禁言、人员踢出等功能,只需要设置相应的关键词回复规则即可。
  • 除了关键词功能外,我还给机器人增加了群管命令、获取用户id信息、禁言游戏、加群欢迎、退群送别、一键呼叫所有管理员等功能。

下面我将演示一些基本的功能配置和使用方法。

使用示例

关键词规则的使用
添加规则使用 /add 关键词===回复内容
删除规则使用 /del 关键词
查看规则在群组里使用 /list

回复文本内容

1
/add 汉化===tg支持语言包功能,点击【链接】即可修改为中文。

添加这条规则之后,机器人就会对每一条包含有“汉化”关键词的消息回复“tg支持语言包功能,点击【链接】即可修改为中文。”这个特定内容。

回复文字支持markdown语法,添加前缀 md:: 即可使用

1
/add testmd===md::加粗**bold**

回复图片

1
/add 关键词===photo::图片链接

图片链接需要时互联网上tg服务器可以访问到的图片,可以是tg上公开群组或者频道的图片消息链接或者互联网上任意图片资源链接

例如:

1
2
3
/add 小白兔===photo::https://img.cdn.com/tupian.jpg

/add 小可爱===photo::https://t.me/peekfun/1000

回复动图\视频\文件

机器人除了回复图片外,还支持回复动图、视频、文件,如果你已经学会了回复图片,那这些种类也没有问题。

  • 动图 /add 关键词===gif::动图链接
  • 视频 /add 关键词===video::视频链接
  • 文件 /add 关键词===file::文件链接

需要注意的是,各种链接要么是tg上公开群组或者频道的链接(私有群组不行),要么是互联网上的资源链接,注意链接需要与发送的种类对应好。

图片\文件添加文字

在手动发送图片等的时候我们可以添加描述信息,机器人回复规则也可以。

1
2
3
4
5
6
7
为了便于理解,添加了缩进和换行,添加规则的时候不要缩进和换行

/add 关键词===photo::图片链接::描述文字

/add 小白兔===
            photo::https://img.cdn.com/tupian.jpg  ::
            这里是描述文字,例如原来你也喜欢小白兔呀

文件的使用也是类似,就不再重复

注意:图片和文件的介绍文字默认开启markdown语法

正则表达式进行匹配

现在你已经会使用关键词来回复特定内容了,但是为了更加灵活的回复,而不是令机器人看起来傻乎乎的
事实上机器人聪明与否完全看你设置的关键词规则是否灵活,你需要学习简单的正则表达式并且利用正则来进行匹配。

使用正则匹配非常简单,只需要将原来的关键词替换为 re:正则规则 即可。

1
/add re:(如何|怎样).*(激活|使用)===请查看这个说明

在这个例子里面,使用了正则表达式进行了匹配,此时用户发送 “有谁知道怎样进行账号的激活吗?”也可以匹配上,这大大提高了规则的灵活性。

需要说明的是,机器人的所有关键词使用方法均支持正则,你可以随意进行尝试。

一次回复多条消息

有些时候一条消息无法满足回复的需求,需要机器人同时返回多个消息,这也是支持的。

你只需要用 || 将多个回复内容间隔开就可以了。

1
/add 关键词===回复文字1||回复文字2||回复文字3

不同种类的回复内容也可以混合在一起,请随意混搭

1
2
3
4
5
6
7
为了便于理解,添加了缩进和换行,添加规则的时候不要缩进和换行
/add 关键词===
            请欣赏  ||
            photo::图片链接  ||
            video::视频链接  ||
            如果需要更多内容,你可以下载软件  ||
            file::文件链接

回复随机消息

有一个群组提出了这样一个特定需求,想要从设置好的回复内容中随机回复一个,这也是支持的。

使用方法:
random{回复内容1$$回复内容2$$回复内容3},使用两个英文的$符号间隔。

1
2
3
4
5
6
7
为了便于理解,添加了缩进和换行,添加规则的时候不要缩进和换行
/add 关键词===
            random::{
                一条消息  $$
                photo::PHOTO_URL  $$
                另一条消息
            }

在这个关键词规则里,机器人将自动从三条消息中选择一个发出。

你可以结合上面一个使用方法,让规则更加灵活

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
为了便于理解,添加了缩进和换行,添加规则的时候不要缩进和换行
/add 小白兔===
            你也喜欢小白兔呀,送你一张小白兔的照片  ||
            random::{
                photo::照片链接1 $$
                photo::照片链接2 $$
                photo::照片链接3
            }  ||
            如果喜欢可以下载软件获取更多图片  ||
            file::文件的链接

自动删除消息

大多数时候我们需要屏蔽一些关键词,防止用户讨论相关内容,比如说政治、色情、黑产等内容。
机器人既然可以识别关键词,就可以进行相关消息删除操作,你需要给机器人删除消息的管理员权限。

1
/add 日站===delete

这样机器人就会将含有 日站 二字的消息自动删除,起到屏蔽的作用,你可以使用正则进行更加灵活的匹配。

直接删除可能不太友好,你可以结合前面的内容进行优化,比如结合多个回复内容进行添加提示语。

1
/add 日站===本群禁止讨论黑产相关内容||delete

这样的规则机器人就会先回复“本群禁止讨论黑产相关内容”,然后再进行删除。

注意:delete一定要放在最后,否则回复消息发送不出来。

自动禁言\踢人

只删除还不过瘾,有人刷消息?禁言和踢人同样支持。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
禁言
/add keyword===ban
会自动禁言发送keyword的用户 永久

禁言特定时长
/add keyword===ban::3d6h20m36s
会自动禁言发送keyword的用户 3天6个小时20分钟36s
时长信息4个时间单位不必全部写满,时长换算成秒如果低于30s意味着永久禁言,多于1年也是永久禁言

踢人
/add 日站===kick

你还是可以结合上面的内容进行优化,因为delete、ban、kick也是回复种类之一,所以跟文字、照片、视频、文件等的使用方法相同,也就可以进行组合。

屏蔽特定后缀文件

有人发送exe\com\bat等后缀的病毒?不用再去找其他机器人了,使用自定义规则即可完成屏蔽和禁言。

1
/add re:(\.exe|\.scr|\.cpl|\.com|\.cmd|\.bat|\.vbs)$===ban

这样带有exe\src\cpl\com\cmd\bat\vbs等可执行后缀的文件就会被自动删除,相关发送者就会被禁言。

关键词功能可以根据每个群组添加的不同的关键词规则实现一些简单的回复或者更加复杂的操作,通过组合等方式来实现相应功能完全看你的规则,所以发挥你的脑洞吧。

进群欢迎和退群欢送

机器人可以设置欢迎和欢送文字

需要使用 /welcome/goodbye 命令分别开启

1
2
3
4
5
6
7
/welcome
开启后,可以设置内容
/setwelcometext 欢迎 $username 加入 $groupname 这个大家庭

/goodbye
开启后,可以设置内容
/setgoodbyetext $username离开了我们群

注意:加群欢迎和退群欢送文字默认开启markdown语法 使用 $userid 自动替换 用户id, $username 自动替换用户名 使用 $groupid 自动替换 群组id, $groupname 自动替换群组名

回复按钮

看样子很多人需要这个功能,就加上了

示例:

1
/add test===button::{"text": "测试按钮消息,支持_Markdown_","buttons": [[{"text":"百度","url":"https://baidu.com"},{"text":"谷歌","url":"https://google.com"},{"text":"拾取","url":"http://t.me/peekfun"}],[{"text":"百度","url":"https://baidu.com"},{"text":"谷歌","url":"https://google.com"}]]}

button::后面的json格式如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
    "text": "测试按钮消息,支持_Markdown_",   // 这里是回复的消息内容,支持markdown,群组名替换啥的
    "buttons": [ // 按钮列表
        // 第一行按钮
        [
            {"text":"百度","url":"https://baidu.com"},
            {"text":"谷歌","url":"https://google.com"},
            {"text":"拾取","url":"http://t.me/peekfun"}
        ],
        // 第二行按钮
        [
            {"text":"百度","url":"https://baidu.com"},
            {"text":"谷歌","url":"https://google.com"}
        ]
    ]
}

命令列表

  • help - 查看帮助
  • add - 添加规则
  • del - 删除规则
  • list - 列出规则
  • admin - 呼叫管理员
  • banme - 禁言小游戏
  • getid - 查看用户的信息 可回复查看别人
  • autoreply - 开关自动回复功能
  • autodelete - 开关自动删除消息功能
  • replyorder - 开关回复ban/kick命令功能
  • banmegame - 开关禁言小游戏功能
  • playorderban - 开关玩命令惩罚功能
  • banqingzhen - 开关防清真功能
  • calladmin - 开关呼叫管理员功能
  • welcome - 开关加群欢迎功能
  • goodbye - 开关离群送别功能
  • deletejoinmessage - 开关删除加群消息功能
  • servicelist - 查看机器人功能列表
  • deleteallrules - 清空本群所有关键词规则
  • deleteallmessage - 删除48小时内所有消息

开源

开源地址: https://github.com/zu1k/tg-keyword-reply-bot

赞助

这里要特别感谢 聪聪,是他赞助了服务器费用。
聪聪大佬是tg上 印象笔记群组 的创建者,他的群组和频道是tg上中文交流(不讨论政治、色情、黑产)的一个不错的地方,推荐刚刚开始使用tg的同学加入。
聪聪的群组 @yxbjx
聪聪的频道 @YinxiangBiji_News

如果你认为这个机器人为你管理群组提供了帮助,那么期待你的赞助,你的赞助可以帮助机器人运行更长时间,同时你的名字也会被记录到机器人开源页。

如何赞助

一共有两种方式可以给这个机器人提供赞助

  • 通过邮箱联系我,然后索要我的赞赏码或者其他收款方式

问题反馈

目前有效的反馈方式是github上的 Issue页面 ,目前仅支持闭源版本问题反馈,反馈时请一次性描述清楚,必要时请附加截图,这样有利于更好的解决问题。

如果是增加特定功能就不要反馈了,如有需求可以找我或别人定制特定的机器人。

后续工作

其实我已经退出tg大半年了,已经不太需要机器人了,目前全靠聪聪支持支撑

不过机器人后续开发不会停止,今年比较忙,等我闲下来给机器人做一个大版本更新

后续会将 匹配 和 动作 进行拆分,匹配将支持更加细致和灵活的方式,动作会进行增加,争取支持tg所有的消息类型和群组管理类型

还会增加网页控制后台,可以在网页后台查看群组统计信息,并对群组机器人规则进行设置