使用Telebot库第1部分在python中编写电报bot

注意, 文章第二部分已经出版 ,我建议阅读



抒情离题


如今,机器人是用于商务和娱乐的多功能工具。 我个人认为,未来与他们同在。 当然,阅读本文后,您将无法创建大型项目,但是要引起兴趣并开始就可以了。

安装与设定


首先,让我们下载python本身。 您可以在官方网站上进行此操作。 不要忘记在安装过程中检查添加到PATH! 安装python之后,我们需要一个好的代码编辑器。 JetBrains提供免费的PyCharm进行救援。 我们很接近,仍然需要下载远程机器人库。 为此,请转到命令行并输入:

pip install pytelegrambotapi 

如果一切顺利,我们可以继续!

虚拟专用网


我想每个人都知道俄罗斯的电报封锁,而且一如既往,唯一的解决方案是vpn。 就个人而言,我建议使用Windscribe 他们给你2 GB。 交通完全免费!

Bot父亲


在搜索电报时,我们找到了Bot Farher,并使用/ newbot命令创建了我们的机器人。 然后输入名称和用户名。 请注意,用户名必须以bot结尾!

图片

如您所见,我们获得了一个特殊的api令牌,您可以使用它来控制您的机器人(在我的情况下,它是: 776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM )。 您可以记住您的令牌,但我建议您记下它。

代号


所有人都在等待的时刻到了。 打开PyCharm并创建一个新项目。

图片

在这里,我建议将所有内容都归我所有(名称可以更改)。 创建项目后,让我们创建一个文件,其中将包含我们的代码。 右键单击项目所在的文件夹,然后单击新建→Python文件。 好的,让我们开始编写代码。 使用以下命令导入远程机器人库:

 import telebot 

现在,您需要创建bot变量。 实际上,变量名可以是任何东西,但是我习惯于编写bot。

 bot = telebot.TeleBot(' ') 

我们将编写机器人 .message_handler()装饰器,我们的机器人将使用它来响应/ start命令。 为此,我们在括号中写命令= ['start']。 结果,我们应该得到以下信息:

 @bot.message_handler(commands=['start']) 

如果您尝试启动您的漫游器(人民币->运行),那么您将无法使用。 首先,在代码末尾,我们需要编写bot.polling()。 这是必要的,这样机器人就不会立即关闭,而是可以工作并检查服务器上是否有新消息。 其次,我们的机器人即使检查消息,也仍然无法回答任何问题。 现在该修复它了! 装饰器之后,我们创建start_message函数,该函数将使用message参数(该函数的名称可以是任何东西)。 接下来,让我们实现从机器人本身发送消息。 在函数中,我们编写bot.send_message(message.chat.id,“您好,您给我写了/开始”)。 看看您应该得到什么:

 import telebot bot = telebot.TeleBot('776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM') @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, ',    /start') bot.polling() 

让我们检查一下...

图片

太好了,我们的机器人可以工作了! 这样他不仅可以回答命令,还可以回答消息,创建一个新的装饰器bot .message_handler(),并在括号中编写content_types = ['text']。 通常,内容类型很多,例如位置,照片,音频,标签等。 但是我们需要回复文本,对不对? 因此,我们创建了一个带有message参数的send_text函数。 在函数中,我们编写条件:

 @bot.message_handler(content_types=['text']) def send_text(message): if message.text == '': bot.send_message(message.chat.id, ',  ') elif message.text == '': bot.send_message(message.chat.id, ', ') 

如果消息文本为“ Hello”,则机器人将回答“您好,我的创建者”;如果消息文本为“ Bye”,则机器人将回答“再见创建者”。 在这里,我认为一切都清楚了。 但是您最想知道的是,如果用户输入“ hello”或“ Hi”,在这种情况下您应该怎么做? 一切都非常简单! 在这种情况下,在message.text之后编写函数.lower(),然后在文本中将所有大写字母替换为小写字母。 现在,我们的机器人不仅会响应“ hello”,还会响应“ PrivT”,甚至是“ PRIVET”。

图片

这是您应该得到的:

 import telebot bot = telebot.TeleBot('776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM') @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, ',    /start') @bot.message_handler(content_types=['text']) def send_text(message): if message.text.lower() == '': bot.send_message(message.chat.id, ',  ') elif message.text.lower() == '': bot.send_message(message.chat.id, ', ') bot.polling() 

好吧,我们弄清楚了文本,但是例如如何发送标签? 一切都很简单! 每个贴纸都有自己的ID,知道此ID后,我们就可以发送它了。 有两种获取标签ID的方法。 第一个(简单)-通过特殊机器人“贴纸ID是什么?”

图片

好吧,第二种方式,对于那些不寻求简单方法的人。 我们创建一个新的bot .message_handler()装饰器,仅在括号中写入content_types = ['sticker']。 然后一切照常。 我们创建了一个使用message参数的函数,但是在这里我们编写了print(消息)。 我们启动机器人。



看,一旦我发送了贴纸,它将立即在控制台中显示信息,并且最后将是我们的贴纸ID(file_id)。 让我们确保当用户向漫游器发送“我爱你”时,漫游器会回复一个贴纸。 无需创建新的装饰器,我们只需添加之前的条件即可。 但是,我们使用bot.send_sticker()代替bot.send_message(),而不是文本,而是使用贴纸的ID。

图片

恭喜,一切顺利! 我正在考虑如何发送音频,照片和地理位置,您可以自己解决。 我想向您展示如何制作一个键盘,让机器人在启动时向您显示。 这将使其更加困难。 我们创建keyboard1变量,在其中写入telebot.types.ReplyKeyboardMarkup()。 此功能调出键盘。 接下来,创建行,但请记住最多不能超过12行! 为了创建它们,编写keyboard1.row()。 在括号中,写下您想要的任何内容;我个人将写下“ Hello”和“ Bye”。 现在,要调用键盘,让我们在启动时将message_markup = keyboard1添加到发送消息的功能中。 这是您应该得到的:

 keyboard1 = telebot.types.ReplyKeyboardMarkup() keyboard1.row('', '') @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, ',    /start', reply_markup=keyboard1) 

我们启动机器人...



您会看到键盘很大。 要解决此问题,您只需要在ReplyKeyboardMarkup()中注册True。 好吧,如果您希望键盘在用户单击时立即隐藏,请编写另一个True。 您可以在官方文档中详细了解这些True的含义。

 keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True) 

好,仅此而已! 当然,这并不是电报中所有可能的漫游器,但我向您展示了其主要功能。 谢谢您的关注。

源代码:

 import telebot bot = telebot.TeleBot('< >') keyboard1 = telebot.types.ReplyKeyboardMarkup() keyboard1.row('', '') @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, ',    /start', reply_markup=keyboard1) @bot.message_handler(content_types=['text']) def send_text(message): if message.text.lower() == '': bot.send_message(message.chat.id, ',  ') elif message.text.lower() == '': bot.send_message(message.chat.id, ', ') elif message.text.lower() == '  ': bot.send_sticker(message.chat.id, 'CAADAgADZgkAAnlc4gmfCor5YbYYRAI') @bot.message_handler(content_types=['sticker']) def sticker_id(message): print(message) bot.polling() 


如果您有任何疑问,可以写电报dimagorovtsov

Source: https://habr.com/ru/post/zh-CN448310/


All Articles