Привет, мой дорогой друг, сегодня хотел бы поделиться своим опытом в написании телеграм-бота. Опыт в работе с python у меня очень маленький, поэтому буду описывать как новичок, который сам только-только начал обучаться. Не буду долго затягивать и сразу приступлю к сути.
Самое первое, что Вам нужно сделать – это найти в телегам "Отца Бота". @BotFather.
Тут все просто – для начала прописываем команду /newbot (Новый бот). Даем ему название (UpYourSkill). Дальше нам надо прописать так называемый username (upyourskill_bot) боту, чтобы его можно было найти через @. В последнем сообщении "Отец" выдаст нам токен (HTTP API), он нам понадобиться, чтобы в дальнейшем взаимодействовать с ботом с помощью написанного нами кодом.
На данном этапе мы импортируем (import) телеграм-бота (telebot, библиотеку для написания нашего бота), а также из этой библиотеки импортируем "типы" (types, они нам пригодятся для создания кнопок в боте, а что за кнопки вы узнаете чуть позже). В 3 строчке кода прописываем уникальный токен, о котором я сказал выше. 4 строчка кода отвечает за связь с нашим ботом.
Теперь надо определиться, что будет делать наш бот. Я выберу для примера следующую ситуацию: У меня есть свой бизнес, основанный на продаже полотенец/одеял/простыни. С ростом покупателей мне стало сложнее отвечать каждому в личных сообщениях или на звонки. Вдруг мне приходит в голову идея – написать телеграм-бота, который будет давай возможность покупателям самостоятельно просмотреть каталог товаров и выбрать нужный.
Как-то много текста, по сравнению с прошлым скриншотом (снимком экрана), давайте разберем что тут написано. @bot.message_handler(commands=['start']) — команда, которая будет запускать нашего бота (В телеграме она выглядит как "/start"). Дальше мы создаем функцию def start(message), где message – аргумент функции. Если вы не знаете, что такое функция или ее аргументы, то можете перейти в мой телеграм канал, там Вы найдете бесплатный мини-курс от Яндекса по разработке на Python. Ну а мы вернемся к статье. markup = types.ReplyKeyboardMarkup(resize_keyboard=True) отвечает за создание кнопок, тип которых является Reply, создавая кнопки в панели управления (Есть еще метод InlineKeyboardMarkup, но он создает кнопки под сообщениями бота, что тоже допустимо, однако мне больше нравится первый вариант). g1, g2, g3 — текст, который будет отображаться в этих кнопках (text='...'). markup.add(g1-3) Отвечает за добавление тех самых кнопок (то есть отвечает за их отображение в мессенджере). Наконец, метод bot.send_message(message.chat.id, 'Можете ознакомиться с каталогом', reply_markup=markup), где метод bot.send_message отвечает за отправку сообщения пользователю, message.chat.id отвечает за синхронизацию сообщения с чатом бота, reply_markup – за добавление созданной кнопки, а 'Можете ознакомиться с каталогом' будет выводиться после запуска бота (скрин ниже)
Следующее, что хотелось бы сделать – это дать функционал нашим кнопкам. Перед этим напишем функцию
Зачем она нам, Вы узнаете чуть позже.
Наш функционал будет выглядеть так:
Важное уточнее, в скрин не поместился код полностью, поэтому обращаю ваше внимание на первую строчку. Текст первой строчки: @bot.message_handler(func=lambda message: message.text == 'Полотенца' or message.text == 'Назад' or message.text == 'Розовые' or message.text == 'Зеленые' or message.text == 'Синие') (Без этого не будет работать). Что же делает эта строчка кода? → В начале объявляется метод для обработки запросов обратного вызова. Выполняется проверка на соответствие строки, указанной после == и возвращенной после нажатия кнопки. Более простым языком, если сообщение пользователя будет совпадать с текстом, указанным после ==, то проверка будет пройдена и бот будет работать дальше.
Создаем функцию Polotenca, в ней будет реализовываться код кнопки "Полотенца"
Дальше у меня идет конструкция if-elif-else. Если не знаете, как они работают, то можете найти бесплатный мини-курс от Яндекса у меня в телеграм-канале
Если переводить на наш язык, то if message.text == 'Назад': start(message) проверяет, если была нажата кнопка 'Назад', то мы вернемся к функции start(message), то есть в момент, когда мы можем ознакомиться с каталогом. elif message.text == 'Розовые' or message.text == 'Зеленые' or message.text == 'Синие': buy(message, markup) говорит нам, что если наше отправленное сообщение одно из перечисленных, то возвращает текст функции buy(message, markup), о которой я говорил выше, а соответственно, вернет нам текст этой функции. else при любом исходе отправляет нам сообщение Выберите интересующие
Аналогично прописываем код для двух других кнопок ↓
Не забудьте про текст, который содержится в @bot.message_handler. иначе НЕ БУДЕТ РАБОТАТЬ!!!
Ну и под самый конец мы пишем последнюю строчку bot.polling(), которая отвечает за непрерывную работу бота, пока мы сами его не остановим.
Вот статья и подошла к концу, спасибо, что прочитали ее. Полный код я выложу в своем телеграм-канале
По всем вопросам или замечаниям/предложениям писать в тегеграм: @sixtybites. Буду рад ответить! :)