利用telegram bot 观察网红在线卖萌

Author Avatar
yiheng 2018年07月05日
  • 在其它设备中阅读本文章

效果图

Snipaste_2018-07-05_21-50-09.png

当按下转发到频道按钮后,bot 会自动将信息转发到设定的频道, 并修改消息内容, 呈现按下按钮的人
Snipaste_2018-07-05_21-53-00.png

分析

要达成以上效果, 首先需要一个 bot 和一个用户监听群组消息
还得把消息转发到 bot 能看到的地方, 以让 bot 可以一键转发到频道
当 user 监听到消息之后 为了向用户呈现那些信息 需要把以下信息传给 bot

  • 保存下来的群组 id 及消息 id
  • 原消息内容与 id
  • 群组信息 (群组名, 群组 id, 群组 username, 是否为公开群组等)
  • 询问用户是否转发到频道的那条消息的 id

然后 bot 处理这些消息要做如下消息

  • 保存一些数据到数据库
  • 询问用户是否转发到频道

当用户按下转发到频道按钮后,bot 要做的事

  • 转发消息
  • 修改 询问用户是否转发到频道的消息 的内容

由于用户按下按钮后,bot 只能知道按下按钮的用户信息和消息 id, 所以就要从数据库中检索, 找到原消息 id(从保存消息的地方), 并检索出原消息所在群组的 username 和名字

更多

一个用户当然无法观察一个人所有的群, 所以可以 监听和处理消息分开, 让多个用户监听消息而由服务端处理

我的实现

分析了这些, 实现起来就容易了
由于我最熟悉的语言是 java, 但找不到 java 好用的 userbot api, 我就用了 python 监听, 监听到消息后发一个 http post 请求到 java 服务端, 这样以后想实现 更多 中的功能也更方便
github
需要的可以自己部署, 至于我那一行注释都没写的可读性那么差的代码...
有什么建议可以在下方评论区及 telegram 告诉我

说明

python 文件夹下的是监听端, 需要先补全data.py下的一些设置及utils.py下的 Tomcat 地址
java 文件夹下的是服务端, 需要修改src/BotProperties.java下的一些设置和src/hibernate.cfg.xml下的数据库设置
修改好了之后用 IDEA 编译
Snipaste_2018-07-05_23-09-16.png

Snipaste_2018-07-05_23-09-27.png

会在out/artifacts/tg_observer_war下出现一个 war 包, 放到 Tomcat 8.x 的webapps下, 启动 Tomcat 即可运行
正常情况下hibernate会自动创建数据表

感谢

监听端借鉴了这里借鉴了 这个项目 的一些代码, 在此表示感谢
感谢实验过程中提出建议的人们
感谢 最可爱的 MoeKa提供了一台 vps 运行处理消息的应用 Java 吃内存真不是盖的

注意

使用本方法, 请先询问被观察用户的意见, 否则可能会让对方不舒服