Телеграм боты — это крутой способ взаимодействия с пользователем прямо в привычном ему мессенджере. Это гораздо быстрее и чаще удобнее, чем писать полноценное мобильное приложение. Сегодня мы с вами разберемся, как они работают, и создадим несколько собственных ботов.
Вспоминая функции
Функция — это часть кода программы, которую можно повторно использовать. У функции есть имя, список параметров и возвращаемое значение.
Возвращаемое значение — это результат работы функции. Рассмотрим простой пример:
def getTwo(): return 2 a = getTwo() print(a)
В данном примере мы определили функцию getTwo , она не принимает параметров и всегда возвращает ( return ) число 2. Написав a = getTwo() , мы вызвали функцию и результат ее работы попал в переменную a . На следующей строчке программа выведет 2 .
Список параметров (или аргументов) — это значения, которые необходимы функции для выполнения задачи. Рассмотрим второй пример:
def sum(a, b): return a + b print(sum(23, 5)) # выведет 28 print(sum(-3, 6)) # выведет 3
Здесь функция принимает два параметра и возвращает их сумму.
Пишем TELEGRAM бота на Python
Внутри функций мы можем использовать любые переменные и операции с единственным ограничением:
- переменные внутри функции недоступны вне этой функции;
- переменные извне функции доступны только для чтения (если не испольуется ключевое слово global ).
Телеграм боты
Телеграм бот — это программа, которая запущена на вашем компьютере и общается с серверами телеграма через интернет. Можно представить, что при регистрации бота, телеграм выделяет нам почтовый ящик, через который мы можем получать сообщения от пользователей и отправлять их им.
Далее мы с вами научимся писать программы на питоне, которые, используя этот токен, смогут общаться с пользователями.
Устанавливаем библиотеки
Одно из ключевых преимуществ питона — наличие огромного количества встроенных и сторонних библиотек. Для того, чтобы сделать телеграм-бота, который будет присылать нам статьи из википедии по нашему запросу, нам потребуется установить сразу три библиотеки.
- pyTelegramBotApi — для создания бота.
Для установки сторонних библиотек вместе с питоном на компьютер устанавливается программа pip.exe , которая умеет автоматически находить и скачивать библиотеки по их названию. Единственный нюанс — она работает только через командную строку (терминал).
Чтобы установить библиотеки нам потребуется открыть командную строку и последовательно ввести три команды.
pip install pytelegrambotapi
PS. Если у вас установлен питон, но компьютер все равно не находит pip, путь к нему нужно добавить в системную переменную PATH.
PS. Если у вас потребуют права администратора, можно поставить библиотеки только для текущего пользователя.
pip install —user pytelegrambotapi
Бот-попугай
Давайте сделаем нашего первого бота — бота-попугая. На все сообщения он будет отвечать повторением.
Помимо текстовых сообщений, в телеграме есть команды, они начинаются со слэша, например, /start или /help . Их тоже можно обрабатывать.
Давайте добавим пояснение к нашему боту, которое объяснит пользователю, что он делает.
Стикеры
Еще пример: бот, которому можно прислать стикер и получить стикер в ответ (он запоминает ранее присланные стикеры от всех пользователей).
Что такое словарь?
Списки — это очень круто! Можно хранить много данных и не придумывать имя каждому элементу. Но.
Рассмотрим другую задачу: нам нужно сделать базу клиентов для магазина комиксов. Магазин хочет помнить имя, возраст и любимые комиксы каждого клиента. Мы можем попробовать складывать это в список, но получится примерно так:
clients = [«Петька», 23, [«Майор гром», «Супермен»], «Чапаев», 43, [«Бэтмен»]]
Получаются тройки элементов, где первый элемент это имя, второй — возраст, а дальше список любимых комиксов. Жить, конечно, можно. Но ведь явно должен быть способ лучше. Да, и это — словари.
Вспомним коридор отеля, в котором на дверях написаны номера. Можно провести модернизацию и повесить на двери имя жильца вместо номера. Такой номер будет называться ключем, а сам жилец — значением.
Более естественный пример — это обычный бумажный словарь. Это книга, в которой перечислены слова и их определения. Слова — это ключи, а определения — значения.
Словарь — множество пар ключ-значение.
В примере выше весь список клиентов — это и правда список, а вот отдельный клиент тянет на словарь.
Один клиент будет выглядеть так:
client = # это словарь
А весь список клиентов:
clients = [ , ] # это список словарей
Как работать со словарями?
Работа со словарями очень похожа на работу со списками, только вместо номера элемента используется его ключ (имя).
client = print(«Как зовут клиента?») print(client[«name»]) print(‘-‘ * 15) print(«Сколько ему лет?») print(client[«age»]) print(‘-‘ * 15) print(«А можно вывести всю информацию о нем?») print(client) # print(‘-‘ * 15) print(«А в столбик?») for key in client: print(«<> — <>».format(key, client[key])) # словарь это много пар ключ-значение. Чтобы посмотреть на все элементы надо перебрать все ключи print(‘-‘ * 15) print(«Он любит кошек или собак?») if «pet» in client: print(client[«pet»]) else: print(«Мы не знаем») # так можно проверить, есть ли ключ в словаре print(‘-‘ * 15) print(«Он любит кошек, запишите это!») client[«pets»] = «кошка» print(client) # так можно добавить в словарь новый элемент # print(‘-‘ * 15) print(«Возраст не нужен, удалите!») del client[«age»] print(client) # удаляем элемент и словаря # print(‘-‘ * 15) # кстати, можно вывести все ключи: print(list(client.keys())) # [‘name’, ‘favorites’, ‘pets’] print(‘-‘ * 15) # и отдельно все значения print(list(client.values())) # [‘Петька’, [‘Майор гром’, ‘Супермен’], ‘кошка’] print(‘-‘ * 15) # а еще из словаря можно сделать список пар, вот так: print(list(client.items())) # [(‘name’, ‘Петька’), (‘favorites’, [‘Майор гром’, ‘Супермен’]), (‘pets’, ‘кошка’)] print(‘-‘ * 15) print(«Ксати, он говорил, что бэтмен тоже ничего.») client[«favorites»].append(«Бэтмен») print(client) #
Привязка данных к пользователю
Предположим мы хотим сделать бота, которы будет запоминать какую-то фразу, а затем по просьбе пользователя напоминать ее ему. Чтобы решить эту задачу, нам понадобится где-то хранить последнее сообщение пользователя.
Если мы будем использовать переменную, то сможем сохранить сообщение только одного пользователя. Например, Вася попросил запомнить слово kitten . Мы положим эту строку в переменную note . А затем Петя, попросить запомнить слово puppy , и мы снова положим это переменную note . Когда Вася попросит нам напомнить его последнее сообщение, мы напишем ему puppy вместо kitten . Совершенно не годится!
Удобнее всего хранить все данные, которые привязаны к конкретному пользователю в словаре. Ключем в этом словаре будет id пользователя, а значением — произвольные данные.
Предположим, что наш словарь называется notes — заметки. Теперь, когда Вася (id88000) пришлет слово kitten мы положим его в notes[88000] , а слово puppy от Пети (id5300) — в notes[5300] . Посколько теперь мы используем разные переменные для хранения слова, сообщения от разных пользователей не будут путаться.
Реализация:
Запланированный ответ на конкретное сообщение
Иногда нам приходиться проводить пользователя через конкретную цепочку вопросов, и проще всего сделать это с помощью функции bot.register_next_step_handler . Она позволит нам создать сразу много функций (как и в обычном квесте) и в ответ на сообщения от пользователя последовательно вызывать нужную.
Попробуем с ее помощью провексти квест.
Получение фотографий
Следующий пример показывает, как скачать и сохранить картинку, которую прислал пользователь. Не забудьте создать папку images, в которую мы будем сохранять полученные картинки.
Отправка сообщений в произвольное время
Ваш телеграм бот может писать пользователю в произвольное время, если пользователь хоть раз с ним контактировал и вы запомнили id чата с ним.
В примере ниже после команды /spam бот будет отправлять пользователю сообщение каждые несколько секунд. Для этого используется многопоточность — в одном потоке осуществляется обновление сообщений с сервера телеграма, а во втором — отправка сообщений всем пользователям каждые несколько секунд.
Получаем аудиосообщения
Источник: codingprojects.ru
Telegram-bot: игра «Угадай число»
Во первых, в PyTelegramBotAPI (и не только) весь функционал бота строится на декораторах. В вашем же случае вы запихнули ответ на ‘как дела’ и ‘привет’ в одну функцию, что не совсем хорошо если рассуждать со стороны эстетики языка Python, каждая функция дожна отвечать за определенный фнукционал, их можно было отделить в отдельные функции и указать в декораторе, определенные условия при которых срабатывала бы функция. То есть вот так:
Такая же проблема и с функцией digitgames:
Как видите у нас есть две фнукции с декораторами, и в обеих декортаорах указано чтобы обе функции срабатывали на тип контента text (текст). Допустим вы напишите боту «привет», то по идее бот должен ответит вам «Ну привет)», но он вам ответит «Noting else». А почему? А потому что, функция digitgames стоит первой и его декоратор срабатывает на любой текст так же как и второй декоратор фнукции send_texts, но так как digitgames стоит первой и content_types=[‘text’] сообщении является True, то соотвественно вторая фнукция уже не срабатыватает.
В третих, что это такое?
bot.send_message(message.chat.id, ‘Ура! Ты угадал число! Это была цифра:’, digit) ^^^^^^^^ bot.send_message(message.chat.id, ‘Неверно, осталось попыток:’, counter) ^^^^^^^^^^
Почему digit и counter у вас через запятую отделён от основного текста сообщени? send_message — это обычная функция, и она как любая другая функция принимает определеные аргументы, это вам не print(), где можно бесконечно указывать аргументы и все они будут восприниматся как текст:
>>> print(«123», «456») 123 456
Функция send_message в целом принимает много аргументов. Самые главные из них chat_id и text, chat_id вы верно указали — message.chat.id, а вот text не совсем коректно, вот правильный пример:
bot.send_message(message.chat.id, f’Ура! Ты угадал число! Это была цифра: ‘) # C помощью f-string, можно еще с помощью format
В четвортых, разработка бота это вам не халам-балам, хорошо что вы используете PyTelegramBotAPI, есть библиотека aiogram, это настоящии ад, она асинхронная, а чтобы понять ассинхронность нужно достаточно хорошо понимать Python (aiogram — это PyTelegramBotAPI на стеройдах).
guess=int(message.text) , Cтрока ‘игра’ попадает в переменную guess, чего быть не должно. — В разработке Телеграмм бота нету фнукции input(), есть кое-что похожее, но работает она совсем по другому принципу — bot.register_next_step_handler. Посмотрите вот этот пример: https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/step_example.py
Вот сообвственно ваш пофикшенный код:
Совет: никогда не используйте глобальные переменные в ботах, я в примере реализовал костыль в виде функции init_storage, set_data_storage и get_data_storage заместо глобальных переменных.
Источник: ru.stackoverflow.com
Создание бота в Телеграм Питон 3: пример программирования, как сделать кнопки для чата и написать код
FAQ
Автор fast12v0_steleg На чтение 7 мин Просмотров 200 Опубликовано 14.01.2020
Каждый, кто хоть раз сталкивался с мессенджером Телеграм, был впечатлен его функционалом. Здесь позволено не только общаться с друзьями в личных сообщениях, читать новости и делать каналы.
Преимуществом сервиса является возможность создавать и использовать ботов. Программировать их можно на любом языке, но самым распространенным выбором сегодня стал Питон. В статье подробно рассмотрим, как сделать python telegram bot.
Немного теории об API
Application Programming Interface – интерфейс, при помощи которого разработчик способен формировать приложения. Инструкция по использованию представлена на сайте stelegram.ru.
Благодаря ему получается настроить разные части веб программы таким образом, чтобы они гармонично и корректно взаимодействовали между собой.
Изначально api использовался для передачи информации и приказов между разными переменными программами. Сегодня он дает возможность получить доступ к ресурсам на другом сервере.
Его применение имеет такие достоинства:
- Доступность партнерских программ.
- Работа с пре-форматированными ссылками, загружающимися одновременно с ID.
- Возможность предоставлять максимально точные и актуальные данные в любой момент времени.
- Получение ответных данных в JSON или XML форматах.
- Публичными. К ним легко получить доступ.
- Приватными. Может использоваться исключительно внутри одной компании. Если у нее разработано много продуктов, то интерфейс позволяет разным программам взаимодействовать между собой.
К основным задачам Application Programming Interface относят:
- помощь в написании кодов;
- преобразование сложных задач в простые.
Инструкция по созданию телеграм-бот на Python
Существует несколько вариантов получения собственного робота:
- Написать его самостоятельно. Для этого можно использовать различные языки программирования. Одним из наиболее понятных и востребованных на данный момент является Питон. Такой способ хоть и трудоемкий, но при этом позволяет получить универсальное решение.
- Воспользоваться услугами конструктора. Но здесь можно столкнуться с ограниченным функционалом, которого не всегда бывает достаточно, чтобы воплотить то, что вы хотите.
- Покупка. Однако, нужно понимать, что в основном, чтобы написать telebot, используется язык python. А он считается настолько легким, что применить его могут даже новички, потому лучше попробовать самому.
Известно два класса ботов, способных самообучаться и работать по определенным правилам:
- Первый вид менее распространен. Робот обучен определенным правилам, основываясь на которые он отвечает на поставленные вопросы. Bot занимается регулярной обработкой простых запросы, а очень сложные у него могут вызвать проблемы.
- Самообучающийся робот более эффективен. Он бывает следующих видов:
- поисковым – использует для ответа реплики, прописанные в базе библиотеки. В зависимости от контекста разговора он выбирает text из списка;
- генеративным – способен сам создавать сообщения на основе изученных слов в запросе.
Свой телеграм-бот на Питон можно сделать самостоятельно. Рассмотрим подробную инструкцию.
Регистрация бота
Дополнительно укажите name. В ответ он пришлет ссылку на документацию (documentation) и токен. Их желательно сразу сохранить, так как они будут единственным ключом к авторизации при взаимодействии с помощником.
Установка
Для начала проводится установка программы.
Есть несколько способов:
- Скачать с сайта, нажав значение install.
- Те, кто пользуется ОС Linux, имеют возможность запустить ее из менеджера пакетов.
- Владельцы macOS должны поставить приложение Homebrew.
- Воспользоваться интерпритатором программы, позволяющей работать онлайн.
- При работе на мобильном устройстве представлена среда программирования Питон.
После загрузки следует установить pip – систему управления пакетами. Важно использовать последние версии. При необходимости можно провести ее обновление.
Написание кода
За создание и функционирование робота отвечает модуль python telegram bot api. Для этого нужно послать следующее: pip install pyTelegramBotAPI.
Писать код получится где угодно. Это может быть вордовский файл или блокнот. Но гораздо эффективнее это делать в умной среде. Здесь автоматически будут подсвечиваться возможные ошибки в проекте.
Создание кода начинаем с подключения телебота. Здесь понадобится сохраненный раньше токен. Первая строка будет выглядеть следующим образом: message: TOKEN=ключ, который прислал бот.
Во второй строке создает объект, который обзываем bot. В аргументах прописывается код аутентификации.
Далее необходимо продумать, что должен уметь делать помощник. В каталоге pyTelegramBotAPI есть декораторы, используя которые робот научится отвечать на стандартные вопросы.
Протестировать его можно, выполнив команду python полный_ путь_ к_ файлу/test.py. робот должен отвечать.
Настройка и запуск бота
Для того, чтобы помощник мог работать, нужно:
- Войти в мессенджер.
- Открыть аккаунт робота.
- В новом диалоговом окне кликнуть на изображение с тремя точками вверху.
- Дальше перейти к пункту Настройки.
Чтобы запустить робота, нужно:
- В строке поиска на клавиатуре руками ввести name помощника и начать диалог с ним.
- Добавить его к каналу при помощи кнопки «Добавить нового участника».
- Осталось из списка выбрать нужный вариант и кликнуть элемент «Invite».
Обработчики команд
Для обработки используется специальная программа Handler. Она работает с медиафайлами и текстовым материалом. Но в нашем случае утилита нужна для того, чтобы передавать боту команды.
Обработчика также можно добавить самостоятельно. В таком случае на первой строке следует вбить «handler». Этот параметр срабатывает всегда, за исключением ввода «help» или «старт».
Обработчики кнопок
В основе программы telegram api python также будет исходник клавиатуры. При подготовке к работе KeyboardButton обязательным параметром является текст (text), который юзер сможет переслать после нажатия на данную клавишу.
При написании кода используются различные методы:
- Add – количество кнопок любое. При этом они выстраиваются в ряд. Если установленная изначально ширина уже достигнута, импортируем их.
- Row – число клавиш также не ограничено, но все они расположены в одной строке.
- Insert – напоминает первый способ, но иконки добавляются к последнему ряду.
Встроенный режим
Это один вид взаимодействия с ботами. С его помощью они получили еще больше возможностей. Такие роботы способны выполнять любые задачи. Например, из examples: отправка text из сайта в чат, размещение гифки или картинки.
Генератор для диалогового бота
Используя конструкцию yield from, роботы создают друг для друга курс на выполнение определенной задачи. Для этого применяется модуль itertools.
Генераторы для python telegram bot proxy являются отличным инструментом. Они дают возможность упростить код и продолжить беседу с нужного момента.
Развертывание бота на сервере
Это завершающий этап создания помощника в Тelegram. Для этого не нужно приобретать дорогую аппаратуру. Можно воспользоваться облачными прокси ресурсами с протоколом mtproto, где предлагают разместить любое приложение бесплатно.
Вначале придется зарегистрировать аккаунт на GitHub. С этой учетной записью получится развернуть бота на Heroku proxy. Если приложение не работает, рекомендуется проверить журналы.
Из-за блокировки мессенджера в России, им нельзя воспользоваться. Но можно пойти в обход запрету, установив VPN.
Выводы
Python – программа для написания скриптов в Телеграм с нуля, которые станут отличным помощником владельцу канала. Они умеют автопостить, форматировать материал, ведут статистику, создают кнопки на русском или другом языке и прочее.
Детальную инструкцию увидите на видео:
Источник: stelegram.ru