当你的博客收到了一条评论的时候,想要回复,应该怎么做呢?打开浏览器,打开后台,等待加载,回复……哦对了,我还有一个步骤,就是不在家的话还得开一个全局代理。
这怎么行,我都要懒死了。生气??
没错的,历经1958天,我的博客被DNS污染啦。
历经1958天,我的博客 https://t.co/i4JKV5qWHy 终于受到了党国最高的照顾,正式成为了被DNS污染的一员。 pic.twitter.com/nrwDhqfSuA
— Benny (@BennyThinks) January 7, 2020
假如能够用telegram bot完成这种回复操作就好了!那么是当然的了。
原理
Basic Auth
插件会为WordPress开启Basic Auth,因此要用复杂的密码,非常复杂的那种,并且https哦!
WordPress Hook
WordPress博客在新添加一条评论的时候,会触发N多钩子,其中有一个钩子叫comment_post,这个钩子被触发后,就会给调用并给相应的回调函数三个参数$comment_ID, $comment_approved, $comment_obj
。$comment_obj
就是评论者留下的信息了,大概是如下结构的数组
根据post_id comment_id等,使用WordPress自带的函数就能生成完整的评论信息。
之后调用Telegram bot的REST API,就可以发送消息给用户了。
Telegram
当回复机器人消息时,会直接向WordPress的REST API发起评论添加请求。当然啦,你注意到了机器人消息里的id:123,456了吗?这个就是小小的标识符哦。
这个是用golang实现的机器人,轮询模式。其实我知道这个是可以用Telegram webhook完成的,直接写在插件里用PHP实现。更进一步,可以做到不开启Basic Auth,直接用WordPress的接口甚至是直接插入数据库。不过为了练习嘛……
使用方式
基本可以如下归纳
- 安装插件
- 创建bot、获取自己的user id
- 插件中添加相应的设置
- 编辑配置,并运行bot后端
- 可以了。
注意事项
服务器在国内
WordPress的服务器上,想办法开个代理(目前只支持http代理),然后插件设置里加入配置信息;
Telegram的服务器上,也想办法开个代理,然后设置这样两条环境变量
export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;
或者干脆上proxychains试试。
Basic Auth
Basic Auth就是在HTTP请求头里加上base64编码之后的认证信息。优点是简单方便,易于实现,缺点很多。
但是有一点是肯定的,在www这个层面上,不走TLS的登录,都是耍流氓。
全程TLS,啥都看不到。
未TLS,底裤?都看光了
机器人配置与命令行参数
{ "username": "admin", "password": "admin", "url": "http://localhost/", "token": "907J6Tw", "uid": "23231321", "admin": 1, "tail": "本评论由Telegram Bot回复~❤️" }
-c指定配置文件路径,默认使用当前目录下的config.json
-f强制运行,哪怕是http的……
-c file set configuration file (default "config.json") -f force to run even on http sites. -h this help -v show version and exit
适配其他博客程序
其实没啥好适配的……因为基本上要重写的。
只要能够找到相应的hook,在评论之后触发一个事件,那么就可以了。???
开源地址
开源地址为了更好的偷懒,付出成倍的精力?
————zuiyu
然后就这么水了一波?????
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️