Делаем бот своими руками

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

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

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

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

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

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

Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Деревья круглой формы своими руками

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

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

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

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

Источник

Хардкорная разработка под Телеграм. Бот-модератор своими руками. Часть 1

А давайте напишем своего крутого бота-модератора чатов на Python. Пусть он сможет чистить чат, банить участников и выдавать им предупреждения, приветствовать новых участников чата и не только.

Мы сделаем полноценного масштабируемого бота с учётом лимитов и особенностей Телеграма. Начнём с того, что создадим структуру проекта и научим бота реагировать на простые команды.

Для прохождения туториала вы должны знать Python и понимать, что такое асинхронность и декораторы. Мы будем пользоваться библиотекой Telethon для работы с Telegram API (подробнее ниже) и библиотекой Databases с SQLAlchemy Core для баз данных (уже со следующей части).

Пример работы будущего бота 🙂

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

Перед тем, как начать писать код, вам нужно будет создать самого бота. Это делается через официального бота BotFather.

Он попросит вас указать имя бота и его юзернейм. Когда вы сделаете своего «Робота Васю 2077», вы получите токен — с помощью него можно управлять ботом.

Telegram API

В своей статье «Всё, о чём должен знать разработчик Телеграм-ботов» я объяснял, чем отличается Telegram API от Telegram Bot API.

Bot API более ограниченный: например, с его помощью боты не могут получать список участников группы или старые сообщения. И хотя для этого туториала эти возможности не понадобятся, я предпочитаю в любом случае использовать именно Telegram API. А то представьте, как обидно: вот пишете вы бота, развиваете его, и вдруг вам становится нужна какая-то фича, из-за которой всего бота придётся переписывать на другом API. И сразу грустненько становится.

Итак, для работы с Telegram API мы будем использовать библиотеку Telethon:

Так как Telegram API изначально был предназначен для создания клиентов мессенджера, для его использования вам нужно будет зарегистрировать своё приложение на my.telegram.org. Да, даже если вы используете API только для запуска ботов.

Форму вы можете заполнить любым способом. Вы получите api_id и api_hash вашего «приложения». Они нам понадобятся.

Создаём проект

Для начала создадим проект с такой структурой:

В handlers.py будут находиться хендлеры — обработчики событий.

В config.py будем хранить секретные данные. Давайте сразу его заполним:

Конечно, вы можете хранить эти данные любым удобным для вас способом. Но я буду далее использовать файл config.

Итак, давайте приступим к заполнению __init__.py . Главное, что нам нужно из библиотеки telethon — класс TelegramClient . Именно с его помощью мы сможем авторизоваться через бота.

Позже нам понадобится хранить информацию о боте (его id, юзернейм и так далее). Поэтому давайте сразу сделаем свой собственный класс, который будет наследоваться от TelegramClient:

Пока что мы только создали объект бота и ничего больше. Чуть позже мы реализуем авторизацию бота с помощью токена. (Указанная строка ‘bot’ будет названием файла сессии: он создастся после авторизации.)

Читайте также:  Детский стул для стола своими руками

Зададим для бота parse_mode — режим разметки по умолчанию. Он будет использоваться при отправке и получении сообщений с разметкой (жирный текст, курсив, ссылки и так далее). Выберем HTML.

И заодно настроим логгинг:

Когда объект bot уже создан, нам нужно зарегистрировать все хендлеры: для этого импортируем app.handlers (сейчас в том файле ничего нет).

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

И, наконец, функцию run, которая запускает нашу асинхронную функцию start:

Теперь __init__.py выглядит вот так

Переходим к хендлерам.

Как я уже говорил, в handlers.py мы будем обрабатывать события. Давайте будем ловить события о добавлении бота в группу.

Как это сделать? Мы должны ловить именно системные сообщения (это сообщения вида «добавил пользователя в группу», «изменил название группы», «закрепил сообщения» и так далее). Если это системное сообщение:
а) было в группе,
б) говорит о том, что какой-то пользователь добавил другого пользователя,
в) относится именно к боту,
то это значит, что нашего бота добавили в группу. Пусть тогда бот напишет в эту группу: «Приветствую, господа!»

Чтобы использовать событие с новыми системными сообщениями, нам понадобится класс telethon.events.ChatAction.

Всё это будет выглядеть так:

Декоратором @bot.on мы привязываем нашу функцию к нужному событию. Функция принимает объект типа «событие о системном сообщении». Если условия выполняются, то отправляется сообщение.

Теперь последний штрих — файл __main__.py В нём мы просто импортируем и запускаем нашу функцию run:

Готово! Бота можно запускать.

Подробнее о хендлерах

Давайте немножко упростим нашу функцию с приветствием:

Теперь мы передаём в конструктор ChatAction аргумент func — это функция для фильтрации событий. Сюда мы перенесли условие. Теперь хендлер будет срабатывать только для нужных событий.

Также обратите внимание на функцию event.respond . Она отправляет сообщение в чат, из которого пришёл event. На самом деле это просто сокращение для функции bot.send_message , которую мы использовали выше.

Ну что ж, если у нас всё работает, то можно и поиграться! Вы можете попробовать написать свои хендлеры. Например:

Пример хендлера, который будет отвечать на каждый вопрос «Ты кто?»:

Message — это просто удобный тип для события NewMessage.

Чтобы бот видел сообщения-не-команды, сделайте его админом или отключите privacy mode.

Пример хендлера, который кидает картинку с котиком по команде /cat.

Если вы много раз используете одну и ту же картинку, загрузите её на сервер Телеграма с помощью метода bot.upload_file() и используйте несколько раз.

Пример хендлера, который кидает кубик по команде /dice (Анимация эмодзи кубика)

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

Но мы пришли сюда не за этим. Мы хотим сделать команды и другие фичи для администраторов группы! Для этого нам нужно уметь отличать админов от простых участников группы. Этим мы займёмся в следующей части туториала. Мы подключим базу данных и научимся хитрым способом получать админов.

Напомню, что вы можете посмотреть получившийся код на GitHub. Любые вопросы задавайте в комментариях. Наверняка на них отвечу я или кто-нибудь ещё. И спасибо vanutp за справочную информацию для статьи 🙂

Источник

Как создать своего бота для Telegram за 10 минут

Без единой строчки кода!

Telegram — мессенджер, созданный Павлом Дуровым в 2013 году, которым пользуется свыше 100 миллионов человек во всем мире. Помимо переписки с живыми людьми в нем можно общаться с ботами, программами которые в ответ на запросы пользователя выдают какую-либо информацию. Примеры интересных ботов:

А если вы не подписались на бота от iPhones.ru, то пришла пора сделать это! @iPhonesRu_Bot

Сейчас очень модно заводить Telegram-боты. У каждого крупного интернет-ресурса или крупной компании есть свой бот, в которых клиенты получают ответы на вопросы или читают новости. Если у вас есть свой сайт, группа в соцсети или просто интересная идея бота, то эта инструкция поможет вам с минимальным усилиями внести свой вклад в волшебный мир Telegram.

Читайте также:  Как сделать подрамник для холста своими руками

Есть два пути создания ботов. Первый — написать приложение с помощью Telegram API, а второй — воспользоваться сервисом для создания ботов. Один из таких, manybot.io, мы будем использовать в статье.

Устанавливаем Telegram

Инструкцию из статьи можно выполнить в версии Telegram для любой платформы:

Сама я буду использовать версию для OS X, так как без полноценной клавиатуры создавать бота не совсем удобно.

Создаем бота

1. Набираем в поиске Manybot, кликаем на значок бота и нажимаем на кнопку Start:

2. Нажимаем на кнопку Добавить нового бота:

4. Переходим в @BotFather, нажимаем кнопку Start и вводим команду /newbot:

6. Вводим имя бота, которое будет отображаться при поиске и техническое имя бота, копируем полученный API-токен:

7. Возвращаемся в @Manybot и вставляем в него API-токен из буфера обмена:

8. Указываем описание бота:

9. Бот готов:

10. Находим свой бот через поиск и начинаем пользоваться:

Создаем свою команду

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

1. Набираем /commands:

2. Набираем имя новой команды и текст, который она будет выдавать в ответ (при желании к тексту можно прикрепить файлы):

3. Нажимаем кнопку Сохранить и дожидаемся завершения создания команды:

Для того, чтобы отредактировать команду /hello надо набрать /commands, /hello:

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

Добавляем пункт в меню

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

1. Набираем /commands:

2. Нажимаем на кнопку Настроить главное меню, а затем на кнопку Добавить пункт меню:

3. Выбираем из списка команду, которую хотим добавить в меню и указываем название для кнопки:

Включаем автопостинг из соцсетей

В ботах можно настроить трансляцию новостей из Twitter, Youtube, VK или RSS.

1. Набираем команду /autoposting:

2. Нажимаем кнопку с нужной соцсетью и указываем ссылку на страницу:

Создаем отложенный пост

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

1. Набираем команду /newpost:

2. Вводим текст поста и нажимаем на кнопку Отложить пост, указываем текущее время:

3. Указываем время поста и сохраняем пост:

Собираем данные

Еще с помощью ботов можно проводить опросы среди подписчиков:

1. Набираем /commands, выбираем пункт меню Создать команду и вводим имя для новой команды:

2. Нажимаем на кнопку Добавить вопрос, выбираем тип ответа и вводим текст вопроса:

3. Нажимаем на кнопку Сохранить и получаем уведомление об успешном создании команды:

4. Ответы на вопрос можно посмотреть в Главное меню-> Ответы на формы -> название команды:

Вот и все, что нужно знать, чтобы создать простейшего бота. Больше информации о функциях, которые может добалять manybot.io можно узнать, если набрать в своем боте команды /help.

Если нужно что-то посложнее

Возможности ботов Telegram гораздо шире, чем те которые есть у ботов, созданных на платформе code.telegram.org можно почитать подробнее о Telegram API и создании приложений на его основе.

Кстати, для расширения кругозора рекомендую статью 10 фактов о Telegram, которые ты не знаешь.

Источник

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