之前一直想玩一下 Telegram Bot,但是一直不知道写个啥好玩。突然又一次在群里聊天发现,写一个自动在多个平台发状态的 Bot 应该很好玩。
比如豆豆每次发票圈都是要在微信上和QQ空间上发两遍一模一样的。如果使用 Bot 的话只需要在 Bot 的地方发一次,然后让 Bot 转发到其他平台就好了。
所以最近就开始写了。现在写完了转发到 Telegram Channel 和 Facebook 的功能。
学习一下 Telegram Bot
看到官方的文档十分丰富,感觉是相当专业的一个 Bot 系统,所以对开发来说应该是很友好的。又看了看 Python 的 telegram-bot 的包,封装的也是比较完善了,使用起来很方便。
比较容易就写了几个命令,比如获取随机的笑话,获取最新的新闻之类的。(都用了现成的 api)
Markdown
在写获取新闻的时候,因为得到的数据是 dict 类型,想方便输出有格式的文本(比如加粗,链接之类的)。 发现 Telegram Bot 对这个方面有原生的支持,感觉很好。
Link Preview
由于 Telegram 会自动预览一些链接的内容,并提取摘要。这就使得和我刚刚做的格式文本有些重复。结果发现,官方也对这个地方有非常人性化的设计,可以手动关闭链接预览。
Inline Button
觉得官方的 Bot Father 里面的 Inline Button 非常酷,可以列出可点击的菜单。
所以自己也想搞一下,做一个可以通过点击 Inline Button 选择信息源的 /news
命令。这个弄了很久,因为刚开始的时候对回调机制有些误解。
最后通过在 dispatcher 里面添加一个 Callback Handler,来处理点击 Button 之后传入 CallbackQuery 的参数,实现了之前的想法。
开工
之后就比较简单地可以开始写真正想要写地东西了。
Telegram Channel
这个里面比较简单,由于都在 Telegram 里面,所以文件,语音,图片之类地都能很方便地同步发送过去。 但是由于还是需要在其他平台下面传,所以自己做了一个下载文件和消息信息的功能,把当前的消息保存到本地,方便之后其他平台的发送。
用了 Python 上的 facebook的包,可以方便地请求 GraphQL。Facebook 对开发者也十分友好,不需要什么门槛就能申请到用于开发用的 appid。可以把短期的登陆 Token 转化成 长期的 Token,有效期会更久一点。
未完成
Facebook 的转发多个消息的连续转发
Post 成功之后禁用Inline Button,避免误触连续转发。TwitterQQ 空间和微信朋友圈是做不成了。