Как запустить бота через консоль python
Перейти к содержимому

Как запустить бота через консоль python

  • автор:

Часть 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

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

Полное руководство Python по созданию Telegram Bot с использованием python-telegram-bot

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

1) как создать telegram-бота с помощью BotFather

2) задавать вопросы

3) получать и хранить ответы пользователей и фотографии

4) размещать эту информацию на общедоступном Telegram-канале

5) вызов API Google Maps, чтобы показать местоположение еды на карте.

Пищевые отходы — абсурдная проблема

По данным продовольственно-сельскохозяйственной организации, ежегодно в мире растрачивается около 1,3 миллиарда тонн продуктов, что составляет одну треть всего продовольствия, производимого для потребления человеком. Самые распространенные виновники этой ситуации — это буфеты, рестораны и даже домашние хозяйства, по-причине закупки большого количества продуктов и не рационального их использования, превращая их в отходы даже по абсурдным причинам их внешнего вида.

В то же время 820 миллионов человек ежедневно голодают. Это кажется противоречивым — как мы можем тратить так много еды и в то же время позволить стольким людям в мире голодать? Это сводится к отсутствию связи между теми, у кого остались излишки и теми, кто нуждается в пище. Конечно, есть благотворительные организации, которые принимают пожертвования на питание, но нет прямой связи между теми, кто нуждается в еде и у того у кого продукты в избытке. В сочетании с удручающе запутанными регулирующими процессами неудивительно, что существует значительный временной промежуток между пожертвованиями продуктов питания и тем, когда они действительно приносят пользу, кто в них больше всего нуждается.

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

Представляем Telegram Bots

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

Поставщики продуктов питания могут сначала пообщаться с ботом Telegram, чтобы предоставить важную информацию о еде, такую ​​как местоположение пищи, диетические характеристики и т.д. После того, как эта информация будет собрана, бот опубликует свои списки продуктов на канале Telegram, который доступен для общественности. Как только еда размещена на канале, нуждающиеся люди могут просто забрать еду. Все это может быть выполнено без какой-либо существенной задержки — фактически весь процесс отправки еды конечному пользователю, получающему информацию, может занять менее 10 секунд!

Иллюстрированный поток процесса размещения продуктов питания

Для этого бот будет задавать следующие вопросы из поста о продуктах:

  1. Расположение еды. Используя API Карт Google, местоположение будет преобразовано в соответствующие координаты широты и долготы, которые затем могут быть отображены на карте, чтобы пользователи могли легко перемещаться к этому местоположению.
  2. Изображение еды.
  3. Диетические характеристики, то есть, является ли еда халяльной, вегетарианской и так далее.
  4. Количество порций, доступных для приема.
  5. Время, за которое еда должна быть собрана, прежде чем она будет выброшена.

Пост с едой ответит на эти вопросы, а бот соберет ответы в одно сообщение. С этим кратким сообщением бот отправит информацию общедоступному каналу после того, как автор подтвердит правильность введенных данных.

Создание вашего бота

Теперь, когда у нас есть понимание того, как работает этот процесс, давайте перейдем к мельчайшим деталям!

Прежде всего, мы создадим бота. Для этого отправьте в телеграмме команду /newbot в BotFather. Он запросит у вас имя бота, а затем имя пользователя (которое должно заканчиваться на боте). Вы можете легко изменить имя бота с помощью команды /setname, но невозможно изменить имя пользователя бота через BotFather, поэтому, если вы не уверены, вы можете сначала создать тестового бота со случайным именем пользователя и после того, как вы проверили все функции и убедились, что ваш бот работает, создайте нового бота с желаемым именем пользователя.

Первое общение с BotFather - «one bot to rule them all»!

После создания бота, BotFather отправит вам ключ API бота (под строкой «Use this token to access the HTTP API:»). Держите этот ключ API у себя, потому что его может использовать любой человек с ключом API для управления вашим ботом, что для вас не желательно! Есть несколько команд, которые вы можете отправить в BotFather для настройки вашего бота, включая изменение описания бота, его профиля и т.д.

Использование python-telegram-bot для взаимодействия с ботом

Создав нашего бота, пришло время дать ему дополнительный функционал! Поскольку цель состоит в том, чтобы создать бота, который взаимодействует с постом еды, он должен иметь возможность отправлять ему вопросы, чтобы запросить необходимую информацию, а затем сохранить информацию, прежде чем пересылать ее на общедоступный канал. Для этого мы можем использовать очень удобную оболочку Python, python-telegram-bot. На странице Github приведено множество примеров ботов, написанных с помощью оболочки, так что проверьте страницу, чтобы увидеть, есть ли примеры, подходящие для вашего варианта использования!

Во-первых, мы установим необходимые пакеты. Поскольку мы вызываем API Карт Google для предоставления карты местоположения продуктов питания, мы также установим пакет Python googlemaps. Если вы не хотите использовать Google Maps, вы можете пропустить установку этого пакета.

В вашем терминале / командной строке введите следующие команды для установки двух библиотек:

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

Во-первых, мы импортируем соответствующие библиотеки:

Мы импортируем логи, чтобы показать сообщения, когда пользователь находится в терминале и когда он взаимодействует с ботом, а также различные модули под python-telegram-bot. Мы также импортируем googlemaps, чтобы показать местоположение еды на карте.

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

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

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

Кнопка подтверждения и перезагрузки

Итак, мы указываем две опции, используя модуль ReplyKeyboardMarkup в модуле python-telegram-bot, используя следующую строку кода:

После этого мы указываем некоторые переменные, включая API вашего бота Telegram (который вы получили от BotFather), а также API Google Maps.

Чтобы получить API Карт Google, вам потребуется аккаунт Google Cloud Platform. После создания учетной записи (будут предоставлены бесплатные кредиты, поэтому она должна быть бесплатной, если вы не превышаете квоту), перейдите в консоль Google Cloud Platform и выполните следующие действия:

  1. Поиск API и услуг в строке поиска.
  2. Нажмите синюю кнопку «plus » с надписью «ENABLE APIS AND SERVICES» прямо под строкой поиска
  3. Найдите API геокодирования и включите его.
  4. В разделе « API & Services» перейдите в раздел «Credentials» и выберите «CREATE CREDENTIALS» > API key.

Будет сгенерирован ключ API, поэтому просто скопируйте его. Это будет ваш токен API карт Google. Опять же, держите его в безопасности! API геокодирования предоставляет 200 долларов в кредит, так что этого будет достаточно для ваших целей.

Теперь, когда мы определили переменные, давайте углубимся в фактическую часть кода! Во-первых, мы определяем функцию для суммирования информации, представленной рекламным постом, как показано ниже:

Когда эта функция вызывается, она возвращает информацию в формате ключ-значение (например, Dietary Specifications — Halal).

Далее мы определяем, что происходит, когда пользователь запускает бота. Это делается с помощью команды /start (она работает аналогично тому, как вы использовали команду /newbot с BotFather для создания своего бота). Когда пост запускает бота, мы хотим, чтобы бот приветствовал пользователя и предложил ему отправить местоположение еды, поэтому мы определяем начало следующим образом:

Предыдущая функция возвращает LOCATION, которая является следующей функцией, потому что бот сохранит местоположение, предоставленное пользователем, для создания сводки в конце. В расположении функции, код делает несколько вещей: во-первых он говорит боту, что есть новое сообщение от пользователя, а затем хранит информацию предоставленную пользователем под ключ «Location» для удобства при печати резюме. Затем он регистрирует информацию для целей отладки, на случай, если что-то пойдет не так. Наконец, бот отвечает сообщением с просьбой сфотографировать еду. Затем он возвращает PHOTO, которое является следующей функцией.

В этой следующей функции у пользователя есть два варианта: либо сфотографировать еду и отправить ее боту, либо пропустить, если у него нет готового изображения.

Опять же, бот сначала получает сообщение от пользователя, а затем получает от него файл фотографии, который затем сохраняется как user_photo.jpg. Затем он регистрирует информацию, и бот отвечает следующим вопросом о диетических характеристиках пищи.

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

Получив всю необходимую информацию, настало время ее обобщить и подтвердить с помощью поста. Во-первых, бот объединяет информацию, а затем отправляет сводку, используя функцию fact_to_str (user_data), которую мы определили выше.

Если пользователь выберет «Confirm», бот отправит информацию на общедоступный канал. Параметр chat_id файла bot.send_photo представляет ссылку канала.

Кроме того, теперь мы обращаемся к картам Google, чтобы точно определить местоположение, указанное на плакате. Местоположение было сохранено в user_data [‘Location’] ранее, когда пользователь ответил на первый вопрос о нем, поэтому теперь мы будем извлекать широту и долготу, используя карты Google. Получив эту информацию, бот отправляет данные о местоположении вместе с картой на канал, указанный в @nameofchannel.

Вот некоторые вспомогательные функции на случай, если пользователь отменит разговор с ботом или возникнет ошибка:

Мы находимся в последнем сегменте кода! Здесь код определяет, что бот должен делать для каждого из шести пунктов. Наконец, мы начинаем опрос, который в основном позволяет нам получать информацию с постов. GitHub wiki python-telegram-bot лучше объясняет код здесь, так что проверьте его, если вы не уверены, что делает каждая строка!

Чтобы запустить своего бота, просто перейдите в terminal/command и запустите файл python. После выполнения файла перейдите к боту и введите /start. Ваш бот должен ответить и задать вам вопросы, как написано выше! Когда вы отвечаете, вы также должны увидеть следующие журналы:

Как создать Telegram бота с помощью Python

Evgeny Vladimirovich

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

В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.

В конце урока у вас будет свой бот для снятия стресса, который будет присылать вам милых пёсиков, когда захотите.

Начнём

Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.

1. Создаём нового бота в BotFather

Если вы задумали создавать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а

Перейдите по ссылке BotFather (у вас должно быть установлено приложение Telegram) и создайте нового бота, отправив команду /newbot . Следуйте инструкциям, пока не получите имя пользователя и токен для вашего бота. Ссылка для доступа к боту выглядит так: https://telegram.me/YOUR_BOT_USERNAME , а токен вот так:

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

Команда для установки библиотеки:

Если всё прошло гладко, то можно двигаться дальше.

Пишем программу

Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop . Генерировать случайные изображения, нам поможет публичным API от RandomDog.

Рабочий процесс нашего бота очень прост:

запрос к API -> получить URL изображение -> отправить изображение

1. Импорт библиотек

Для начала импортируем все нужные библиотеки.

2. Доступ к API и получение URL изображения

Давайте создадим функцию для получения URL. Используя библиотеку запросов, мы можем обратится к API и получить json данные.

Проверить json данные можно в браузере по ссылке https://random.dog/woof.json . Вы увидите что-то вроде этого:

Получаем URL, чтобы иметь возможность отправить изображение:

Оформим этот код в виде функции get_url() .

3. Отправляем картинку

Чтобы отправить сообщение/изображение, нам понадобится два параметра: URL изображения и ID получателя — это может быть ID группы или ID пользователя.

Получить URL изображения можно вызвав функцию get_url() .

Чтобы получить ID получателя, используйте этот код:

После того как мы получили URL изображения и ID получателя, пришло время отправить сообщение, т.е. изображение.

Оберните код в функцию bop и убедитесь, что код выглядит следующим образом:

4. Основная программа

И наконец, создайте ещё одну функцию с именем main , чтобы запускать программу. Не забудьте заменить YOUR_TOKEN на токен, который вы сгенерировали ранее.

В итоге, ваш код должен выглядеть вот так:

5. Запуск программы

Отлично! Мы почти закончили. Давайте проверим работу программы. Сохраните файл и назовите его main.py . Теперь её можно запускать, командой:

Запустите бота перейдя по ссылке https://telegram.me/YOUR_BOT_USERNAME . Отправьте команду /bop . Если всё работает как надо, вы увидите случайное изображение с пёсиком. Миленько.

Исправляем ошибки

Отлично! Теперь у вас есть работающий бот.

Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.

Давайте это исправим, чтобы бот отправлял нам только изображения. Если нам попадётся видео или GIF, мы снова будем вызывать API, пока не получим изображение.

1. Проверяем расширение файла с помощью регулярного выражения

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

Отличить изображение от видео или GIF, можно по расширению файла. Нам понадобится последняя часть URL.

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

Затем использовать регулярное выражение, чтобы извлечь расширение файла из URL.

Создайте функцию get_image_url() , используя этот код. Она будет перебирать URL, пока вы не получите файл с подходящим расширением (jpg, jpeg, png).

2. Модифицируем код

Отлично! Теперь нам осталось заменить строку url = get_url() в функции bop() на url = get_image_url() . Ваш код должен выглядеть так:

Всё должно работать идеально. Этот код можно найти на моём GitHub.

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

# Python-telegram-bot 1. Простой эхо-бот

Эхо-бот Telegram

open in new window — библиотеки для написания ботов Telegram.

open in new window нового бота в Telegram.

Затем устанавливаем библиотеку python-telegram-bot

pip install python-telegram-bot

Наш бот будет уметь только два действия: отвечать на команду /start и в ответ на любое сообщение, которое не является командой, отправлять текст присланного сообщения.

Командой считается сообщение которое начинается с символа "/". Команда /start отправляется автоматически боту при добавлении его в список контактов. Но ничего не мешает отправить её после этого вручную.

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

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