光阴冢

We make choices and life has a way of making us pay for them.

Post Bot

Sep 8, 2017   # Code  # Recording  # Flip Flop 

之前一直想玩一下 Telegram Bot,但是一直不知道写个啥好玩。突然又一次在群里聊天发现,写一个自动在多个平台发状态的 Bot 应该很好玩。

比如豆豆每次发票圈都是要在微信上和QQ空间上发两遍一模一样的。如果使用 Bot 的话只需要在 Bot 的地方发一次,然后让 Bot 转发到其他平台就好了。

所以最近就开始写了。现在写完了转发到 Telegram Channel 和 Facebook 的功能。

学习一下 Telegram Bot

看到官方的文档十分丰富,感觉是相当专业的一个 Bot 系统,所以对开发来说应该是很友好的。又看了看 Python 的 telegram-bot 的包,封装的也是比较完善了,使用起来很方便。

比较容易就写了几个命令,比如获取随机的笑话,获取最新的新闻之类的。(都用了现成的 api)

Markdown

在写获取新闻的时候,因为得到的数据是 dict 类型,想方便输出有格式的文本(比如加粗,链接之类的)。 发现 Telegram Bot 对这个方面有原生的支持,感觉很好。

由于 Telegram 会自动预览一些链接的内容,并提取摘要。这就使得和我刚刚做的格式文本有些重复。结果发现,官方也对这个地方有非常人性化的设计,可以手动关闭链接预览。

Inline Button

觉得官方的 Bot Father 里面的 Inline Button 非常酷,可以列出可点击的菜单。

Bot Father

所以自己也想搞一下,做一个可以通过点击 Inline Button 选择信息源的 /news 命令。这个弄了很久,因为刚开始的时候对回调机制有些误解。

最后通过在 dispatcher 里面添加一个 Callback Handler,来处理点击 Button 之后传入 CallbackQuery 的参数,实现了之前的想法。

Inline Button

News

开工

之后就比较简单地可以开始写真正想要写地东西了。

Telegram Channel

这个里面比较简单,由于都在 Telegram 里面,所以文件,语音,图片之类地都能很方便地同步发送过去。 但是由于还是需要在其他平台下面传,所以自己做了一个下载文件和消息信息的功能,把当前的消息保存到本地,方便之后其他平台的发送。

Facebook

用了 Python 上的 facebook的包,可以方便地请求 GraphQL。Facebook 对开发者也十分友好,不需要什么门槛就能申请到用于开发用的 appid。可以把短期的登陆 Token 转化成 长期的 Token,有效期会更久一点。

实现

酱… Post Bot

未完成

  1. Facebook 的转发

  2. 多个消息的连续转发

  3. Post 成功之后禁用Inline Button,避免误触连续转发。

  4. Twitter

  5. QQ 空间和微信朋友圈是做不成了。