Главная страница
Навигация по странице:

  • BotFather

  • start

  • /mybots

  • API token

  • Edit Bot

  • Bot Settings

  • Inline mode

  • Allow Groups

  • Group Privacy

  • Domain

  • Payments

  • /start

  • НАписание телеграмм бота. Создаём бота в BotFather


    Скачать 1.14 Mb.
    НазваниеСоздаём бота в BotFather
    АнкорНАписание телеграмм бота
    Дата12.05.2022
    Размер1.14 Mb.
    Формат файлаodt
    Имя файлаTelegramBot.odt
    ТипДокументы
    #526072

    Создаём бота в 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()

    Давайте построчно разберём что происходит:

    1. import telebot подключает библиотеку pyTelegramBotAPI

    2. Происходит инициализация бота

    3. Декоратор @message_handler реагирует на входящие сообщение. В данном случае при отправке боту команды /start запустится функция start(message)

    4. Описываем функцию start(message)Message – это объект из Bot API, содержащий в себе информацию о сообщении.

    5. Внутри функции start(message) отправляем сообщение 'Как круто, это же мой первый бот!' в чат с особым идентификатором (message.chat.id - идентификатор чата) Функция send_message принимает идентификатор чата (берем его из сообщения) и текст для отправки.

    6. 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()

    Можно придумать любую проверку, которую мы хотим.


    написать администратору сайта