Как сделать телеграм бота на пайтоне

Простой Telegram-бот на Python за 30 минут

На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).

Часть 1: Регистрация бота

Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.

Часть 2: Подготовка к написанию кода

Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести

После, в терминале Linux, или командной строке Windows вводим

Теперь все готово для написания кода.

Часть 3: Получаем сообщения и говорим «Привет»

Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.

Открывайте ваш любимый текстовый редактор, и давайте писать код бота!

Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:

Теперь объявим метод для получения текстовых сообщений:

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

Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации

Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:

Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).

Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли

Где bot.py – имя нашего файла.

Теперь можно написать боту и посмотреть на результат:

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Часть 4: Кнопки и ветки сообщений

Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:

И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age

И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:

Остаётся только дописать в начало файла одну строку:

Вот и всё, сохраняем и запускаем нашего бота:

Источник

Пишем чат-бот на Python + PostgreSQL и Telegram

Пошаговое руководство написания чат-бота на языке Python.

Установим Python и библиотеки;

Получим вопросы и ответы из БД PostgreSQL;

Подключим чат-бот к каналу Telegram.

Colaboratory от Google

Изучение Python можно начать используя сервис Colaboratory от Google, или просто Colab. Сервис позволяет писать и выполнять код Python в браузере, не требуя собственного сервера.

Пример кода. Вопросы и ответы для чат-бота подгрузим с https://drive.google.com из текстового файла

Запуск в Production

Наигравшись с кодом в Colaboratory и освоив Python развернем систему на боевом сервере Debian

Установим Python и PIP (установщик пакетов).

Так как Debian не самый новый, устанавливается версия 3.5

Установим необходимые пакеты Python

Пишем код в файле Chat_bot.py

Структура таблицы ответов chats_answer, формат SQL

Да, я готов об этом поговорить

Структура таблицы вопросов chats_question, формат SQL. Каждый вопрос связан с кодом ответа.

Лет то тебе сколько

Поговорим о возрасте

Трейлер фильма Матрица

Продолжаем код в файле Chat_bot.py

Векторизация и трансформация

Функция поиска ответа

Проверка из консоли

Запустим и проверим

Подключим Telegram

Откроем Telegram и обратимся к боту @BOTFATHER https://t.me/botfather

Все просто, зарегистрируем нового бота и получим token.

В целом все готово. Вопросы в базу данных добавляются автоматически от службы тех. поддержки. Остаётся маркетологу в админ панели на YII назначать ответы вопросам. Раз в сутки cron перезапускает скрипт чат-бота, новые фразы поступают в работу.

Весь код чат бота

В теле программы есть переменные k=5 и temperature=10.0. Их можно менять, что будет влиять на поиск, делая его более мягким или более жестким.

Источник

Пишем диалоговые Telegram-боты на Питоне

Думаю, всем здесь в той или иной мере известен мессенджер Telegram. Создатель заявляет, что это самый безопасный мессенджер с убойным алгоритмом шифрования собственной разработки, но нас, разработчиков, конечно же, куда сильнее интересует другое. Боты!

Тема эта, конечно, не раз поднималась на Хабре: ботов писали на Python с tornado, Node.js, Ruby со специальным гемом, Ruby on Rails, C#, C# с WCF и даже PHP; ботов писали для RSS-каналов, мониторинга сайтов, удалённого включения компьютера и, вероятно, для многого, многого другого.

И всё же я возьму на себя смелость изъездить эту тему ещё раз и вдобавок к этому показать немного магии Питона. Мы будем писать фреймворк™ для удобного написания нетривиальных диалоговых ботов на основе пакета python-telegram-bot.

Как зачать бота?

На этот вопрос лучше всего отвечает официальная документация. Выглядит процесс примерно так:

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Просто, не правда ли? (Будьте благоразумны и не занимайте хорошие никнеймы без убедительной причины!)

Самый простой бот

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

создаёт бота, который сухо отвечает «Здравствуйте.» при нажатии на кнопку Start (или ручном вводе команды /start ) и многозначительно молчит при любых последующих действиях с вашей стороны.

(За дальнейшими подробностями с чистой совестью отсылаю к документации python-telegram-bot.)

Нагруженные этим теоретическим минимумом, мы можем наконец подумать, как нам писать своего нетривиального бота. Для начала давайте вернёмся к постановке задачи. Под диалоговым ботом я подразумеваю бота, который главным образом ведёт обычный текстовый диалог с пользователем — с вопросами, ответами, нелинейным сюжетом, разочаровывающими концовками и всем в таком духе (играли в «Бесконечное лето»?) Напротив, не попадают в сферу наших текущих интересов боты, разным образом расширяющие функционал Telegram (вроде бота для лайков); соответственно, мы опустим добавление всяких плюшек вроде инлайнового режима, игр, обновления элементов управления на лету и всего такого прочего.

50 оттенков yield

Куда менее известными навыками слова yield являются способности… возвращать значения и бросать исключения! Да-да, если мы напишем:

Но и это ещё не всё. Начиная с Python 3.3, генераторы умеют делегировать выполнение друг другу с помощью конструкции yield from : вместо

она позволяет нам писать

А ещё yield from тоже умеет возвращать значение: для этого функциям-генераторам вернули право на нетривиальный (то есть возвращающий что-то, а не просто заканчивающий выполнение) return :

К чему я всё это? Ах да. Эти фокусы, вместе взятые, позволят нам легко и естественно писать наших диалоговых ботов.

Пишем обёртку

Итак, пусть диалог с каждым пользователем ведётся генератором. yield будет выдавать наружу сообщение, которое надо отправить пользователю, и возвращать внутрь его ответ (как только он появится). Давайте напишем простенький класс, который умеет это делать.

Что ж, осталось сочинить диалог, который мы будем отыгрывать! Давайте поговорим о Питоне.

И это работает! Результат выглядит примерно так:

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Добавляем разметку

Боты в Telegram сильны тем, что могут кидаться в своих пользователей HTML- и Markdown-разметкой; эту возможность обойти стороной нам было бы непозволительно. Чтобы понять, как послать сообщение с разметкой, давайте взглянем на описание функции Bot.sendMessage :

Теперь отправка сообщений будет выглядеть так:

Для демонстрации давайте модифицируем ask_yes_or_no() :

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

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

Единственное, чего нам не хватает и что могло бы вполне себе пригодиться при написании диалоговых ботов — клавиатура с выбором вариантов ответа. Для создания клавиатуры нам достаточно добавить в Message.options ключ reply_markup ; но давайте постараемся максимально упростить и абстрагировать наш код внутри генераторов. Здесь напрашивается решение попроще. Пусть, например, yield выдаёт не один объект, а сразу несколько; если среди них есть список или список списков со строками, например:

, то мы считаем, что это кнопки клавиатуры, и хотим получить примерно следующий результат:

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

_send_answer() тогда преобразуется в нечто такое:

В качестве демонстрации поменяем ask_yes_or_no() и discuss_bad_python() :

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Заключение

Генераторы в Питоне — мощный инструмент, и использование его в нужных ситуациях позволяет значительно сокращать и упрощать код. Посмотрите, как красиво мы, например, вынесли вопрос «да или нет» в отдельную функцию, притом оставив за ним право проводить дополнительное общение с пользователем. Так же мы могли бы вынести в отдельную функцию и вопрошание имени, и научить его уточнять у пользователя, верно ли мы его поняли, и так далее, и тому подобное. Генераторы сами хранят за нас состояние диалога, и сами умеют продолжать его с требуемого момента. Всё для нас!

Надеюсь, эта статья была кому-то полезной. Как водится, не стесняйтесь сообщать обо всех опечатках, орфографических и грамматических ошибках в личку. Весь код к статье лежит в репозитории на Github (ветка habrahabr-316666 ). На бота ссылку не дам и живым его держать, конечно, ближайшее время не буду, иначе хабраэффект накроет его вместе с моим компьютером. Успехов в создании своих диалоговых ботов 😉

Источник

telebot быстро и понятно. Телеграмм-бот

telebot (pyTelegramBotAPI) хорошая и лёгкая библиотека для создания бота на python для телеграмма.

Установка

Если у вас windows, тогда вам надо найти cmd на своём пк, а если у вас macOS, тогда вам надо открыть терминал.

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Для установки telebot (pyTelegramBotAPI) на windows вам надо написать в cmd

Для установки на macOS нам надо написать в терминале

Написание кода

Сначала надо получить токен. Для этого зайдём к боту botfather,чтобы получить токен (botfather)

Теперь можно начать писать код.Сначала мы импортируем библиотеку.

Теперь создаём переменную под названием token, в ней мы будем хранить наш токен.

Теперь мы можем создать приветствие бота:

Нам надо создать переменную bot, в ней мы пишем telebot.Telebot (наша переменная с токеном).

Создаём функцию под названием «start_message»

В скобках указываем «message».

Пишем внутри функции bot.send_message(message.chat.id,»Привет»)

и вне функции пишем bot.infinity_poling()

и запускаем программу.

Теперь наш бот может приветствовать

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Приветствие мы сделали, теперь давайте сделаем кнопку.

Надо написать from telebot import types там же, где мы импортировали библиотеку telebot

Теперь пишем @bot.message_handler(commands=[‘button’]). Дальше мы создаём функцию под названием button_message, в скобках указываем message.

Дальше надо создать клавиатуру в переменной под названием markup, в переменной пишем types.ReplyKeyboardMarkup(resize_keyboard=True).

Потом создаём переменную item1, в ней будет хранится сама кнопка и пишем что item1=types.KeyboardButton(«текст на кнопке»).

Дальше к клавиатуре добавим нашу кнопку

Далее надо отправить сообщение «Выберите что вам надо» и после текста написать reply_markup=markup и закрываем скобки.

Теперь у нас есть кнопка. Вот пример:

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Но если мы на неё нажмём, то ничего не произойдёт. Сейчас мы сделаем так, чтобы при нажатии на кнопку выдавало ссылку на мою страницу в Хабре.

Для начала мы напишем @bot.message_handler(content_types=’text’)

Дальше нам надо создать функцию по названием message_reply, а в скобках указать message.

Внутри функции надо указать условие «if message.text==»Кнопка:», а внутри условия отправить нам нужное сообщение.

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Смена кнопок

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

Это можно считать самая лёгкая часть статьи.

Мы разберём сейчас с вами замену кнопок.

Теперь нам просто надо создать клавиатуру с кнопками и добавить к клавиатуре кнопку как в прошлой части в тоже самое условие.Дальше в той же функции написать:

Теперь при нажатии на Кнопку 1 она у нас сменяется на кнопку 2 и при нажатии на кнопку 2 у нас присылает сообщение «Спасибо за прочтение статьи!».

Источник

Создание Python Telegram бота и его deploy на виртуальную машину

Кому нужны чат-боты?

Рынок чат-ботов в России растет с бешеной скоростью и ожидается ежегодный прирост на 30% в течение ближайших трех лет. В 2020 г. количество запросов на чат-боты увеличилось на 17% по сравнению с 2019 г. Большим спросом стали поль­зо­вать­ся голосовые боты, количество запросов на них выросло в четыре раза. В 2021 г. ожидается рост числа запросов на чат-боты на 15-20% от ор­га­низа­ций из госсектора, об­ра­зова­ния, медицины, ло­гис­ти­ки, ре­тей­ла и e-commerce, промышленных и добывающих компаний.

Создаём нашего telegram бота.

Пишем код под наши задачи и тестируем его работоспособность.

Выбираем надежный сервис виртуальных машин.

Переносим нашего бота на виртуальную машину для его дальнейшей работы.

Настраиваем беспрерывную работу бота.

Шаг 1. Создание бота в Telegram

Первые три шага опишу максимально кратко, так как статей на эту тему много и обычно это не вызовет у пользователей никаких трудностей. Для создания бота нам понадобится написать BotFather.

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Шаг 2. Напишем простейшего чат-бота и протестируем его

Для работы будем использовать библиотеку telebot, которую можно установить при помощи следующей команды:

$ pip install pytelegrambotapi

Для установки других библиотек, в случае того, если вы не ограничиваетесь базовым функционалом вам поможет господь Google.

Напишем простого бота, который будет присылать нам в ответ на различные Emoji их размытые PNG копии:

Наш бот готов, теперь осталось его протестировать. Заходим по ссылке, которую прислал BotFather.

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Поздравляю, наш бот теперь работает. И тут мы подходим к главной проблеме: как только мы выключим наш компьютер с запущенным кодом, бот мгновенно перестанет работать. Для решения этой проблемы нам-то и понадобится сервис предоставляющий виртуальные машины.

Шаг 3. Выбираем виртуальную машину!

Что вообще такое эта виртуальная машина?

Виртуальная машина (ВМ ) — это виртуальный компьютер, который использует выделенные ресурсы реального компьютера (процессор, диск, адаптер). Эти ресурсы хранятся в облаке и позволяют ВМ работать автономно. Простыми словами, виртуальная машина позволяет создать на одном компьютере ещё один компьютер, который будет использовать его ресурсы, но работать изолированно.

Именно виртуальная машина поможет нашему боту отвечать на все запросы и работать 24 на 7.

Как выбрать виртуальную машину?

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

Лично я могу рекомендовать следующие сервисы:

Mail cloud solutions — Предоставляют 3000 р. на два месяца тестового периода. (Именно его я и буду использовать в дальнейшей работе).

Yandex.Cloud — Представляют 2000 р. на два месяца тестового периода.

Google Cloud Platform — Предоставляют 300$ на три месяца тестового периода.

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

Создание виртуальной машины.

Я выбрал минимальные параметры, так как нашему боты не нужны какие-то большие энергоресурсы.

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Настройка сети.

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Для подключения будем использовать протокол SSH. Для подключения к нашей виртуальной машине, нам необходимо будет выпустить новую связку ssh-ключей.

Для этого перейдем в терминал и пропишем следующую команду:

Переходим к следующему шагу.

Подключение к виртуальной машине

Для подключения к нашей виртуальной машине пропишем следующую команду:

/.ssh/ИмяВашегоКлюча ubuntu@ваш публичный IP-адрес

В случае удачного подключения вы увидите нечто подобное:

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Мы подошли к самому сложному шагу, который я надеюсь, благодаря моей статье перестанет быть столь трудным для освоения.

Установим на наш сервер последнюю версию Python. Для этого последовательно вводите следующие команды:

Установим и создадим виртуально окружение:

Установим и запустим Redis-server:

Проверить, запущен ли наш Redis-server, необходимо прописать «ping»

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Если в ответе вы получили PONG, поздравляю, все готово к дальнейшей работе!

Перенесем все необходимые файлы на наш виртуальный сервер. Для этого я буду использовать очень удобную программу CyberDuck

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

Мы попадаем фактически на наш сервер, с уже установленным Python, папкой с названием нашего бота и виртуальным окружением. Остается перенести все данные нашего бота. Для этого копируем ВСЕ необходимые файлы и вставляем их на сервер.

Как сделать телеграм бота на пайтоне. Смотреть фото Как сделать телеграм бота на пайтоне. Смотреть картинку Как сделать телеграм бота на пайтоне. Картинка про Как сделать телеграм бота на пайтоне. Фото Как сделать телеграм бота на пайтоне

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

Проверяем работу, если все в порядке, прописываем в терминале deactivate. Нам остается последний шаг. Настроить непрерывную работу нашего бота.

Шаг 5. Настройка беспрерывной работы нашего бота.

Пропишем следующую команду: nano /lib/systemd/system/НазваниеБота.service

Нажимаем CTRL+O → Enter → CTRL+X для сохранения. Эти настройки помогут запускать или перезапускать нашего бота.

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

ГОТОВО! Наш бот запущен и теперь работает 24/7, независимо от того, включен наш с вами компьютер или нет. Если что-то не работает, тщательно проверьте, правильно ли вы прописали путь к файлам. Если терминал выдает ошибку авторизации, попробуйте добавить перед командой «sudo» (Команда от имени администратора)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *