Доброго времени суток,
В прошлой статье мы сделали совсем не много, а именно: создали бота через 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.
Как в примере выше.
Отправляем данный запрос и смотрим, что мы получим.
В результате мы видим, вкратце, что наш бот работает,
его first_name , username и дополнительные сведения,
что они значат вы можете догадаться просто переведя их.
Теперь получим обновления нашего бота,
перейдём в диалог к нашему боту в Telegram и напишем ему "/start",
также в адресную строку браузера напишем вместо команды
"getME" >> "getupdates".
И посмотрим, что на этот раз мы получим.
-поместил в кадре 2 окна, для вашего удобства,
чтобы не засорять всю статью скринами.
Метод "getupdates" позволяет получать нам информацию поступающую на нашего бота.
В ней мы видим имя и фамилию отправителя, его id, id этого чата, тип диалога, количество символов в сообщении, сам текст сообщения и т.п.
Если написать на русском, то текст сообщения будет не так просто прочитать, дело в том, что русская клавиатура будет выведена в кодировке utf-8. Можете конвертировать её на специальных сайтах,
в интернете их полно.
Теперь мы разберём, как отправить сообщение через адресную строку, зная id чата.
Воспользуемся методом "sendmessage".
Пишем от имени бота через адресную строку, метод "sendmessage"
Для начала скопируем и сохраним chat_id, именно, нашего диалога.
Переходим в адресную строку, стираем метод "getupdates" и пишем "sendmessage", но на этом ещё не всё, нам ещё нужно написать наш chat_id и текст сообщения.
Рассмотрим пример.
В данном примере "974446490" вам следует сменить на id вашего диалога.
И "текст" можете сменить на абсолютно любое текстовое сообщение.
Как отправлять фотографии или видео,
мы с вами разберём в следующих статьях,
но в браузере это делать нет смысла, так как за нас всё будет делать наш код.
Отправим сообщение и скорее же переходим к написанию кода.
Отправляю в адресную строку:<<api.telegram.org/bot<token>/sendmessage?chat_id=974446490&text=Удачно!>>,token вставляйте свой.
Не будем с этим затягивать.
лично мне данная функция пригодилась, разве что, для розыгрышей,
но для этого приходилось следить за тем, что пишут мои друзья(как же им не дать протестировать бота), затем конвертировать с utf-8 русский текст и после уже отвечать.
Переходим к ЯП Python.
Первый код, эхо-бот
Для удобства, вы можете скачать PyCharm.
-Но видите ли на мою 7-ку он не встал, т.к. она 32-разрядная, так что в примерах будет самый обычный Python IDLE(Python 3.8.3 shell), результату это не помешает.
У кого также не получится скачать PyCharm, советую скачать notepad++, он удобно подстраивается почти под каждый язык, но выполнен в стиле обычного блокнота.
Для начала без объяснения.
Создаём текстовый документ(лучше в отдельной папке) c именем <<config.py>>, с текстом:
<<TOKEN = 'ВАШ_ТОКЕН'>>, никаких точек и точек с запятой в конце не надо. Этот файл нам ещё пригодится, скоро расскажу зачем.
Теперь создаём в той же папке текстовый документ с любым названием, главное чтобы расширение было ".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)
Теперь мы разберём с вами подробно весь этот код, а затем допишем небольшую часть, чтобы бот пересылал нам наши же сообщения.
-Просто не знал что придумать простенькое и решил сделать как во многих самоучителях, написать эхо-бота.
- import telebot - импорт библиотеки telebot, чтобы наш бот работал😁
import config подключаем наш файл config.py, чтобы взять от туда ТОКЕН.
Проще было бы написать <<bot = telebot.TeleBot("ВАШ_ТОКЕН"),
- Да проще, но этот метод пользуется популярностью.
- bot = telebot.TeleBot(config.TOKEN) - передаём ТОКЕН нашего бота коду.
- @bot.message_handler(commands=['start']) - как написано на изображении выше, это Хэндлер, он предназначен для обработки контента одного типа или, как в нашем примере, для обработки команд.
- 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} хранит в себе имя пользователя который написал сообщение боту, но если написать его просто так, то бот нам так его и выведет, а не имя пользователя,
- для этого нам и нужен параметр .format(), который принимает в себя сообщение и GET запросом передаёт в ту переменную имя пользователя который написал нашему боту.
- 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)
Вкратце, мы добавили в код хэндлер обрабатывающий все текстовые сообщения полученные нашим ботом,
А с помощью переменной message.text, которая хранит в себе последнее полученное сообщение от пользователя, мы отправляем его обратно.
Проверим работу нашего бота.
Как мы видим, бот работает по нашему коду, всё хорошо.
В следующем уроке научим его обрабатывать другие типы сообщений.
-Спасибо, что дочитали данную статью до конца, Надеюсь, она была вам полезна. Если столь подробное объяснение вам кажется лишним - пишите в комментарии, немного изменим стиль урока. Также если что-то осталось не разобранным и непонятным - пишите в комментарии. Подписывайтесь, дальше будет ещё интереснее.