使用Python构建Telegram机器人以生成随机引语
聊天机器人是用于进行在线聊天对话的软件应用程序,通过文本或文本转语音的方式实现客户服务的自动化。[聊天机器人]可以用于提醒、预约等事情,也可以在社交媒体平台上使用。
在本教程中,我们将建立一个简单的Telegram机器人,使用Python每隔一段时间向Telegram组发送自动编程报价。
[Telegram]是一个[免费的、开源的]、跨平台的、基于云的即时通讯(IM)软件。它提供视频通话和文件共享等功能。
前提条件
要跟上本教程,你需要在你的机器上安装Python 3,而且,对Python有一点了解将有助于读者更好地跟上。
设置机器人配置文件
要设置一个新的机器人,我们需要在使用它之前先注册我们的机器人。这样,我们就能得到访问Telegram API的令牌。
点击Telegram的搜索图标,然后,在搜索栏中输入@botfather
。
BotFather是Telegram创建的官方机器人,以方便创建机器人。
在Telegram中创建Bot father
现在,点击开始按钮,开始对话。你应该得到以下界面。
开始与Bot father的对话
输入/start
来开始。
接下来,我们通过运行/newbot
命令来创建这个机器人。
创建新的机器人
接下来,我们为机器人输入我们喜欢的名字和用户名。
选择机器人名称
现在,我们复制我们的访问令牌并将其保存在某个地方。记住要妥善保护访问令牌,因为它是你的机器人密码。
编码机器人
我们首先创建一个新的目录,并导航到它。
接下来,我们创建一个虚拟环境。
一个虚拟环境允许你在你的电脑上创建不同的空间,有不同的库和版本。
通过创建一个虚拟环境,你将能够为一个项目分开安装必要的库,而不需要全局安装它们。
现在,通过运行下面的命令创建一个虚拟环境env
。
python -m venv env
复制代码
创建后,用下面的命令激活虚拟环境。
source env/bin/activate
复制代码
接下来,我们需要创建一个Telegram组,并将我们的Bot添加为成员。
为机器人添加成员
接下来,我们需要获得聊天ID,我们可以通过在Telegram组中发送此命令来实现。
/my_id BOT_NAME
复制代码
之后,我们需要在浏览器中打开下面的URL,以获得我们的聊天ID。
https://api.telegram.org/botBOT_TOKEN/getUpdates
BOT_TOKEN = the token we copied earlier
复制代码
这将返回一个JSON响应,类似于一个包含我们聊天ID的python字典。
包含聊天ID的JSON
现在,我们创建一个名为bot.py
的新的python文件,并在其中添加以下几行代码。
import requests
import time
# list of quotes
quotes = [
'First, solve the problem. Then, write the code. – John Johnson',
'Experience is the name everyone gives to their mistakes. – Oscar Wilde',
'Code is like humor. When you have to explain it, it’s bad. – Cory House',
'Before software can be reusable it first has to be usable. – Ralph Johnson',
'Optimism is an occupational hazard of programming: feedback is the treatment. - Kent Beck'
]
# loop through the quotes
for quote in quotes:
url = 'https://api.telegram.org/bot1848805395:AAHaacRzz3vDJ8vrQqVZ4vMPTqY1OBOQ12Q/sendMessage?chat_id=CHAT_ID&text="{}"'.format(quote)
requests.get(url)
# sends new quotes every 20seconds
time.sleep(20)
复制代码
在测试机器人之前,我们需要使用以下代码安装请求模块。
pip install requests
复制代码
现在,让我们通过在终端运行我们的Python文件来测试我们的机器人。
python bot.py
复制代码
每20秒打印一个报价
好哇,它成功了!
让我们通过连接一个为我们提供随机编程报价的API,使我们的机器人更加有趣。
我们将使用这个API,以及/random
端点来获取随机报价。
接下来,我们需要在文件的顶部添加以下几行代码
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import json
复制代码
现在,让我们创建一个发送随机报价的函数,添加以下几行代码。
telegram_bot_token = "TOKEN"
updater = Updater(token=telegram_bot_token, use_context=True)
dispatcher = updater.dispatcher
def random(update, context):
# fetch data from the api
response = requests.get('http://quotes.stormconsultancy.co.uk/random.json')
data = response.json()
# send message
context.bot.send_message(chat_id=update.effective_chat.id, text=data['quote'])
# linking the /random command with the function random()
quotes_handler = CommandHandler('random', random)
dispatcher.add_handler(quotes_handler)
复制代码
现在,让我们运行该文件,在我们的Telegram组中输入/random
。我们的机器人应该用一个随机的报价来回应。
使用API获取随机报价的机器人
结语
最后,我们已经了解了如何为群组建立Telegram机器人。
你仍然可以用Telegram机器人实现很多东西,比如将你的机器人连接到其他API,并将它们托管在[Heroku]这样的平台上,使你的机器人24/7可用。