Найти в Дзене
#<Код своими руками!>

Telegram-bot с нуля, отправка запросов через HTTPS и первый код. Урок 3

Оглавление

Доброго времени суток,

В прошлой статье мы сделали совсем не много, а именно: создали бота через BotFather.

В этой статье мы напишем небольшой код и разберём, как отправлять запросы через HTTPS.

Итак, приступим.

Отправка запросов

Для начала разберём, что мы можем сделать и получить пользуясь только браузером на любом устройстве, даже со смартфона.

-Большая часть взята из документации по Telegram Bot API.

Все запросы к Telegram Bot API осуществляются через HTTPS в следующем виде:

https://api.telegram.org/bot<token>/название_метода.

Пример:

https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe

Допускаются GET и POST запросы.

Для передачи параметров в Bot API доступны 4 способа:

  • application/x-www-form-urlencoded
  • application/json (не подходит для загрузки файлов)
  • multipart/form-data (для загрузки файлов)

Подробнее об этом вы можете прочитать в официальной документации,

а сейчас приступим к практике GET запроса.

GET запросы: getMe, getupdates

Метод "getMe" позволит нам получить основную информацию о боте.

Открываем браузер и в адресной строке пишем:

<<https://api.telegram.org/bot<token>/getMe>>,

Но вместо <token> пишем токен полученный от BotFather.

Как в примере выше.

Отправляем данный запрос и смотрим, что мы получим.

Часть token'a закрашена.
Часть token'a закрашена.

В результате мы видим, вкратце, что наш бот работает,

его first_name , username и дополнительные сведения,

что они значат вы можете догадаться просто переведя их.

Теперь получим обновления нашего бота,

перейдём в диалог к нашему боту в Telegram и напишем ему "/start",

также в адресную строку браузера напишем вместо команды

"getME" >> "getupdates".

И посмотрим, что на этот раз мы получим.

-3

-поместил в кадре 2 окна, для вашего удобства,

чтобы не засорять всю статью скринами.

Метод "getupdates" позволяет получать нам информацию поступающую на нашего бота.

В ней мы видим имя и фамилию отправителя, его id, id этого чата, тип диалога, количество символов в сообщении, сам текст сообщения и т.п.

Если написать на русском, то текст сообщения будет не так просто прочитать, дело в том, что русская клавиатура будет выведена в кодировке utf-8. Можете конвертировать её на специальных сайтах,

в интернете их полно.

Теперь мы разберём, как отправить сообщение через адресную строку, зная id чата.

Воспользуемся методом "sendmessage".

Пишем от имени бота через адресную строку, метод "sendmessage"

Для начала скопируем и сохраним chat_id, именно, нашего диалога.

Копируем выделенные цифры.
Копируем выделенные цифры.

Переходим в адресную строку, стираем метод "getupdates" и пишем "sendmessage", но на этом ещё не всё, нам ещё нужно написать наш chat_id и текст сообщения.

Рассмотрим пример.

-5

В данном примере "974446490" вам следует сменить на id вашего диалога.

И "текст" можете сменить на абсолютно любое текстовое сообщение.

Как отправлять фотографии или видео,

мы с вами разберём в следующих статьях,

но в браузере это делать нет смысла, так как за нас всё будет делать наш код.

Отправим сообщение и скорее же переходим к написанию кода.

Отправляю в адресную строку:<<api.telegram.org/bot<token>/sendmessage?chat_id=974446490&text=Удачно!>>,token вставляйте свой.

Получили сообщение в Telegram.
Получили сообщение в Telegram.

Не будем с этим затягивать.

лично мне данная функция пригодилась, разве что, для розыгрышей,

но для этого приходилось следить за тем, что пишут мои друзья(как же им не дать протестировать бота), затем конвертировать с utf-8 русский текст и после уже отвечать.

Переходим к ЯП Python.

Первый код, эхо-бот

Для удобства, вы можете скачать PyCharm.

-7

-Но видите ли на мою 7-ку он не встал, т.к. она 32-разрядная, так что в примерах будет самый обычный Python IDLE(Python 3.8.3 shell), результату это не помешает.

У кого также не получится скачать PyCharm, советую скачать notepad++, он удобно подстраивается почти под каждый язык, но выполнен в стиле обычного блокнота.

Для начала без объяснения.

Создаём текстовый документ(лучше в отдельной папке) c именем <<config.py>>, с текстом:

<<TOKEN = 'ВАШ_ТОКЕН'>>, никаких точек и точек с запятой в конце не надо. Этот файл нам ещё пригодится, скоро расскажу зачем.

Пример config.py
Пример config.py

Теперь создаём в той же папке текстовый документ с любым названием, главное чтобы расширение было ".py" Я назову его как и бота <<Moon.py>>.

Пишем в нём следующий текст, после расскажу, что он значит.

import telebot

import config
bot = telebot.TeleBot(config.TOKEN)

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

def welcome(message):

bot.send_message(message.chat.id, "Привет, {0.first_name}!".format(message.from_user, bot.get_me())
bot.polling(none_stop=True)
Код в Python shell.
Код в Python shell.

Теперь мы разберём с вами подробно весь этот код, а затем допишем небольшую часть, чтобы бот пересылал нам наши же сообщения.

-Просто не знал что придумать простенькое и решил сделать как во многих самоучителях, написать эхо-бота.
  1. import telebot - импорт библиотеки telebot, чтобы наш бот работал😁

import config подключаем наш файл config.py, чтобы взять от туда ТОКЕН.

Проще было бы написать <<bot = telebot.TeleBot("ВАШ_ТОКЕН"),

  1. Да проще, но этот метод пользуется популярностью.
  2. bot = telebot.TeleBot(config.TOKEN) - передаём ТОКЕН нашего бота коду.
  3. @bot.message_handler(commands=['start']) - как написано на изображении выше, это Хэндлер, он предназначен для обработки контента одного типа или, как в нашем примере, для обработки команд.
  4. def welcome(message): - функция с именем welcome(название можете придумать какое угодно, суть функции не изменится), принимает в себя аргумент message, в нашем случае аргументом выступает сообщение "/start".

bot.send_message(message.chat.id, "Привет, {0.first_name}!".format(message.from_user, bot.get_me()) -

- bot.send_message - метод отправки сообщения ботом, принимает 2 аргумента: id чата и сам текст, аргумент "message.chat.id" равен chat_id, но работает он только в случаях, если наш бот получил сообщение от пользователя, иначе нам нужен другой аргумент, но об этом случае как-нибудь потом.

В кавычках "" пишем текст, который бот должен отправить.

В нашем примере он пишет: "Привет, ИМЯ_ПОЛЬЗОВАТЕЛЯ!".

Переменная {0.first_name} хранит в себе имя пользователя который написал сообщение боту, но если написать его просто так, то бот нам так его и выведет, а не имя пользователя,

  1. для этого нам и нужен параметр .format(), который принимает в себя сообщение и GET запросом передаёт в ту переменную имя пользователя который написал нашему боту.
  2. bot.polling(none_stop=True) - Запуск нашего бота в режиме без тормозов, всё-таки он "тормозит".

Чтобы запустить нашего бота в Python shell, достаточно нажать F5.

Этот способ предпочтительнее для недолгого включения.

А если на длительный промежуток времени, лучше воспользоваться python.exe или py.exe, их вы можете найти если наш файл открыть с помощью. В таком случае py.exe изображен с ракетой, а python.exe c чёрным фоном, в результате запуска, вы увидите, что разницы в них нет, но нам же надо всё рассмотреть...

Можете запустить бота одним из трёх способов и проверить его на команде "/start", на обычные текстовые сообщения он ещё не умеет отвечать. Научим.

Допишем в коде, после функции welcome и перед bot.polling():

@bot.message_handler(content_types=["text"])

def first(message):

bot.send_message(message.chat.id, message.text)
Код в Notepad++.
Код в Notepad++.

Вкратце, мы добавили в код хэндлер обрабатывающий все текстовые сообщения полученные нашим ботом,

А с помощью переменной message.text, которая хранит в себе последнее полученное сообщение от пользователя, мы отправляем его обратно.

Проверим работу нашего бота.

-11

Как мы видим, бот работает по нашему коду, всё хорошо.

В следующем уроке научим его обрабатывать другие типы сообщений.

-Спасибо, что дочитали данную статью до конца, Надеюсь, она была вам полезна. Если столь подробное объяснение вам кажется лишним - пишите в комментарии, немного изменим стиль урока. Также если что-то осталось не разобранным и непонятным - пишите в комментарии. Подписывайтесь, дальше будет ещё интереснее.