今天早上班上同学心血来潮,建了个tg班群,并有人拉了一个查课表的机器人进群。我觉得很好玩,所以研究了一下,收获很多!
Telegram官方有很清晰易懂的机器人文档,所以实现起来也并不复杂。
先放参考文档:
Telegram Bot 使用文档 - KainHuck - 博客园 (cnblogs.com)
Flask request和requests(客户端服务器)_flask requests-CSDN博客
Ubuntu上安装和配置Supervisor_ubuntu supervisor-CSDN博客
—————————————————————分割线——————————————————————
首先,Telegram有专门的Bot类型账号,并且官方说明使用真人账号做机器人可能被封禁。因此我们选择使用官方的Bot账号。
第一步是创建一个Bot账号,首先添加@BotFather,即官方的Bot创建账号。输入指令/newbot,然后输入机器人的昵称以及账号,最终得到一串Token(如下图),机器人的创建步骤结束。
第二步自然就是用官方提供的文档来进行程序编写了。如果不想看英文文档可以看我上面的参考文献第一条。在编写之前请确保你已经会编写HTTP请求程序。此处不过多介绍程序写法。值得一提的是telegram使用webhook(且必须https,后面会讲到)通知消息更新。为了方便我们使用Python+Flask实现,以下是一个简单的复读机机器人服务端程序(将<Token>修改为刚才获得的机器人Token):
import json, requests
from flask import Flask, request
app = Flask(__name__)
API_URL = 'https://api.telegram.org/bot<Token>'
def sendMessage(chat_id, text):
requests.get(f'{API_URL}/sendMessage', params={
'char_id': chat_id,
'text': text
})
@app.route("/webhook/event", methods=['POST'])
def event():
data = request.json
text = "我现在只能读文字噢"
if 'text' in data['message']:
text = data['message']['text']
sendMessage(str(data['message']['chat']['id']), text)
return json.dumps(data)
if __name__ == '__main__':
app.run(port=8443)
在编写完成之后就是云服务器部署环节。此处演示在Ubuntu系统下的部署步骤(Windows显然会更加简单)
1.安装Python3
首先更新软件包列表:
sudo apt update
安装Python3:
sudo apt install python3
检查是否安装成功:
python3 --version
2.安装依赖库
上面的示例程序仅使用了Flask以及requests,如果你在编写过程中使用了其他库也应该一并安装。
首先安装pip:
sudo apt-get install python3-pip
检查是否成功安装:
pip --version
安装Flask:
pip install Flask
安装requests:
pip install requests
3.配置反向代理及https
由于Telegram强制使用https访问webhook,这里采用反向代理+ssl的方式实现。新建网站反向代理127.0.0.1:8443,再配置证书,此处不做演示。
4.配置进程守护
安装Supervisor
sudo apt install supervisor
检查状态:
sudo systemctl status supervisor
然后将server.py程序上传至服务器任意目录。
由于我使用1panel,可以直接在面板出添加supervisor守护进程,目录填写绝对路径,启动命令填写python3 server.py
点击右方日志查看进程日志,查看是否正常启动运行:
出现Flask字样即为正常启动。
随后就可以打开tg给机器人发消息测试啦。其他功能可以参照官方文档编写噢!