【Telegram机器人】今天教大家如何用编程语言制作电报机器人
今天只讲Python编程语言搭建电报机器人而已,至于用Google Script搭建的教程点击这里
至于如何搭建telegram机器人请参考这篇文章的步骤一
Python
步骤一
先到python官网安装python环境,在安装是记得吧PATH打开如图 接着安装Telepot:在电脑的终端(cmd)输入以下代码1 | pip install telepot |
步骤二(可以跳过)
安装Python ILDE,如`PyCharm` `Visual Studio Code` `Sublime Text`等步骤三
1.1 测试你的bot账户
你可以在python中输入如下语句来获取你的bot信息:1
2
3
4>>> import telepot #将telepot这个模组导入到Python中来
>>> bot = telepot.Bot('***** Your Token *****') #将bot这个在程序中使用的variable和你的bot token联系起来,在之后的程序中,每当要命令bot的时候可以直接call bot的instance
>>> bot.getMe() #getMe()是一个获取bot信息的function
{'first_name': 'Jean', 'username': 'MonsieurMadeleine', 'id': 24601} #在这里你的bot的信息将以一个dictionary的形式被print出来
1.2 接收消息
设计上,telegram bot是无法主动向用户发送消息的(主要的目的是防止spam),所以你需要主动地通过指令以获取用户的信息:
1 | >>> from pprint import pprint |
pprint 指pretty print,是python自带的一个可以让打印出来的dictionary更美观的一个function
getUpdates()是telegram中获取Update的方法,依据Telegram API,getUpdate会return一个以Update object组成的array。在python中,Update object是以dictionary的形式被表现出来的。
每当有用户向你的bot发送一条消息/图片/指令的时候,你都可以通过getUpdate()的方式来获取这条消息。在这条消息中,message 的key包括chat(用户的名字,ID和聊天的种类(在telegram中,聊天的种类分为三种,private, group以及channel,我们更多地是handle private的信息)),date(消息发送的日期),from(发送者的信息),message_id(一个独特的,message_id可以specify某一条信息),而text就是用户所发送消息的文本。
但是每次都使用getUpdate()来获取消息就太麻烦了,这意味着你需要连续不断地敲击运行按钮才能获取新用户发送给bot的消息,在这里telepot提供了一个非常方便的解决办法.
1.3 持续地接受消息
在telepot中,MessageLoop是一个非常方便的处理信息的方式,如下:
1 | >>> from telepot.loop import MessageLoop #导入MessageLoop |
MessageLoop需要两个argument,一个是你已经specify token的’bot’,而另一个就是告诉MessageLoop如何处理信息的’method’(在这里我们将它命名为handle,你可以将此method改成任意名字,只要在定义的时候,method只接收一个argument,那就是’msg’)。
‘run_as_thread’在这里起到了,只要你启动了你的python file,那么这个MessageLoop就会永续不断地运行下去,除非遇到特殊情况(冲突或者恶性bug等等)
1.4 快速的Glance Message
telegram中的message作为一个json object,其中包含很多重要的而且可能会在一次Bot与用户的交互中多次使用的信息,而每次通过message对应的key来访问这些信息实在是有够麻烦,对此telepot提供了glance这一功能来快速获取message中的某些重要信息。
content_type, chat_type, chat_id = telepot.glance(msg)
在这条语句之后,telepot帮你快速查看了msg中的content type, chat type和chat id并且储存在了这三个variable中,在之后的代码里可以直接通过这些variable来访问相对应的信息。
Tip:glance的功能不限于只获取这三种信息(content type, chat type和chat id)而是所有在message中存在的legal key中的信息都可以获取。
1.5 向用户发送信息
在telepot中,向用户发送信息这一功能是通过bot.sendMessage() 这一function实现的,sendMessage() take in 两个arguments,一个是你希望发送的用户的chat_id,另一个是你希望发送消息的文本。bot.sendMessage(chat_id, text)
到这里你已经掌握了搭建一个bot的所有基本操作,让我们来尝试做一个非常简单的bot吧。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22import time
import telepot
from telepot.loop import MessageLoop
def handle(msg):
content_type, chat_type, chat_id = telepot.glance(msg)
print(content_type, chat_type, chat_id)
if msg['text'] == '/start':
bot.sendMessage(chat_id, '你好')
elif msg['text'] == '/test':
bot.sendMessage(chat_id, '回应测试')
TOKEN = 'Your Token'
bot = telepot.Bot(TOKEN)
MessageLoop(bot, handle).run_as_thread()
print ('Listening ...')
# Keep the program running.
while 1:
time.sleep(10)
记得把Your Token换成你机器人的token哦~
Inline Keybord
代码:
1 | import time |
效果:
有什么问题可以在评论区问我或者电报联系我
文章部分来自于知乎和谷歌
至于nodejs的就明天写吧!