
沙雕机器人入坑小记-初识TelegramBot
沙雕机器人入坑小记-初识TelegramBot
算了下自己大概已经1年多没上Telegram了,大概再不登录,账号就要被注销了,赶紧登了一波上去。顺便也给自己建了个群玩玩:
点击链接加入我的Tg群聊
不过Telegram是从来不会让我失望的,仍然是当年一样的简洁流畅,不过也仍然是得辛苦扶墙才能连上。如果你还不知道什么是Telegram,可以点这篇文章了解。
在看到隔壁群的时候,看到了好多有趣的机器人,于是乎抽空看了下相关的文档,略知一二后就动手尝试下吧!
01 / 申请机器人账号

顾名思义,上哪要机器人?当然是问机器人它老爹啦。BotFather 是 Telegram 官方的机器人,而它的作用就是分配和管理整个平台所有的机器人。
找到 Botfather 的方法很简单,浏览器访问:t.me/botfather 就可以自动激活与它的对话。当然我们也可以直接在 Telegram 的对话列表搜索它的名字来找到它。

点击开始,或者输入命令 /start 即可开始我们的操作。输入 /help 可以获得帮助。
在一切准备就绪后我们输入 /NewBot 命令,然后把我们想要的Bot名字告诉Botfather。
这里我尝试以 @MiaoMiaoMiaoBot(喵喵喵)的名字去申请。可惜系统提示我们 @miaomiaomiao_bot 的用户名已经被占用了。那就?

干脆就叫 @henghengheng_bot 吧,哼哼哼也挺好听的。
在收到系统发给我们的 congratulations 的时候,对话在下面同时还附给我们一串 http-api 而这一串 api 我们得把它保管好,不然别人就可以用你的机器人做出各种奇奇怪怪的事情了。
02 / 机器人设置
在完成申请后,为了让我们的 @哼哼哼 机器人看起来更可爱(沙雕),我在百度为它挑了一个萌萌哒的Logo。
哈哈是不是看起来蠢萌蠢萌的?

这还不够,我还要为他配上更蠢的介绍。
通过 BotFather 提供的交互式菜单,我们在 Botlist 里找到我们新注册的 bot 并选择 editbot(编辑机器人)按钮。
我们选择 Edit descriptions 来编辑机器人的介绍(个性签名),在 Edit about 的选项菜单里编辑机器人的关于页面。

忘了和大家说,这里有一个坑:
在我们把机器人的 logo 发给 Botfather 的时候,要特别注意下自己的发送方式。我们要确保是以图片的形式发送的,而不是以附件形式。Windows系统下直接用剪贴板粘贴图片就行了。

嘀嘀嘀,巴拉拉小魔仙变变变。
这时候刷新客户端,可以很快看到机器人的头像已经发生了改变了。
03 / 给机器人配置后端
在完成了上述的步骤后,虽然机器人看上去已经和正常人无异了,但是我们仅仅是注册了一个空的机器人而已。我们不论给机器人发送什么命令,机器人都不会说话。
因为:没有后端程序的支撑,这样的机器人是没有灵魂的。(手动滑稽)
接下来我们就来实现下机器人最简单的功能。我使用来自网络上的一段代码,使用了 python-telegram-bot 提供的 api 接口来实现一个自动回话的机器人
之所以选择 Python 是因为我的电脑之前已经安装过 python3 并配置过环境变量,应该可以少折腾一点。这里参考了网上教程的建议,安装了 virtualenv 虚拟环境,以便保证运行环境的纯净。

#安装代码:
pip install virtualenv
如果你之前没有安装pip,请先完成Windows环境下pip的安装,当然如果是linux就更方便了,直接yum install pip就行了。

#运行
. tgbot\scripts\activate
#来启动tgbot虚拟环境
当我们看到 powershell 的前面变为(tgbot)后,说明我们已经成功进入虚拟环境了。
在拥有 pip 后,我们可以很方便的用它来安装各种扩展,这里我们使用pip安装开发使用的 python-telegram-bot api接口
#运行
pip install python-telegram-bot

这时候我们在目录下新建一个 test.py 文件,粘贴代码
#代码coppy自网上看到一位大佬的,后来折腾久了忘了出处了
import logging
from time import sleep
import telegram
from telegram.error import NetworkError, Unauthorized
## 下方填入自己的TOKEN
bot = telegram.Bot('000000000000000000000000000000')
update_id = None
def main():
global update_id
try:
update_id = bot.get_updates()[0].update_id
except IndexError:
update_id = None
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
while True:
try:
echo(bot)
except NetworkError:
sleep(1)
except Unauthorized:
update_id += 1
def echo (bot):
global update_id
for update in bot.get_updates(offset=update_id, timeout=10):
update_id = update.update_id + 1
if update.message:
update.message.reply_text(update.message.text)
if __name__ == '__main__':
main()
保存文件后,执行 python test.py 即可体验效果。
7月27日补充:其实如果使用 pycharm 这样的 ied ,可以为我们省去 env 环境的部署的麻烦。我一开始也没想到直接用 pycharm 里面的虚拟环境。算是绕了一圈歪路。下面就补充下 pythcarm 的操作。

这里我们启动 pycharm ,启动时选择 new environment 。
当然为了在 pycharm 内使用我们要用到的 python-telegram-bot 这一套 api,我们还需要为 pycharm 安装包。

选择左上角的 file 点击 system settings ,选择 packages 然后单击 available packages ,在跳出来的弹窗搜索 python-telegram-bot 然后点击页面下方的install package即可。

安装包的同时,系统会自动为我们装上其他的依赖项。我们静静等待喝杯水就行。
在安装完成后,我们回到项目页面,在 tg 目录下新建一个 python file,起名就叫 test1.py 吧。然后只要简单的把代码粘进去,替换下自己的token就行。
一切就绪我们点击右上角运行时,控制台却爆出了一大串奇奇怪怪的错误。

啊,不要担心,只是因为我们的电脑因为各种你懂的原因无法访问 telegram 的服务器导致的。出现这种情况我们只需要学会正确的 扶墙方式 即可。
这里我给电脑配置了 socks5 的全局代理解决了这个问题,出于你懂的原因就不在这里说了。

哈哈,这里无视下我和机器人说的骚话。
到此为止,简单的回话功能就能正常使用了。
当然这个机器人是使用getupdates来实现的,更加高级的方法是使用webhooks。
04 / 使用他人开发好的机器人
这里简单介绍下,使用的是 Github 上 iovxw 的 rssbot 。执行下面的操作前,我们需要一台海外的 V*PS 。下面的命令需要在 Linux 系统下执行
wget https://github.com/iovxw/rssbot/releases/download/v1.4.4/rssbot-v1.4.4-linux.zip
unzip rssbot-v1.4.3-linux.zip
这里我们为了图方便,直接使用开发者预编译好的程序文件。我们只需要执行命令:
./rssbot 数据存储目录 apitoken
在完成操作后,我们可以直接在机器人聊天窗口输入下面的命令
/rss - 显示当前订阅的 RSS 列表,加 raw 参数显示链接
/sub - 订阅一个 RSS: /sub http://example.com/feed.xml
/unsub - 退订一个 RSS: /unsub http://example.com/feed.xml
/unsubthis - 使用此命令回复想要退订的 RSS 消息即可退订, 不支持 Channel
/export - 导出为 OPML
#举个例子如果我们要订阅 帆's life 也就是本站的 rss
#可以输入如下命令
/sub https://www.emptinessboy.com/feed/

完成订阅后,只要本站内容有更新时,rssbot 就会同步更新相关的内容。
TIPS:为了让 rssbot 更好的运行,我们需要使用 supervisor 来守护它。网上的教程大多数都是使用 nohup 或者 screen。但是我更推荐使用 supervisor。
Supervisor 具体的安装就不再阐述了,Google一下,你就知道。这里只列出 rssbot 在 supervisor 下的配置文件。
[program:rsssub]
command=/root/rssbot DATAFILE 你的apikey
autorestart=true
stdout_logfile=/root/supervisor/log/rsssub.out.log
redirect_stderr=true
user=root
Vim保存文件后,
- systemctl start supervisor.service
- supervisorctl start rsssub
到这里,我已经把我两天折腾下来的各种经历都写上来了,写的比较简单,还请各位dalao多多指教
最后大家可以加一下我的 Tg 群聊,欢迎各位喜欢 摄影 / 视频/ 代码 的朋友和我们一起在 Tg 群相遇。
适合新手参考