一个功能相对完善的Telegram群功能机器人 [Telegram Bot]

0x00 背景

1.由于管理着一个5K+人的Telegram电报群组,常常遇到很多推广广告机器人,大大影响群内交流氛围。

2.群内之前使用过其他的机器人,曾打开过@admin 群内呼叫管理功能,本来初心是希望群内有广告或不合适的内容群友通过这个呼叫管理员来删除广告踢出机器人的。结果打开之后变得一发不可收拾,所有进群的人都无缘无故的发送这个指令,甚至后来关闭机器人了群内也还是不停的有新人老人在刷这个指令。这就非常的头痛了。希望能有个删除关键字或者指令定时删除功能。

3.频道内容方面,需要有发送关键字随机回复内容的功能。比如发送 美女图片 就会随机产出一个美女图片(举例子哈)

1x00 功能介绍

具体功能其实不用过多介绍,这里列出一下机器人支持的命令,大家一目了然。

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

2x00 安装介绍

安装很简单,编辑config文件修改好机器人的token然后直接在linux服务器内运行二进制文件即可。

Github地址:https://github.com/88hack/tg-keyword-reply-bot

在项目里面下载后上传到linux服务器内。然后将tgbot程序执行权限给一下

chmod 777 ./tgbot

给权限之后 记得修改下config文件里的token

token在哪里获得?去telegram里问botfather就可以

token给了之后就可以执行了。

./tgbot

其实生产环境中不推荐这么运行,因为这样是运行在前台。

想要运行在后台可以使用我这个命令

nohup ./tgbot >/dev/null 2>&1 &

这样就可以不输出任何运行日志并安全的运行在后台了。

然后剩下的操作在telegram里私聊bot操作就可以了。

3x00 使用介绍

使用示例

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

回复文本内容

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

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

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

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

回复图片

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

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

例如:

/add 小白兔===photo::https://img.cdn.com/tupian.jpg /add 小可爱===photo::https://t.me/peekfun/1000

回复动图\视频\文件

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

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

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

图片\文件添加文字

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

为了便于理解,添加了缩进和换行,添加规则的时候不要缩进和换行 /add 关键词===photo::图片链接::描述文字 /add 小白兔=== photo::https://img.cdn.com/tupian.jpg :: 这里是描述文字,例如原来你也喜欢小白兔呀

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

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

正则表达式进行匹配

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

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

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

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

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

一次回复多条消息

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

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

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

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

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

回复随机消息

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

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

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

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

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

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

自动删除消息

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

/add 日站===delete

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

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

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

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

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

自动禁言\踢人

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

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

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

屏蔽特定后缀文件

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

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

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

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

进群欢迎和退群欢送

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

需要使用 

/welcome
/goodbye

命令分别开启

/welcome 开启后,可以设置内容 /setwelcometext 欢迎 $username 加入 $groupname 这个大家庭 /goodbye 开启后,可以设置内容 /setgoodbyetext $username离开了我们群

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

回复按钮

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

示例:

/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格式如下

{ "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"} ] ] }
2
0