使用Telebot库第2部分在Python中编写电报Bot

大家好! 这是本文的第二部分,我将在其中花费时间来发送电报请求和服务器。 如果其他人没有看过第一部分,则建议阅读 。 第三部分最有可能描述如何使用数据库。 好吧,如果您再次有疑问,请通过电报给我: dimagorovtsov

什么是讯息?


可能有很多在我上一篇文章中写过bot的人问什么是消息,为什么要发送消息,例如,我们需要在send_message函数参数中指定message.chat.id? 为了找出答案,让我们在控制台中显示消息:

@bot.message_handler(commands=['start']) def start(message): print(message) 

现在,当我们输入/ start命令时,我们的机器人会发送大量信息。 我们现在得到的只是一个json响应。 Json是一种用于存储结构化数据的简单格式。 一切都以以下格式显示:'key':value。 让我们看看我得到了什么:

 { 'content_type':'text', 'message_id':573, 'from_user':{ 'id':687595402, 'is_bot':False, 'first_name':'Dmitry', 'username':'dimagorovtsov', 'last_name':'Gorovtsov', 'language_code':'ru' }, 'date':1565206363, 'chat':{ 'type':'private', 'last_name':'Gorovtsov', 'first_name':'Dmitry', 'username':'dimagorovtsov', 'id':687595402, 'title':None, 'all_members_are_administrators':None, 'photo':None, 'description':None, 'invite_link':None, 'pinned_message':None, 'sticker_set_name':None, 'can_set_sticker_set':None }, 'forward_from_chat':None, 'forward_from':None, 'forward_date':None, 'reply_to_message':None, 'edit_date':None, 'media_group_id':None, 'author_signature':None, 'text':'/start', 'entities':[ <telebot.types.MessageEntity object at 0x03807F50> ], 'json':{ 'message_id':573, 'from':{ 'id':687595402, 'is_bot':False, 'first_name':'Dmitry', 'last_name':'Gorovtsov', 'username':'dimagorovtsov', 'language_code':'ru' }, 'chat':{ 'id':687595402, 'first_name':'Dmitry', 'last_name':'Gorovtsov', 'username':'dimagorovtsov', 'type':'private' }, 'date':1565206363, 'text':'/start', 'entities':[ { 'offset':0, 'length':6, 'type':'bot_command' } ] } } 

例如,从所有这些信息中,我们希望获取我发送消息的聊天的ID。 为此,请转到聊天键。

要求:

 print(message.chat) 

答案是:

 {'type': 'private', 'last_name': 'Gorovtsov', 'first_name': 'Dmitry', 'username': 'dimagorovtsov', 'id': 687595402, 'title': None, 'all_members_are_administrators': None, 'photo': None, 'description': None, 'invite_link': None, 'pinned_message': None, 'sticker_set_name': None, 'can_set_sticker_set': None} 

看,聊天键还有其他几个键:first_name,last_name,username ...,每个键都有其自己的值。 现在让我们转到id键:

 print(message.chat.id) 

如您所见,为了获得所需的值,您只需要通过点写键的名称即可。 现在查看服务器的响应:

 687595402 

一切都按预期进行! 我们获得了聊天ID,完全是我们想要的! 现在获取发件人的姓名。 正如您所注意到的,这里需要使用from_user键。

要求:

 print(message.from_user) 

答案是:

 {'id': 687595402, 'is_bot': False, 'first_name': 'Dmitry', 'username': 'dimagorovtsov', 'last_name': 'Gorovtsov', 'language_code': 'ru'} 

现在我们获得first_name键的值:

 print(message.from_user.first_name) 

好吧,就是这样! 几秒钟后,我们就能在电报中获得聊天ID和我的名字。 再说一次,对于那些不了解的人:



要获取first_name键的值,我们首先需要转到聊天键,然后才转到first_name!

现在来看,为了向任何聊天发送消息,我们需要在send_message函数中指定几个参数。 第一个参数是chat_id,即聊天ID本身。 第二个是文本,即消息的文本。 您猜对了,我们无需编写message.chat.id,而是可以编写我们的数据! 如果您在参数中指定自己的ID,可以通过以下方式向自己发送消息:

 bot.send_message(< id>, ' ') 

好吧,当我们编写message.chat.id时,我们的意思是该漫游器会将消息发送到调用它的聊天室中。

结论


好,仅此而已! 我希望您了解如何从服务器接收数据,对其进行处理并在必要时使用它。 谢谢您的关注。

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


All Articles