Содержание
Высокая безопасность мессенджера Telegram – это его визитная карточка. Для обеспечения анонимности людей используется особая авторская технология кодирования, которая уже стала признана в профессиональной среде разработчиков и программистов.
Однако о языке программирования Telegram говорят намного меньше, и это незаслуженно. Разберемся, на каком языке написан Телеграм и что делает его таким безопасным.
Содержание
Технические характеристики Telegram
Павел Дуров утверждает, что история с настоящим творчеством для разработчика начинается тогда, когда он применяет разные способы программирования в своей работе, чтобы достигнуть поставленную цель.
Эта идея полностью реализована при разработке Телеграма, поэтому при обычном техническом анализе мессенджера можно сразу заметить, что ставка была сделана в первую очередь на функционал, а не на внешний вид.
Язык программирования
Официально считается, что написан Telegram на языке С++. Это логично, ведь он прямо совместим с обычным С, который принят и используется для написания мобильных приложений на базе Android и iOS.
Однако ряд программистов высказывает предположения, что для запуска мессенджера было произведено смешение Java, C++ и фреймворков Java. Насколько это убеждение верно, неизвестно из-за того, что команда разработчиков не комментировала данный вопрос.
Важно! На базе С++ мессенджер существует с 2013 года. С регулярными свежими обновлениями приложения он только немного дорабатывается, а не создается с нуля. Полностью код переписывался лишь раз для официального веб-клиента Telegram X на языке программирования Swift.
Интерфейс
Интерфейс мессенджера выглядит достаточно просто и лаконично в соответствии с принципами. На главном экране отображаются последние личные диалоги с другими пользователями, новости из Телеграм-каналов, уведомления от ботов, здесь же можно провести поиск и т. п.
В левом боковом меню доступны быстрые настройки, там же включается редактирование расширенных функций. Можно выбрать одну из четырех тем оформления, включить автоматический ночной режим, который будет активироваться при наступлении темного времени суток по умолчанию, или же поставить любую картинку в качестве фонового изображения.
В компьютерном варианте Телеграма интерфейс выглядит иначе с той разницей, что в левой части экрана по умолчанию отображаются активные контакты либо последние переписки с другими пользователями. По желанию в правую часть дисплея можно сместить окно эмодзи, чтобы смайлики были под рукой.
Технология шифрования
Для передачи сообщений используется протокол шифрования MTProto. Для авторизации и аутентификации – алгоритмы RSA-2048, DH-2048. При коммуникации одного человека с другим содержание текста личных сообщений шифруется при помощи симметричного AES (Advanced Encryption Standard) и случайно генерируемого ключа, который есть только у сервера и адресата.
Ключ навсегда удаляется примерно через 10 минут после получения сообщения и не хранится постоянно на сервере. С переходом на протокол MTProto два точка ноль применяется криптографический хеш-алгоритм SHA-256.
Режим секретных чатов использует более надежный тип end-to-end кодирования, при котором ключ для чтения сообщений вообще не пересылается на сервер и доступен только для отправителя и получателя. Для реализации этой функции пользуются алгоритмом AES-256 в режиме IGE.
Внимание! При удалении сообщения в переписке оно также совсем стирается с сервера.
Исходный код «Телеграм»
Telegram open source – это открытый клиентский код API, который постоянно доступен для скачивания бесплатно в сети интернет. Несмотря на то что серверная часть остается закрытой, все функции мессенджера остаются рабочими.
Предназначение
Благодаря открытому программному интерфейсу приложения любой заинтересованный человек может получить доступ к сервису библиотеки данных TDLib и заняться созданием на его основе собственного веб-клиента. При этом не надо решать проблему того, на каком языке программирования написан Телеграм, поскольку предлагается сразу несколько версий с поддержкой Javascript, C++ и C#.
Передача сообщений, кодирование и локальная база данных будут работать идентично оригинальному Телеграмму. Возможность редактирования кода дана для того, чтобы популяризировать политику компании и развивать свободу слова, защиту прав человека и анонимность общения. Также это дает стимул и ресурсы для разработки новых технологий в сфере коммуникаций и масс-медиа.
Как пользоваться
Предварительно для запуска Telegram клиента исходный код необходимо скачать со страницы официального сайта telegram.org или в другом источнике и установить. Также нужно ознакомиться с прилагающейся инструкцией о шифровании данных. Затем можно приступать к работе (естественно, без необходимых специальных знаний и навыков в программировании ничего сделать не удастся).
Справка! Скачать код для последнего обновления приложения невозможно, потому что именно его никогда даже не публикуют. К скачиванию доступны только старые варианты официальных клиентов для всех платформ.
Кастомные веб-клиенты могут писаться при использовании любого языка программирования и фреймворков, поэтому вы не ограничены в выборе.
Официальные и неофициальные клиенты
Среди официальных клиентов доступны следующие:
- Вариант для мобильных устройств:
- Telegram для Андроид;
- Telegram для ios;
- Telegram для Windows Phone.
- Desktop-вариант:
- Telegram для Windows/Linux;
- Telegram для macOS.
- Веб-вариант:
- Telegram Web-version;
- Telegram Chrome app.
Единственный официальный веб-клиент группы разработчиков под эгидой Павла Дурова – это проект Telegram X.
Неофициальных кастомных клиентов в разы больше, например:
- Plus Messenger;
- Vidogram;
- Loopy for Telegram;
- TechGram;
- Mobogram;
- Unigram и др.
Их можно использовать для решения частных целей: например, для обхода блокировки официального Телеграма, записи уроков, администрирования каналов, поддержки видеозвонков, расширенных функций дизайна.
Таким образом, Телеграм имеет мощный движок, составленный на основе нескольких языков программирования и сложных протоколов кодирования. Каждый желающий может воспользоваться этими разработками бесплатно, если собирается сделать проект лучше и удобнее и предложить свои нововведения.
Детальная информация видна на видео:
Интенсив «Научитесь собирать информацию с сайтов с помощью парсера на Python» tproger.ru События и курсы на tproger.ru
Ну вот и всё, простенький бот в Телеграмме на языке Python готов.
Docker
Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:
FROM python:3.8 # set work directory WORKDIR /usr/src/app/ # copy project COPY . /usr/src/app/ # install dependencies RUN pip install --user aiogram # run app CMD ["python", "bot.py"]
Каталог проекта должны при этом содержать следующие файлы:
- bot.py;
- Dockerfile.
Для локальных тестов достаточно установить Docker (linux, mac, windows), после чего в папке проекта собрать и запустить контейнер с помощью команд:
docker build -t my_app docker run -d my_app
my_app
— это просто название нашего контейнера, вместо которого можно использовать другое имя.
-d
— специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.
Деплой на AWS
Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:
- Локально или с помощью пайплайнов собрали контейнер.
- Загрузили его на докер хаб.
- В любом удобном месте скачали его. Это может быть локальная машина, VPS сервер или облачный провайдер по типу AWS.
- Запустили.
Пройдёмся по этим шагам. Везде, где указано , надо вставлять свой юзернейм, использованный при регистрации на докерхабе. Если это ваша первая публикация на докерхаб, для начала потребуется залогиниться с помощью docker login.
Билдим контейнер:
docker build -t /my_app
Загружаем его на докерхаб:
docker push /my_app
Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:
docker run -d /my_app
Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом. Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.
- Переходим в Elastic Beanstalk, на вкладку Applications, и создаём новое приложение:
- Называем приложение, теги оставляем пустыми:
- Создаём для приложения environment:
- Выбираем Worker environment:
- В качестве платформы выбираем Docker:
- В пункте Application code нужно загрузить JSON-файл с конфигурацией Docker-образа. Сам файл:
Dockerrun.aws.json { "AWSEBDockerrunVersion": "1", "Image": { "Name": "/my_app", "Update": "true" }, "Ports": [ { "ContainerPort": 5000, "HostPort": 8000 } ] }
- Создаём окружение:
- AWS начинает создавать окружение, просто ждём завершения процесса:
- Если всё прошло успешно, вы увидите индикатор успешного запуска приложения:
Проверяем работу нашего Telegram bot:
Успех!
Заключение
Поздравляем! Теперь вы знаете, как писать роботов для Telegram на Python.
Бота можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.
Кстати, в телеграмме есть аж целых два типа клавиатур:
- Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:
- Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:
Но и это полностью рабочий Телеграм-бот на Python: дополните словарём, и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.
В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.
Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.
Мессенджер Телеграм отличается высокой степенью защиты персональных сведений. Чтобы надежно обезопасить соблюдение личной тайны, разработчики применили систему шифрования собственного изобретения. Такая технология получила высокую оценку в кругах профессиональных программистов.
Программные средства, используемые для обеспечения функционирования Телеграм, обсуждаются далеко не так широко, хотя заслуживают подробного освещения. В данном материале пойдет речь о специфике и преимуществах языка, на котором написаны программы сервиса.
По мнению создателя Телеграм Павла Дурова, мастерство программиста напрямую связано с возможностью сочетать в своей работе разнообразные программные средства для достижения поставленной цели.
Такая идея нашла материальное воплощение при создании Telegram. Профессиональный взгляд на приложение позволяет увидеть, что разработчики уделили основное внимание программному коду, а не внешнему оформлению сервиса.
Официальным языком Телеграм признан С++. Такой выбор логичен в силу совместимости этого языка с языком «Си», на котором создаются приложения для смартфонов на платформах Андроид и iOS. Некоторые эксперты программирования выдвигают гипотезы, что для написания мессенджера был создан особый программный проект, включающий смесь из С++, Java и структурных блоков Java. По-видимому, подобная информация рассматривается разработчиками как конфиденциальная, поэтому такие предположения не получают комментариев от команды Телеграм.
Базовая версия Telegram, созданная на С++, не переписывалась с 2013 года. Каждая новая версия дополняет и совершенствует предыдущую, не меняя основного каркаса. Целиком код переделывался однажды – при написании веб-клиента Телеграм Х. Тогда авторами был использован язык SWIFT.
Телеграм отличается утилитарным и функциональным интерфейсом. На главную страницу выведены последние беседы с абонентами из списка контактов, публикации из каналов, информация от роботов-помощников.
Меню настроек находится в левой части экрана. Перейдя к редактированию параметров, пользователь может настроить работу сервиса в соответствии с собственными пожеланиями, включая визуальное оформление, активацию оповещений, язык интерфейса и другие важные моменты.
Компьютерный вариант Telegram имеет несколько отличающийся внешний вид: с левой стороны расположен список активных собеседников. Для удобства использования смайликов соответствующее меню легко перемещается направо.
При пересылке месседжей применятся протокол MTProto, при аутентификации – криптосистема RSA2048 и протокол Диффи-Хеллмана (2048). Секретность при обмене данными между двумя абонентами сервиса обеспечивается посредством использования симметричного рандомно создаваемого ключа, известного только серверу и адресату.
Ключ навечно удаляется из всех материальных источников по истечении десяти минут после доставки месседжа. Модернизированный протокол MTProto2.0 предполагает использование для шифрования алгоритма SHA 256.
Для закрытых бесед Телеграм применяется усовершенствованный метод шифрования, когда ключ пересылается непосредственно от отправителя к адресату послания, минуя запись на сервер. Такая степень секретности доступна благодаря использованию стандарта шифрования AES 256. Если пользователь принимает решение уничтожить сообщение, этот месседж также удаляется с сервера.
Разработчики Телеграм предоставляют свободный доступ к исходному коду, который может быть использован для создания других программ на той же платформе. Логотип и название мессенджера владельцы закрепили за собой. Код, используемый для серверной части, по-прежнему держится в секрете.
Владельцы приложения предполагают, что свободное использование программистами исходного кода будет способствовать популяризации и дальнейшему совершенствованию сервиса Телеграм. Авторы, желающие добровольно поучаствовать в разработке программных продуктов на платформе Telegram, могут использовать варианты с поддержкой различных языков программирования. При этом обмен данными и процессы зашифровки будут работать по стандартному алгоритму, принятому для мессенджера.
Братья Дуровы считают, что реализация такого подхода будет способствовать развитию свободы слова и обмена информацией, а также стимулирует разработку высокотехнологичных продуктов в сфере интернет-общения.
Команда Telegram разместила ссылки на исходный код мессенджера для любых платформ на официальном сайте. Там же можно найти подробную инструкцию и документацию для разработчиков.
Попытки найти код для последней версии обречены на неудачу, поскольку авторы открывают доступ только к устаревшим вариантам клиента.
Чтобы воспользоваться кодом, необходимы навыки профессионального программиста. Перечень используемых средств программирования достаточно широк.
Официальные варианты мессенджера для различных платформ, следующие:
- Мобильная версия для устройств на:
- Android;
- iOS;
- Windows Phone.
- Десктопная версия для:
- Windows;
- Linux;
- Mac OS.
- Веб-версия.
Официальная альтернатива стандартному варианту мессенджера – TelegramX. В сети много ресурсов, предоставляющих аналогичные услуги: Плюс мессенджер, Vidogram, TechGram, Мобограм и другие. Такие сервисы полезны, если Телеграмм блокирует аккаунт.
Альтернативные мессенджеры стремятся привлечь пользователей оригинальным дизайнерским решением или дополнительными опциями.
При создании приложения Телеграм использовалось сочетание продвинутых программных средств и передовых методов шифрования данных. Авторы открыли свободный доступ к результатам разработок для всех людей, желающих поработать в области информационных технологий.
Канал Смешные Видео Самый смешной канал с лучшими видео и приколами со всего мира. Новые видео каждый день! Перейти в канал Купи рекламу в Telegram Сотни проверенных каналов. Автоматическая система соблюдения условий публикации рекламы. Купить рекламу Частые вопросы Что делать, если на моем канале мало подписчиков? Что делать, если канал получил предупреждение или бан? Что делать, если у меня приватный канал? Новое в каталоге Yordam Fondi | @SV_LIVE 🔘 Другое 125 Задворки Мэйклава 🔘 Другое 308 MIB Promo 🔘 Другое 104 ZEN 🔘 Другое 3408 Топ Telegram-каналов о науке и образовании В этой статье расскажем о нескольких отборных Telegram-каналах, собранные на LinkBaza, и целью которых является помощь в изучении иностранных языков, подготовке к ЕГЭ, просмотр новостей в области образования, также есть каналы для любителей почитать и пос Читать дальше Спам в Telegram: как избавиться от назойливых сообщений В Telegram есть возможность самому контролировать просматриваемый контент, отсеивать бесполезную информацию, также блокировать других пользователей. Кроме того, вы сами можеть помогать модераторам групп или админам в отслеживании нарушителей Читать дальше Неуязвимый. Как обойти блокировку Telegram Telegram – социальная платформа, которая в нынешнее время используется не только как мессенджер для общения, но и для обмена информацией. И для уменьшения рисков потери доступа к приложению в связи с различными блокировками были разработаны прокси-сервера Читать дальше Августовские обновления: что нового появилось в Telegram Telegram опубликовал свежие функции, которые многие ждали. В числе нововведений: блокировка голосовых сообщений, возможность дарить подписку Telegram Premium, создание анимированных эмодзи на отдельной платформе и просмотр их прямо в тексте сообщений. В э Читать дальше Главная > Блог Статьи 29.08.2021 Просмотры 1105 2
Язык программировния бота
Создаете бота, но не знаете, какой язык выбрать для его программирования? Мы постараемся ответить на ваш вопрос.
Создание бота в Telegram – процесс трудоемкий и непростой. Чтобы создать бота нужно много знать, читать и выстроить грамотную стратегию для его создания. Мы постараемся вам немного облегчить работу и сегодня расскажем о самых удобных и простых языках программирования ботов.
Многие эксперты отмечают, что принципиальной разницы, на каком языке создавать бота в Telegram нет. Важно – достучаться до API мессенджера.
Как показывает статистика. Чаще всего ботов пишут на Python. Это довольно простой язык для понимания, и он имеет много реализованных библиотек. Помимо него бота можно написать с помощью – Java, Ruby, JavaScript, Node.js, Go и других. Полный перечень языков с официально рекомендованными библиотеками можно найти здесь – https://core.telegram.org/bots/samples. Кстати, есть перечни и не с официальными библиотеками.
Считается, что брать лучше тот язык. С которым вы уже хоть как-то знакомы. Но если же это первое знакомство, то критерии поиска нужно расширить и ответь на вопросы: что кроме ботов вы желаете программировать? В каком направлении хотите это все развивать? Ботов для каких целей хотите писать – игры, сервисы или автоматизация процессов? Чем детальнее вы ответите на эти вопросы, тем дальше вам будет проще.
Искать язык для бота лучше тот, который подходит под ваши задачи.
Однако, напомним, что самый популярный и современный язык программирования – Python. Он будет особенно хорош для тех, кто в первый раз занимается программированием. У языка простой синтаксис и большая стандартная библиотека функций.
Чтобы создать бота будет нужен пакет python-telegram-bot – оболочка для API от Telegram.
Без программирования
Кстати, если вы еще не освоили Python, а бот вам нужен очень срочно, то его можно запустить и без программирования. Для этого существуют конструкторы. С их помощью кирпичик за кирпичиком можно создать бота. В их числе Manybot, Bottap, Botmother, PuzzleBot, Amylogic. В следующих материалах мы вам расскажем о том, как с помощью этих конструкторов создавать ботов.
На заметку
В августе 2021 года, по итогам 2020 года был составлен рейтинг самых высокооплачиваевых языков программирования. Опрос составила компания Stack Overflow и провела его среди более 83 тысяч разработчиков из разных стран. Согласно результатам опроса, самым высокооплачиваемым языком стал Clojure, который заработал $95 тысяч в год. Эти данные в 1,5 раза больше чем заработали такие языки программирования как Python с доходом в $59 тысяч и JavaScript с $54 тысячами. Эти языки больше остальных пользуются популярностью среди работодателей и разработчиков.
© LinkBaza
Понравился пост? Поделись с друзьями!
Предыдущая статья Следующая статья Топ Telegram-каналов о науке и образовании В этой статье расскажем о нескольких отборных Telegram-каналах, собранные на LinkBaza, и целью которых является помощь в изучении иностранных языков, подготовке к ЕГЭ, просмотр новостей в области образования, также есть каналы для любителей почитать и пос Читать дальше Спам в Telegram: как избавиться от назойливых сообщений В Telegram есть возможность самому контролировать просматриваемый контент, отсеивать бесполезную информацию, также блокировать других пользователей. Кроме того, вы сами можеть помогать модераторам групп или админам в отслеживании нарушителей Читать дальше Неуязвимый. Как обойти блокировку Telegram Telegram – социальная платформа, которая в нынешнее время используется не только как мессенджер для общения, но и для обмена информацией. И для уменьшения рисков потери доступа к приложению в связи с различными блокировками были разработаны прокси-сервера Читать дальше Августовские обновления: что нового появилось в Telegram Telegram опубликовал свежие функции, которые многие ждали. В числе нововведений: блокировка голосовых сообщений, возможность дарить подписку Telegram Premium, создание анимированных эмодзи на отдельной платформе и просмотр их прямо в тексте сообщений. В э Читать дальше Другие интересные статьи Реклама от Telegram: какой она будет и что уже сделано? На днях вышла beta-версия Telegram 8.0 и в ней множество новшеств, в том числе – маркировка рекламы. Какой видит рекламу от Telegram сам создатель мессенджера Павел Дуров? Когда у приложения появится своя рекламная платформа? На эти вопросы ответим вам в Читать дальше 5 помощников: как создать telegram-бота без программирования Как и обещали, рассказываем вам о том, как в Telegram создать бота если вы не обладаете навыками программирования, а «карманный помощник» нужен очень срочно. Мы подготовили для вас пять бесплатных конструкторов, которые помогут вам в этом. Читать дальше Как изменить язык в Telegram и удалить ненужные контакты Сегодня мы вам расскажем о том, как поменять язык в Telegram с телефона, компьютера, а также выбрать тот, которого нет в настройках. Помимо этого, вы узнаете, как удалить ненужные контакты из приложения. Читать дальше Полезные каналы для образования детей Все готовятся к школе. И LinkBaza тоже не остается в стороне. Сегодня мы подготовили для вас топ самых популярных Telegram-каналов, которые собраны на нашем сервере, и помогут в образовании детей. Читать дальше
Python для новичков
Если ты совсем не ориентируешься в Python, то отличным началом будет прочтение трех вводных статей, которые я публиковал в «Хакере» этим летом, либо посещение курса «Python для новичков», который я начну вести для читателей «Хакера» уже совсем скоро — 30 ноября.
- Python с абсолютного нуля. Учимся кодить без скучных книжек
- Python с абсолютного нуля. Учимся работать со строками, файлами и интернетом
- Python с абсолютного нуля. Работаем с ОС, изучаем регулярные выражения и функции
Чтобы создать бота, нам нужно дать ему название, адрес и получить токен — строку, которая будет однозначно идентифицировать нашего бота для серверов Telegram. Зайдем в Telegram под своим аккаунтом и откроем «отца всех ботов», BotFather.
Жмем кнопку «Запустить» (или отправим / start
), в ответ BotFather пришлет нам список доступных команд:
/ newbot
— создать нового бота;/ mybots
— редактировать ваших ботов;/ setname
— сменить имя бота;/ setdescription
— изменить описание бота;/ setabouttext
— изменить информацию о боте;/ setuserpic
— изменить фото аватарки бота;/ setcommands
— изменить список команд бота;/ deletebot
— удалить бота.
Отправим бате‑боту команду / newbot
, чтобы создать нового бота. В ответ он попросит ввести имя будущего бота, его можно писать на русском. После ввода имени нужно будет отправить адрес бота, причем он должен заканчиваться на слово bot. Например, xakepbot
или xakep_bot
. Если адрес будет уже кем‑то занят, BotFather начнет извиняться и просить придумать что‑нибудь другое.
Когда мы наконец найдем свободный и красивый адрес для нашего бота, в ответ получим сообщение, в котором после фразы Use this token to access the HTTP API будет написана строка из букв и цифр — это и есть необходимый нам токен. Сохраним ее где‑нибудь на своем компьютере, чтобы потом использовать в скрипте бота.
Для взаимодействия с Telegram API есть несколько готовых модулей. Самый простой из них — Telebot. Чтобы установить его, набери
pip install pytelegrambotapi
В Linux, возможно, понадобится написать pip3
вместо pip
, чтобы указать, что мы хотим работать с третьей версией Python.
Эхо-бот
Для начала реализуем так называемого эхо‑бота. Он будет получать от пользователя текстовое сообщение и возвращать его.
import telebot # Создаем экземпляр ботаbot = telebot.TeleBot('Здесь впиши токен, полученный от @botfather') # Функция, обрабатывающая команду /start@bot.message_handler(commands=["start"])def start(m, res=False): bot.send_message(m.chat.id, 'Я на связи. Напиши мне что-нибудь )') # Получение сообщений от юзера@bot.message_handler(content_types=["text"])def handle_text(message): bot.send_message(message.chat.id, 'Вы написали: ' + message.text) # Запускаем ботаbot.polling(none_stop=True, interval=0)
Запускай скрипт и ищи в поиске Telegram своего бота по адресу, который ты придумал ранее. Запускаем бота кнопкой «Запустить» (Start) или командой / start
и можем убедиться в том, что он работает и возвращает сообщения.
Wikipedia-бот
Давай научим нашего бота не просто отсылать сообщения обратно, а чему‑нибудь поинтереснее. Например, по введенному слову давать статью на Википедии. Здесь нам поможет модуль Wikipedia:
pip install wikipedia
Готовим код.
import telebot, wikipedia, re # Создаем экземпляр ботаbot = telebot.TeleBot('Здесь впиши токен, полученный от @botfather') # Устанавливаем русский язык в Wikipediawikipedia.set_lang("ru") # Чистим текст статьи в Wikipedia и ограничиваем его тысячей символовdef getwiki(s): try: ny = wikipedia.page(s) # Получаем первую тысячу символов wikitext=ny.content[:1000] # Разделяем по точкам wikimas=wikitext.split('.') # Отбрасываем всЕ после последней точки wikimas = wikimas[:-1] # Создаем пустую переменную для текста wikitext2 = '' # Проходимся по строкам, где нет знаков «равно» (то есть все, кроме заголовков) for x in wikimas: if not('==' in x): # Если в строке осталось больше трех символов, добавляем ее к нашей переменной и возвращаем утерянные при разделении строк точки на место if(len((x.strip()))>3): wikitext2=wikitext2+x+'.' else: break # Теперь при помощи регулярных выражений убираем разметку wikitext2=re.sub('([^()]*)', '', wikitext2) wikitext2=re.sub('([^()]*)', '', wikitext2) wikitext2=re.sub('{[^{}]*}', '', wikitext2) # Возвращаем текстовую строку return wikitext2 # Обрабатываем исключение, которое мог вернуть модуль wikipedia при запросе except Exception as e: return 'В энциклопедии нет информации об этом' # Функция, обрабатывающая команду /start@bot.message_handler(commands=["start"])def start(m, res=False): bot.send_message(m.chat.id, 'Отправьте мне любое слово, и я найду его значение на Wikipedia') # Получение сообщений от юзера@bot.message_handler(content_types=["text"])def handle_text(message): bot.send_message(message.chat.id, getwiki(message.text)) # Запускаем ботаbot.polling(none_stop=True, interval=0)
Другие статьи в выпуске:
Xakep #272. Приручаем WinAFL
- Содержание выпуска
- Подписка на «Хакер»-70%
www
При создании следующих ботов мы будем использовать несколько текстовых файлов с контентом. Скачать их можно с моего сайта.
Бот с двумя виртуальными кнопками
Во многих Telegram-ботах для выбора каких‑то действий используются так называемые виртуальные кнопки. Давай попробуем сделать себе такие же!
Предположим, что у нас есть два файла facts. txt
и thinks. txt
, которые содержат список интересных фактов и поговорки. На каждой строке файлов находится по одному факту или поговорке.
Сделаем бота, в котором будут две кнопки: «Факты» и «Поговорки». Если нажать любую, бот отправит пользователю соответствующее сообщение.
info
Если ты будешь использовать для этого бота тот же токен, что и для предыдущего, то, чтобы увидеть кнопки, перезапусти бота командой / start
.
import telebotimport randomfrom telebot import types # Загружаем список интересных фактовf = open('data/facts.txt', 'r', encoding='UTF-8')facts = f.read().split('n')f.close() # Загружаем список поговорокf = open('data/thinks.txt', 'r', encoding='UTF-8')thinks = f.read().split('n')f.close() # Создаем ботаbot = telebot.TeleBot('Здесь твой токен, полученный от @botfather') # Команда start@bot.message_handler(commands=["start"])def start(m, res=False): # Добавляем две кнопки markup=types.ReplyKeyboardMarkup(resize_keyboard=True) item1=types.KeyboardButton("Факт") item2=types.KeyboardButton("Поговорка") markup.add(item1) markup.add(item2) bot.send_message(m.chat.id, 'Нажми: nФакт для получения интересного фактаnПоговорка — для получения мудрой цитаты ', reply_markup=markup) # Получение сообщений от юзера@bot.message_handler(content_types=["text"])def handle_text(message): # Если юзер прислал 1, выдаем ему случайный факт if message.text.strip() == 'Факт' : answer = random.choice(facts) # Если юзер прислал 2, выдаем умную мысль elif message.text.strip() == 'Поговорка': answer = random.choice(thinks) # Отсылаем юзеру сообщение в его чат bot.send_message(message.chat.id, answer) # Запускаем ботаbot.polling(none_stop=True, interval=0)
Бот, ведущий Telegram-канал с анекдотами
Предыдущие боты посылали юзеру сообщения тогда, когда получали от него команды или фразы. Но что, если нам нужен бот, который будет периодически и в автоматическом режиме постить что‑то в наш канал?
Давай сделаем бота, который получает список анекдотов из файла и каждый час постит в канал один из этих анекдотов. Для этого нам нужно создать свой канал в Telegram, добавить в подписчики канала нашего бота и назначить его администратором канала с правом публиковать сообщения.
Файл с анекдотами должен лежать в папке data
рядом со скриптом бота.
import telebotimport time # Токен, который выдает @botfatherbot = telebot.TeleBot('Здесь твой токен, полученный от @botfather')# Адрес телеграм-канала, начинается с @CHANNEL_NAME = '@адрес_твоего_канала' # Загружаем список шутокf = open('data/fun.txt', 'r', encoding='UTF-8')jokes = f.read().split('n')f.close() # Пока не закончатся шутки, посылаем их в каналfor joke in jokes: bot.send_message(CHANNEL_NAME, joke) # Делаем паузу в один час time.sleep(3600) bot.send_message(CHANNEL_NAME, "Анекдоты закончились :-(")
Чат-бот «Маша»
Теперь давай сделаем простейшего чат‑бота, который будет болтать с пользователем. Для этого мы подготовим файл boltun. txt
, содержащий строки с вопросами (в начале таких строк поставим метку u:
) и ответами на них в следующей строке.
u: как зовутМаша меня зовут!u: сколько тебе летМне уже 18, честно-честно!
Файл boltun. txt
поместим в папку data
рядом со скриптом бота. Для поиска похожих вопросов используем модуль fuzzywuzzy, который позволяет сравнивать, насколько похожи между собой две строки. Естественно, сперва этот модуль нужно установить:
pip install fuzzywuzzypip install python-Levenshtein
Ниже приведен исходный код бота. После его запуска напиши боту «Привет» и попробуй с ним пообщаться. Естественно, это не искусственный интеллект и набор его ответов ограничен фразами из файла boltun. txt
.
import telebotimport osfrom fuzzywuzzy import fuzz # Создаем бота, пишем свой токенbot = telebot.TeleBot('Здесь твой токен, полученный от @botfather') # Загружаем список фраз и ответов в массивmas=[]if os.path.exists('data/boltun.txt'): f=open('data/boltun.txt', 'r', encoding='UTF-8') for x in f: if(len(x.strip()) > 2): mas.append(x.strip().lower()) f.close() # С помощью fuzzywuzzy вычисляем наиболее похожую фразу и выдаем в качестве ответа следующий элемент спискаdef answer(text): try: text=text.lower().strip() if os.path.exists('data/boltun.txt'): a = 0 n = 0 nn = 0 for q in mas: if('u: ' in q): # С помощью fuzzywuzzy получаем, насколько похожи две строки aa=(fuzz.token_sort_ratio(q.replace('u: ',''), text)) if(aa > a and aa!= a): a = aa nn = n n = n + 1 s = mas[nn + 1] return s else: return 'Ошибка' except: return 'Ошибка' # Команда «Старт»@bot.message_handler(commands=["start"])def start(m, res=False): bot.send_message(m.chat.id, 'Я на связи. Напиши мне Привет )') # Получение сообщений от юзера@bot.message_handler(content_types=["text"])def handle_text(message): # Запись логов f=open('data/' + str(message.chat.id) + '_log.txt', 'a', encoding='UTF-8') s=answer(message.text) f.write('u: ' + message.text + 'n' + s +'n') f.close() # Отправка ответа bot.send_message(message.chat.id, s) # Запускаем ботаbot.polling(none_stop=True, interval=0)
Выводы
Мы написали пять простых ботов, на примере которых научились принимать и отправлять сообщения, делать кнопки и понимать неточные запросы.
В следующей статье мы рассмотрим работу с Telegram-ботами более подробно: научимся делать ботов, работающих через веб‑хуки, принимать оплату от пользователей и взаимодействовать с базой данных SQLite.
Также призываю тебя не откладывать и записываться на курс «Python для новичков», где мы от простейших понятий перейдем к созданию первых интересных проектов. Стартуем уже совсем скоро!
Курс по Python
Курс «Python с нуля» направлен на изучение основ и базовых концепций программирования. После него ты сможешь легко углубиться в любую из ИТ‑сфер: веб‑разработку, анализ данных, безопасность приложений и так далее. Продолжительность курса — два календарных месяца. Уроки будут проводиться два раза в неделю (вторник и четверг, ориентировочно в 17:00 по Москве), каждый по одному академическому часу. Периодически будут выдаваться домашние задания.
Записаться на курс
← Ранее Интерпол сообщил об аресте 1000 человек, связанных с киберпреступностью Далее → HTB Intelligence. Пентестим Active Directory от MSA до KDC
ли со статьей или есть что добавить?