Телеграм бот гороскоп python

Телеграм-бот на Python

В пер­вой части мы сде­ла­ли горо­скоп на Python, кото­рый выда­ёт нам про­гноз на день по зна­ку зоди­а­ка. Сего­дня пой­дём даль­ше: теперь этот же гене­ра­тор горо­ско­пов будет встро­ен в Теле­грам в виде бота.

Да. То, что обыч­но на кур­сах про­да­ют за 50 тысяч руб­лей, мы вам сей­час рас­ска­жем за 15 минут бесплатно.

Как всё будет работать

В этом про­ек­те три зве­на: наш ком­пью­тер с Python, сер­вер Теле­гра­ма и Телеграм-клиент.

На ком­пью­те­ре рабо­та­ет интер­пре­та­тор Python, а внут­ри интер­пре­та­то­ра кру­тит­ся наша про­грам­ма на Python. Она отве­ча­ет за весь кон­тент: в неё зало­же­ны все шаб­ло­ны тек­ста, вся логи­ка, всё поведение.

Внут­ри про­грам­мы на Python рабо­та­ет биб­лио­те­ка, кото­рая отве­ча­ет за обще­ние с сер­ве­ром Теле­гра­ма. В биб­лио­те­ку мы вши­ли сек­рет­ный ключ, что­бы сер­вер Теле­гра­ма пони­мал, что наша про­грам­ма свя­за­на с опре­де­лён­ным ботом.

Когда кли­ент с Теле­гра­мом запра­ши­ва­ет у бота горо­скоп, запрос при­хо­дит на сер­вер, а сер­вер отправ­ля­ет его на наш ком­пью­тер. Запрос обра­ба­ты­ва­ет­ся про­грам­мой на Python, ответ идёт на сер­вер Теле­гра­ма, сер­вер отда­ёт ответ кли­ен­ту. Изи:

Обра­ти­те вни­ма­ние, что рабо­тать наш бот будет толь­ко тогда, когда вклю­чён ком­пью­тер и на нём запу­ще­на про­грам­ма на Python. Если ком­пью­тер выклю­чит­ся, про­па­дёт интер­нет или вы отклю­чи­те интер­пре­та­тор, то бот рабо­тать пере­ста­нет: запро­сы будут при­хо­дить, но никто на них не отве­тит. В одной из сле­ду­ю­щих частей мы сде­ла­ем так, что­бы это всё рабо­та­ло на уда­лён­ном сер­ве­ре и было все­гда доступно.

Что будем делать

Если запи­сать поша­го­во наш план, то он будет выгля­деть так:

  1. Реги­стри­ру­ем бота в Телеграме.
  2. Уста­нав­ли­ва­ем Python-библиотеку для рабо­ты с Телеграмом.
  3. Добав­ля­ем биб­лио­те­ку в про­грам­му с горо­ско­пом и учим про­грам­му реа­ги­ро­вать на сооб­ще­ния в чате.
  4. Пишем там же код, кото­рый пока­жет кноп­ки для выбо­ра зна­ков зодиака.
  5. Сде­ла­ем так, что­бы по кноп­кам появ­лял­ся горо­скоп для это­го знака.

Теперь по оче­ре­ди раз­бе­рём каж­дый пункт.

1. Регистрация нового бота

В Теле­гра­ме нахо­дим канал @BotFather — он отве­ча­ет за реги­стра­цию новых ботов:

Нажи­ма­ем Start и пишем коман­ду /newbot. Нас по оче­ре­ди спро­сят про назва­ние бота и его ник­нейм (мы при­ду­ма­ли толь­ко с тре­тьей попыт­ки, пото­му что осталь­ные были заняты):

2. Установка библиотеки

Есть два основ­ных спо­со­ба рабо­тать с теле­гра­мом в Python: через биб­лио­те­ку telebot и с помо­щью Webhook. Мы будем исполь­зо­вать биб­лио­те­ку — так про­ще и быстрее.

Что­бы её уста­но­вить, запус­ка­ем команд­ную стро­ку от име­ни адми­ни­стра­то­ра (если у вас Windows) и пишем коман­ду pip install pytelegrambotapi

Подключаем библиотеку и получаем сообщения

Что­бы про­грам­ма на Python уме­ла управ­лять Телеграм-ботами, нуж­но в самое нача­ло кода доба­вить строки:

Един­ствен­ное, о чём нуж­но не забыть — заме­нить сло­во «токен» на насто­я­щий токен, кото­рый дал нам @BotFather. Откры­ва­ем про­грам­му горо­ско­па и добавляем.

Теперь научим бота реа­ги­ро­вать на сло­во «При­вет». Для это­го доба­вим после стро­чек с импор­том новый метод и сра­зу про­пи­шем в нём реак­цию на нуж­ное сло­во. Если не зна­е­те, что такое метод и зачем он нужен, — читай­те ста­тью про ООП.

Читайте также:  Гороскоп телец огненная лошадь мужчина

И послед­нее, что нам оста­лось сде­лать до запус­ка, — доба­вить после мето­да такую строчку:

Она ска­жет про­грам­ме, что­бы она непре­рыв­но спра­ши­ва­ла у бота, не при­шли ли ему какие-то новые сооб­ще­ния. Запус­ка­ем про­грам­му и про­ве­ря­ем, как рабо­та­ет наш бот.

Добавляем кнопки

Что­бы поль­зо­ва­те­лям наше­го бота было удоб­но, пока­жем им сра­зу все зна­ки зоди­а­ка в виде кно­пок. А потом сде­ла­ем так, что когда на них нажи­ма­ешь — появ­ля­ет­ся горо­скоп для это­го зна­ка на сегодня.

Добав­ля­ем код с кноп­ка­ми в раз­дел, кото­рый реа­ги­ру­ет на «При­вет»:

Добавляем обработчик кнопок

Ско­рее все­го, вы заме­ти­ли, что в каж­дой кноп­ке у нас напи­са­но callback_data=’zodiac’ . Это зна­чит, что при нажа­тии на любую кноп­ку у нас будет вызы­вать­ся один и тот же метод, кото­рый отве­ча­ет за горо­скоп. Если вы хоти­те сде­лать чест­ный горо­скоп, при­дёт­ся в каж­дой кноп­ке про­пи­сать своё назва­ние обра­бот­чи­ка, а потом задать его пове­де­ние, тоже для каж­дой кнопки.

Давай­те сде­ла­ем обра­бот­чик кно­пок, кото­рый будет реа­ги­ро­вать на ‘zodiac’ и выда­вать слу­чай­ный текст, как в исход­ной про­грам­ме. Для это­го доба­вим новый метод в программу:

Убираем лишнее

Теперь у нас есть гото­вый бот, и нам оста­лось толь­ко убрать лиш­ний код, кото­рый рань­ше отве­чал за вывод зна­ков зоди­а­ка в кон­со­ли. После чист­ки полу­ча­ем гото­вую программу:

Как вид­но, боль­шую часть кода зани­ма­ет тупое пере­чис­ле­ние всех зна­ков зоди­а­ка. Мы мог­ли бы авто­ма­ти­зи­ро­вать это через цик­лы, но на ули­це такая хоро­шая пого­да, что мы это отложим.

Что дальше

Впе­ре­ди — без­гра­нич­ные возможности:

  • мож­но сде­лать инди­ви­ду­аль­ный горо­скоп для каж­до­го знака;
  • научить бота новым командам;
  • при­сы­лать све­жий горо­скоп каж­дое утро;
  • нала­дить непре­рыв­ную рабо­ту на веб-сервере.

Напи­ши­те в ком­мен­та­ри­ях, что бы вы хоте­ли от тако­го бота? Что дол­жен уметь иде­аль­ный бот с гороскопом?

Источник

Телеграм-бот на Python

15 минут — и можете запускать своего первого бота.

В первой части мы сделали гороскоп на Python, который выдаёт нам прогноз на день по знаку зодиака. Сегодня пойдём дальше: теперь этот же генератор гороскопов будет встроен в Телеграм в виде бота.

Да. То, что обычно на курсах продают за 50 тысяч рублей, мы вам сейчас расскажем за 15 минут бесплатно.

Как всё будет работать

В этом проекте три звена: наш компьютер с Python, сервер Телеграма и Телеграм-клиент.

На компьютере работает интерпретатор Python, а внутри интерпретатора крутится наша программа на Python. Она отвечает за весь контент: в неё заложены все шаблоны текста, вся логика, всё поведение.

Внутри программы на Python работает библиотека, которая отвечает за общение с сервером Телеграма. В библиотеку мы вшили секретный ключ, чтобы сервер Телеграма понимал, что наша программа связана с определённым ботом.

Когда клиент с Телеграмом запрашивает у бота гороскоп, запрос приходит на сервер, а сервер отправляет его на наш компьютер. Запрос обрабатывается программой на Python, ответ идёт на сервер Телеграма, сервер отдаёт ответ клиенту. Изи:

Обратите внимание, что работать наш бот будет только тогда, когда включён компьютер и на нём запущена программа на Python. Если компьютер выключится, пропадёт интернет или вы отключите интерпретатор, то бот работать перестанет: запросы будут приходить, но никто на них не ответит. В одной из следующих частей мы сделаем так, чтобы это всё работало на удалённом сервере и было всегда доступно.

Читайте также:  Зодиакальный гороскоп четвертое измерение

Что будем делать

Если записать пошагово наш план, то он будет выглядеть так:

  1. Регистрируем бота в Телеграме.
  2. Устанавливаем Python-библиотеку для работы с Телеграмом.
  3. Добавляем библиотеку в программу с гороскопом и учим программу реагировать на сообщения в чате.
  4. Пишем там же код, который покажет кнопки для выбора знаков зодиака.
  5. Сделаем так, чтобы по кнопкам появлялся гороскоп для этого знака.

Теперь по очереди разберём каждый пункт.

1. Регистрация нового бота

В Телеграме находим канал @BotFather — он отвечает за регистрацию новых ботов:

Нажимаем Start и пишем команду /newbot. Нас по очереди спросят про название бота и его никнейм (мы придумали только с третьей попытки, потому что остальные были заняты):

2. Установка библиотеки

Есть два основных способа работать с телеграмом в Python: через библиотеку telebot и с помощью Webhook. Мы будем использовать библиотеку — так проще и быстрее.

Чтобы её установить, запускаем командную строку от имени администратора (если у вас Windows) и пишем команду pip install pytelegrambotapi

Подключаем библиотеку и получаем сообщения

Чтобы программа на Python умела управлять Телеграм-ботами, нужно в самое начало кода добавить строки:

import telebot;
bot = telebot.TeleBot(‘токен’);

Единственное, о чём нужно не забыть — заменить слово «токен» на настоящий токен, который дал нам @BotFather. Открываем программу гороскопа и добавляем.

Теперь научим бота реагировать на слово «Привет». Для этого добавим после строчек с импортом новый метод и сразу пропишем в нём реакцию на нужное слово. Если не знаете, что такое метод и зачем он нужен, — читайте статью про ООП.

И последнее, что нам осталось сделать до запуска, — добавить после метода такую строчку:

Она скажет программе, чтобы она непрерывно спрашивала у бота, не пришли ли ему какие-то новые сообщения. Запускаем программу и проверяем, как работает наш бот.

Чтобы пользователям нашего бота было удобно, покажем им сразу все знаки зодиака в виде кнопок. А потом сделаем так, что когда на них нажимаешь — появляется гороскоп для этого знака на сегодня.

Добавляем код с кнопками в раздел, который реагирует на «Привет»:

Добавляем обработчик кнопок

Скорее всего, вы заметили, что в каждой кнопке у нас написано callback_data=’zodiac’. Это значит, что при нажатии на любую кнопку у нас будет вызываться один и тот же метод, который отвечает за гороскоп. Если вы хотите сделать честный гороскоп, придётся в каждой кнопке прописать своё название обработчика, а потом задать его поведение, тоже для каждой кнопки.

Давайте сделаем обработчик кнопок, который будет реагировать на ‘zodiac’ и выдавать случайный текст, как в исходной программе. Для этого добавим новый метод в программу:

Теперь у нас есть готовый бот, и нам осталось только убрать лишний код, который раньше отвечал за вывод знаков зодиака в консоли. После чистки получаем готовую программу:

Как видно, большую часть кода занимает тупое перечисление всех знаков зодиака. Мы могли бы автоматизировать это через циклы, но на улице такая хорошая погода, что мы это отложим.

Впереди — безграничные возможности:

  • можно сделать индивидуальный гороскоп для каждого знака;
  • научить бота новым командам;
  • присылать свежий гороскоп каждое утро;
  • наладить непрерывную работу на веб-сервере.
Читайте также:  Обереги по славянскому гороскопу

Напишите в комментариях, что бы вы хотели от такого бота? Что должен уметь идеальный бот с гороскопом?

чтобы не пропустить интересные проекты!

Источник

Создаем бота в Telegram

В этом статье я покажу как создать Telegram бота с помощью Python, поскольку не нашел хорошей русскоязычной статьи по этой теме.

Создание бота

Бот создается с помощью BotFather через Telegram. После команды /newbot надо просто следовать инструкции.

В конце мы получаем токен для управления ботом и работы с Telegram API.

pyTelegramBotApi

Ссылки на документации всех библиотек будут в конце.

Создадим простого бота, отвечающего на команду /start , с помощью этой библиотеки:

pyTelegramBotApi является просто обёрткой для всего Telegram Bot API, но здесь разберутся только основные составляющие.
Взаимодействие с ботом происходит через переменную bot (токен надо вставить свой).
Декоратор @message_handler реагирует на входящие сообщение.
Message – это объект из Bot API, содержащий в себе информацию о сообщении. Полезные поля:
message.chat.id – идентификатор чата
message.from.id – идентификатор пользователя
message.text – текст сообщения
Функция send_message принимает идентификатор чата (берем его из сообщения) и текст для отправки.

Примеры функций

Отправка изображений

Можно отправлять фото из локального хранилища, но удобнее это делать по ссылке. Код аналогичен предыдущему:

Замена клавиатуры

У ботов есть функция замены стандартной клавиатуры на кнопочную. Для этого у всех функций есть опциональный аргумент reply_markup:

ReplyKeyboardMarkup – и есть та самая клавиатура. Метод row() создает ряд (максимум 12) из кнопок, передаваемых в качестве аргумента.
Также есть особенная клавиатура types.ReplyMarkupRemove(), которая меняет клавиатуру на стандартную.

Клавиатура для сообщений

Можно создавать клавиатуру для отдельного сообщения. Передавать его нужно так же в аргумент reply_markup:

У кнопок есть несколько режимов, в зависимости от второго аргумента. Подробнее можно прочитать в официальной документации, но я остановлюсь только на callback_data.
При нажатии на такую кнопку боту придет отдельный CallbackQuery, который нужно обрабатывать подобно сообщению:

Для обработки обязательно указать аргумент func для «отсеивания» Callback запросов.
После обработки каждого запроса нужно выполнить команду answer_callback_query, чтобы Telegram понял, что запрос обработан. В поле callback.data хранится информация из callback_data нажатой кнопки.

Изменение сообщений

У ботов есть функция изменения своих сообщений (можно использовать, чтобы сделать перелистывание страниц, например). Для этого нужно воспользоваться методом edit_message_text (edit_message_caption для картинок):

Смысл аргументов понятен из их названия.

Flask

Если запустить бота, то через какое-то время он упадет с ошибкой Connection to api.telegram.org timed out. Чтобы это исправить нужно использовать вебхук:

Этот код при запуске сначала удалит вебхук, если такой был, и установит его на желаемый. Все запросы, которые приходят в функцию getMessage будут направляться в bot с помощью метода process_new_updates. Этот код уже можно использовать для запуска, например, на Heroku.

P.S. Чтобы работать с длинными диалогами, я хранил для каждого пользователя в базе данных его текущее состояние.

Полезные ссылки

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

Источник

Оцените статью