НАписание телеграмм бота. Создаём бота в BotFather
Скачать 1.14 Mb.
|
Создаём бота в BotFatherДля начала нам нужно создать телеграм бота с помощью BotFather. BotFather - бот от телеграм, самый простой способ для регистрации, настройки и управления другими telegram-ботами. Работа с ним проста и не требует специфических навыков. С помощью BotFather можно зарегистрировать неограниченное количество новых ботов. Единственным условием для регистрации нового бота – является его уникальный username. Обратите внимание, что у настоящего бота стоит галочка: Нажимаем кнопку start и вводим команду /newbot: Вводим название бота и его username. Позже вы сможете изменять настройки бота в любое время. Username должен заканчиваться на bot. Готово, мы создали бота и получили его токен: Настраиваем ботаВводим команду /mybots и смотрим что можно поменять в боте: В разделе API token мы можем обновить токен бота, это может понадобится если злоумышленники получат доступ к вашему токену. Переходим в раздел Edit Bot: Здесь мы можем изменить: имя, описание, аватарку, команды бота. Я уверен, что все вы знаете что это такое, но могут появиться вопросы, что за команды бота? В команды бота вы можете записать команды, которые используются в вашем боте, чтобы пользователи могли посмотреть список команд и могли воспользоваться ими. В разделе Bot Settings мы видим: В Inline mode можно включить/выключить Inline mode у бота. Если Inline mode включен, то помимо отправки команд в личных сообщениях или группах, пользователи могут взаимодействовать с вашим ботом с помощью встроенных запросов. Если встроенные запросы включены, пользователи могут вызвать вашего бота, введя его имя пользователя и запрос в поле ввода текста в любом чате. Так как мы пока учимся работать с ботами - оставим его выключенным. В Allow Groups? мы можем разрешить/запретить добавлять нашего бота в чаты. Раздел Group Privacy даёт возможность выключать/включать Privacy mode у бота. Ботов часто добавляют в группы, чтобы улучшить общение между пользователями-людьми, например путем предоставления новостей, уведомлений от внешних служб или дополнительных функций поиска. Это особенно актуально для групп, связанных с работой. Теперь, когда вы делитесь группой с ботом, вы склонны спрашивать себя: «Как я могу быть уверен, что этот маленький негодяй не продает мою историю чата моим конкурентам?» Ответ - режим приватности. Бот, работающий в Privacy mode, не будет получать все сообщения, которые люди отправляют группе. Вместо этого он получит только: Сообщения, начинающиеся с косой черты '/' (см. Команды выше) Ответы на собственные сообщения бота Служебные сообщения (люди, добавленные или удаленные из группы и т. Д.) Сообщения из каналов, в которых он участвует В разделе Domain мы можем связать домен нашего сайта с ботом. Также мы можем подключить: платёжные системы в разделе Payments, передать владение ботом другому пользователю в Transfer Ownership, удалить бота с помощью Delete Bot. Бот создан, настроен, но как его запустить?Если сейчас мы перейдём в нашего бота и запустим его, то мы получим: Ничего мы и не получим, т.к. мы только создали бота. Для того чтобы бот работал, мы должны написать инструкции - код. Давайте так и сделаем. Сначала копируем токен нашего бота, который мы получили при создании. Также токен можно получить в разделе API Token. Создадим простого бота, отвечающего на команду /start , с помощью этой библиотеки:import telebot bot = telebot.TeleBot( '5075350812:AAGy8o0l_qazRaTXtMJJrxzyQ5hCDMIWP-Q' ) @bot.message_handler(commands=['start']) def start(message) : bot.send_message(message.chat.id, 'Как круто, это же мой первый бот!' ) bot.polling() Давайте построчно разберём что происходит: import telebot подключает библиотеку pyTelegramBotAPI Происходит инициализация бота Декоратор @message_handler реагирует на входящие сообщение. В данном случае при отправке боту команды /start запустится функция start(message) Описываем функцию start(message) . Message – это объект из Bot API, содержащий в себе информацию о сообщении.Внутри функции start(message) отправляем сообщение 'Как круто, это же мой первый бот!' в чат с особым идентификатором (message.chat.id - идентификатор чата) Функция send_message принимает идентификатор чата (берем его из сообщения) и текст для отправки.bot.polling() - Бот работает и ждёт командВключим этот скрипт и проверим что будет с нашим ботом. Ничего не происходит, бот не ответил на старое сообщение, отправляем снова команду /start :Всё получилось! Объект из Bot API - messageКак мы уже знаем message – это объект из Bot API, содержащий в себе информацию о сообщении. Для того чтобы получить полную информацию вы можете вывести message и посмотреть что он из себя представляет: { 'content_type' : 'text' , 'id' : 350 , 'message_id' : 350 , 'from_user' : { 'id' : 1859197473 , 'is_bot' : False , 'first_name' : '8' , 'username' : None , 'last_name' : None , 'language_code' : 'en' , 'can_join_groups' : None , 'can_read_all_group_messages' : None , 'supports_inline_queries' : None }, 'date' : 1645110062 , 'chat' : { 'id' : 1859197473 , 'type' : 'private' , 'title' : None , 'username' : None , 'first_name' : '8' , 'last_name' : None , 'photo' : None , 'bio' : None , 'has_private_forwards' : None , 'description' : None , 'invite_link' : None , 'pinned_message' : None , 'permissions' : None , 'slow_mode_delay' : None , 'message_auto_delete_time' : None , 'has_protected_content' : None , 'sticker_set_name' : None , 'can_set_sticker_set' : None , 'linked_chat_id' : None , 'location' : None }, 'sender_chat' : None , 'forward_from' : None , 'forward_from_chat' : None , 'forward_from_message_id' : None , 'forward_signature' : None , 'forward_sender_name' : None , 'forward_date' : None , 'is_automatic_forward' : None , 'reply_to_message' : None , 'via_bot' : None , 'edit_date' : None , 'has_protected_content' : None , 'media_group_id' : None , 'author_signature' : None , 'text' : 'das' , 'entities' : None , 'caption_entities' : None , 'audio' : None , 'document' : None , 'photo' : None , 'sticker' : None , 'video' : None , 'video_note' : None , 'voice' : None , 'caption' : None , 'contact' : None , 'location' : None , 'venue' : None , 'animation' : None , 'dice' : None , 'new_chat_member' : None , 'new_chat_members' : None , 'left_chat_member' : None , 'new_chat_title' : None , 'new_chat_photo' : None , 'delete_chat_photo' : None , 'group_chat_created' : None , 'supergroup_chat_created' : None , 'channel_chat_created' : None , 'migrate_to_chat_id' : None , 'migrate_from_chat_id' : None , 'pinned_message' : None , 'invoice' : None , 'successful_payment' : None , 'connected_website' : None , 'reply_markup' : None , 'json' : { 'message_id' : 350 , 'from' : { 'id' : 1859197473 , 'is_bot' : False , 'first_name' : '8' , 'language_code' : 'en' }, 'chat' : { 'id' : 1859197473 , 'first_name' : '8' , 'type' : 'private' }, 'date' : 1645110062 , 'text' : 'das' }} Давайте мы рассмотрим самые полезные и интересные свойства объекта message. Чтобы получить информацию о пользователе мы можем использовать: Идентификатор чата - message.chat.id Идентификатор пользователя - message.from_user.id Текст сообщения - message.text Первое имя - message.from_user.first_name Второе имя - message.from_user.last_name Псевдоним - message.from_user.username Тип чата - message.chat.type Идентификатор сообщения - message.id Тип контента сообщения - message.content_type Получаем время сообщения по UTCДля того чтобы получить время сообщения по UTC достаточно получить свойство объекта message - message.date . После этого вы получите примерно такое сообщение: 1645110270 . Вы скажете, что это не время, и я вас обманываю! А нет, это время, а точнее время Unix - система для описания момента времени. Это количество секунд, прошедших с эпохи Unix, исключая дополнительные секунды. Эпоха Unix — 00:00:00 UTC 1 января 1970 года.Если сказать проще, то это число - секунды, прошедшие с 00:00:00 UTC 1 января 1970 года. Как же их перевести в нормальное время? Давайте используем модуль datetime! import datetime date = message.date print(datetime.datetime.utcfromtimestamp(date)) #2022-02-17 15:01:02 Вот и всё! Мы получили время по UTC. Coordinated Universal Time (Всемирное координированное время). Оно отличается от времени по Москве на 3 часа. Если нам нужно время по Москве - мы можем изменить наш код: import datetime date = message.date + 10800 #Прибавляем 3 часа (в секундах) к времени по UTC и получаем время по МСК! print(datetime.datetime.utcfromtimestamp(date)) #2022-02-17 18:01:02 Отправка сообщений и ответы на сообщенияДля отправки сообщения мы используем метод: bot.send_message(message.chat.id, 'Как круто, это же мой первый бот!' ) Но что делать если мы хотим ответить на отправленное сообщение? Для этого мы будем отправлять ответ на сообщение, которое к нам пришло: bot.reply_to(message, 'Как круто, это же мой первый бот!') Также в декоратор мы можем добавить свою функцию с проверкой сообщения, например, если мы хотим, чтобы бот отвечал на все сообщения, то мы можем сделать так: @bot.message_handler(func=lambda m: True) def echo_all(message) : bot.reply_to(message, message.text) Если мы хотим, чтобы бот ответил на какое-то определённое сообщение то можем сделать так: @bot.message_handler(func=lambda m: m.text == 'SnorovkaSchool') def echo_all(message) : bot.reply_to(message, message.text) bot.polling() Можно придумать любую проверку, которую мы хотим. |