Elettracompany.com

Компьютерный справочник
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Телеграмм бот на c

Пишем бота telegram на C#

Вступление

Как я и обещал — пишу вторую статью по созданию ботов к известному мессенджеру telegram. В этот раз речь пойдет о языке C# и о создании полноценного бота на нем. И так, начнем, пожалуй.

Шаг первый. Создаем оформление бота через Botfather

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

BotFather — это такой бот(официальный), через которого регистрируют все остальные боты. Без него нам никак не обойтись, поэтому давайте откроем telegram и перейдем по ссылке — BotFather

Там все крайне просто, вбиваем /help и смотрим на список доступных команд:

Собственно сейчас нас интересует команда /newbot, пишем ее и создаем бота указывая его название. В данном случае я назову своего бота — Рев.ком.стих и будет он у нас выдавать стихи о Маяковского и Есенина (когда я его доделаю, однако весь процесс в эту статью я включать не буду).

Нам выдадут токен, на скриншоте он замазан в целях…, ну вы сами понимаете. Этот токен нам и нужен, сохраните его куда-нибудь в текстовый файл, он нам еще пригодится.

Далее можно задать оформление для бота. Например картинку — логотип. Для этого используем команду /setuserpic после чего загружаем картинку. Так-же задаются описание бота и прочие вещи до которых вы допрете и без моего участия.

Ну и чтобы проверить установилась картинка или нет переходим на бота вбивая его имя через собачку в поиск

Теперь надо сделать боту доступ к сообщениям пользователей, то есть выключить нахер приватный режим. Если мы планируем добавлять бота в группы или конфы, назовите как хотите, в любом случае приватность нам нахер не нужна. Чтобы ее выключить вбиваем команду /setprivacy после чего выбираем пункт — disabled. Обязательно выполните этот шаг, если вы хотите сделать действительно интерактивного бота.

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

Шаг второй. Среда разрабтки

В случае с c# мы будем использовать кроссплатформенную и совершенно бесплатную ide — SharpDevelop в которую уже предустановлены все необходимые для нас плагины такие как nuget package manager. Это во первых экономит мне время, во вторых ресурсы. Тяжелая visual studio тащит за собой кучу уже давно неакутальных и ненужных вещей, да к тому-же платная. Выглядит она конечно приятнее, но для меня такие мелочи не самое главное, мне главное — результат (это нифига не мелочи, Visual Studio 2017 стоит 37 000 рублей).

Короче если у вас не стоит — установите, она весит не много. К тому-же проекты написанные в ней целиком совместимы с visual studio, то есть написанное можно будет потом перенести и туда тоже.

И выбираем тип, так как писать мы будем на C# то выбор очевиден:

И вот среда для разработки у нас готова:

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

Шаг третий. Установка компонент

В качестве обертки для работы с API мы будем использовать пакет под названием telegram.bot, его мы и будем устанавливать в наш проект. Идем в Project->Manage Packages

Перед нами появится менджер пакетов, который сам найдет нужный нам пакет из интернета, скачает его и установит в ваше приложение для использования. Ищем там наш компонент и тыкаем «Add»:

И вот наш пакет добавился, его видно в solution explorer’е

Отлично, если вы проделали все эти действия то можно переходить уже и к кодингу.

Шаг третий. Написание кода

Собственно для начала сделаем простейший интерфейс. Переключаемся на вкладку MainForm -> Design, после чего кидаем на форму одну кнопку и одно текстовое поле.

Вообще я рассчитываю что у вас есть некий базовый опыт программирования на C#, потому что полностью описывать тут все действия у меня просто не хватит места. В любом случае после оформления стоит перейти к написанию кода.

Для начала стоит вспомнить о главном преимуществе C# — асинхронности. Я буду писать код в двух потоках и в качестве второго потока буду использовать класс BackgroundWorker. Просто создаем переменную этого класса и среда сама предложит нам установить необходимые зависимости.

Да, это еще одна вещ за которую я просто обожаю C#. Мне достаточно знать имя класса, а где он находится система знает и без меня.

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

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

Вообще тот кто кодил на C# по больше моего конечно смог бы реализовать это все элегантнее, наверное, но я не из таких. К тому-же далеко не всем известны примочки многопоточности встроенные в этот язык. Там еще есть классы Thread и ThreadPool, а еще полу-асинхронные async и await.

Теперь настало время получения данных из бота. То есть время работы с API телеграма. Собственно инициализация API выглядит так:

Так как мы не используем WebHook то … будем получать обновления бота «вручную», я не знаю как это можно более корректно назвать. Короче раз в секунду телеграм предоставляет ботам информацию о всех сообщениях, которые за это время поступили в бота. Эту информацию можно получать автоматически на https домен, так мы делали на php, а можно получать в бесконечном цикле внутри потока, что мы сейчас и собираемся сделать. Поток у нас есть, осталось сделать цикл и получать обновления. Собственно последнее выполняется вызовом Bot.GetUpdatesAsync(offset) который возврщает массив обновлений начиная с отступа «offset».

И так, в цикле мы перебираем обновления, теперь надо взять обновления нужного нам типа, получить их содержимое и обработать. В данном случае давайте обработаем команду «/saysomething», для этого нам надо отловить обновление типа текстовое сообщение и если текст этого сообщения совпадает с «/saysomething» значит выдать в ответ в тот-же чат строчку «тест».

Запустим теперь наше приложение, вставим токен и нажмем кнопку «поехали».

Отлично, а теперь в телеграм-боте вобьем нашу команду и посмотрим придет ли ответ:

Наш бот работает. Без регистрации домена, указания SSL, подключения cloudflare и прочих муторных вещей.

Отправка картинок

Чтобы отправить картинку надо отправить ссылку на нее самому telegram’у, он сам все загрузит и сделает за нас. Заставим нашего бота по команде «/getimage» отсылать нам вот эту картинку.

Запускаем, тыкаем кнопочку и тестируем:

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

Задаем список команд

Как это сделать я уже писал и не вижу ни малейшего смысла писать это снова. Просто прочитайте тут.

Заключение

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

То-же самое можно написать и на nodejs, к примеру.

Надеюсь эта статья поможет вам.

Скачать исходники

Без исходников все мои слова были бы бесполезны. Как говорится можно десять раз прочитать и не понять, а можно один раз посмотреть код и все понять. Да, к стати, проект открывается в visual studio, я проверял.

Пишем бота telegram на C#

Вступление

Как я и обещал — пишу вторую статью по созданию ботов к известному мессенджеру telegram. В этот раз речь пойдет о языке C# и о создании полноценного бота на нем. И так, начнем, пожалуй.

Шаг первый. Создаем оформление бота через Botfather

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

BotFather — это такой бот(официальный), через которого регистрируют все остальные боты. Без него нам никак не обойтись, поэтому давайте откроем telegram и перейдем по ссылке — BotFather

Там все крайне просто, вбиваем /help и смотрим на список доступных команд:

Собственно сейчас нас интересует команда /newbot, пишем ее и создаем бота указывая его название. В данном случае я назову своего бота — Рев.ком.стих и будет он у нас выдавать стихи о Маяковского и Есенина (когда я его доделаю, однако весь процесс в эту статью я включать не буду).

Нам выдадут токен, на скриншоте он замазан в целях…, ну вы сами понимаете. Этот токен нам и нужен, сохраните его куда-нибудь в текстовый файл, он нам еще пригодится.

Далее можно задать оформление для бота. Например картинку — логотип. Для этого используем команду /setuserpic после чего загружаем картинку. Так-же задаются описание бота и прочие вещи до которых вы допрете и без моего участия.

Ну и чтобы проверить установилась картинка или нет переходим на бота вбивая его имя через собачку в поиск

Теперь надо сделать боту доступ к сообщениям пользователей, то есть выключить нахер приватный режим. Если мы планируем добавлять бота в группы или конфы, назовите как хотите, в любом случае приватность нам нахер не нужна. Чтобы ее выключить вбиваем команду /setprivacy после чего выбираем пункт — disabled. Обязательно выполните этот шаг, если вы хотите сделать действительно интерактивного бота.

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

Шаг второй. Среда разрабтки

В случае с c# мы будем использовать кроссплатформенную и совершенно бесплатную ide — SharpDevelop в которую уже предустановлены все необходимые для нас плагины такие как nuget package manager. Это во первых экономит мне время, во вторых ресурсы. Тяжелая visual studio тащит за собой кучу уже давно неакутальных и ненужных вещей, да к тому-же платная. Выглядит она конечно приятнее, но для меня такие мелочи не самое главное, мне главное — результат (это нифига не мелочи, Visual Studio 2017 стоит 37 000 рублей).

Короче если у вас не стоит — установите, она весит не много. К тому-же проекты написанные в ней целиком совместимы с visual studio, то есть написанное можно будет потом перенести и туда тоже.

И выбираем тип, так как писать мы будем на C# то выбор очевиден:

И вот среда для разработки у нас готова:

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

Шаг третий. Установка компонент

В качестве обертки для работы с API мы будем использовать пакет под названием telegram.bot, его мы и будем устанавливать в наш проект. Идем в Project->Manage Packages

Читать еще:  Как найти бота в телеграмме на iphone

Перед нами появится менджер пакетов, который сам найдет нужный нам пакет из интернета, скачает его и установит в ваше приложение для использования. Ищем там наш компонент и тыкаем «Add»:

И вот наш пакет добавился, его видно в solution explorer’е

Отлично, если вы проделали все эти действия то можно переходить уже и к кодингу.

Шаг третий. Написание кода

Собственно для начала сделаем простейший интерфейс. Переключаемся на вкладку MainForm -> Design, после чего кидаем на форму одну кнопку и одно текстовое поле.

Вообще я рассчитываю что у вас есть некий базовый опыт программирования на C#, потому что полностью описывать тут все действия у меня просто не хватит места. В любом случае после оформления стоит перейти к написанию кода.

Для начала стоит вспомнить о главном преимуществе C# — асинхронности. Я буду писать код в двух потоках и в качестве второго потока буду использовать класс BackgroundWorker. Просто создаем переменную этого класса и среда сама предложит нам установить необходимые зависимости.

Да, это еще одна вещ за которую я просто обожаю C#. Мне достаточно знать имя класса, а где он находится система знает и без меня.

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

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

Вообще тот кто кодил на C# по больше моего конечно смог бы реализовать это все элегантнее, наверное, но я не из таких. К тому-же далеко не всем известны примочки многопоточности встроенные в этот язык. Там еще есть классы Thread и ThreadPool, а еще полу-асинхронные async и await.

Теперь настало время получения данных из бота. То есть время работы с API телеграма. Собственно инициализация API выглядит так:

Так как мы не используем WebHook то … будем получать обновления бота «вручную», я не знаю как это можно более корректно назвать. Короче раз в секунду телеграм предоставляет ботам информацию о всех сообщениях, которые за это время поступили в бота. Эту информацию можно получать автоматически на https домен, так мы делали на php, а можно получать в бесконечном цикле внутри потока, что мы сейчас и собираемся сделать. Поток у нас есть, осталось сделать цикл и получать обновления. Собственно последнее выполняется вызовом Bot.GetUpdatesAsync(offset) который возврщает массив обновлений начиная с отступа «offset».

И так, в цикле мы перебираем обновления, теперь надо взять обновления нужного нам типа, получить их содержимое и обработать. В данном случае давайте обработаем команду «/saysomething», для этого нам надо отловить обновление типа текстовое сообщение и если текст этого сообщения совпадает с «/saysomething» значит выдать в ответ в тот-же чат строчку «тест».

Запустим теперь наше приложение, вставим токен и нажмем кнопку «поехали».

Отлично, а теперь в телеграм-боте вобьем нашу команду и посмотрим придет ли ответ:

Наш бот работает. Без регистрации домена, указания SSL, подключения cloudflare и прочих муторных вещей.

Отправка картинок

Чтобы отправить картинку надо отправить ссылку на нее самому telegram’у, он сам все загрузит и сделает за нас. Заставим нашего бота по команде «/getimage» отсылать нам вот эту картинку.

Запускаем, тыкаем кнопочку и тестируем:

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

Задаем список команд

Как это сделать я уже писал и не вижу ни малейшего смысла писать это снова. Просто прочитайте тут.

Ответы на сложные вопросы:

Решил запилить расширенную версию информации по ботам на C# прямо тут. Укажу в кратце сам код, без дополнительного комментирования.

Советую вам сначала скачать исходники внизу статьи и просматривать блоки кода, которые я привожу, прямо на месте!

Inline кнопки и их обработка:

Выводятся кнопки таким кодом:

Reply-кнопки

Выводятся и обрабатываются таким кодом:

Inline Query — запросы

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

Скачать исходники

Без исходников все мои слова были бы бесполезны. Как говорится можно десять раз прочитать и не понять, а можно один раз посмотреть код и все понять. Да, к стати, проект открывается в visual studio, я проверял.

Как легко написать Telegram бота

Написал статью на хабр, которая пока что висит в песочнице, решил продублировать и здесь.

Не так давно Павел Дуров объявил о конкурсе для разработчиков Telegram ботов. Мне было интересно принять в нем участие и изучить новые технологии. В статье будут рассмотрены принципы работы Telegram API для ботов, пара подводных камней при использовании готовой библиотеки на C#, а также процесс получения сертификата и установки WebHook.

Общие принципы работы API
Telegram API присылает вашему приложению-боту массив в формате JSON — это объект Update.

В нем содержится множество информации — id чата, пользователя, сам текст сообщения, прикрепленные фотографии и другие файлы, может быть местоположение пользователя или карточка контакта из его телефона. Есть два основных способа получения этой информации.

При первом способе ваше приложение каждые 100мс (или реже) соединяется с сервером Telegram и спрашивает, не появилось ли чего нового — это метод getUpdates. Минусы этого подхода в том, что создается большая нагрузка на сервера Telegram, а также иногда при большой нагрузке сервер может отдать 503 ошибку и это нужно обработать в приложении. Зато такой способ проще в реализации.

Второй способ — вы делаете свое приложение в виде «сервера» который слушает определенный порт, и Telegram, при наличии обновлений, отправляет их нашему приложению. Тут минус в том, что нужен SSL-сертификат, хотя бы и самоподписанный, а также желательно наличие доменного имени. Но есть и способы сделать всё очень просто, которые я опишу ниже.

Цель моего бота
У меня была несложная задумка — бот должен принимать от пользователя файлы и загружать их на файлообменник, а также выдавать пользователю хотя бы 10 последних ссылок на закачанные файлы. Также я хотел сделать Inline режим — при упоминании ника бота в чате, он выдает последнюю ссылку на закачанный в файлообменник файл. В качестве файлообменника я выбрал Mega.nz , так как он поддерживает шифрование файлов, там дается 50 ГБ места, и к его API так же нашлась библиотека на C#. В перспективе думаю подключить API Яндекс-диска и Dropbox.

Реализация
В качестве готовой библиотеки я взял решение от MrRoundRobin.
Она хорошо написана, а также есть примеры работы. Пример с Echo с получением обновлений через getUpdate заработал у меня сразу, что вдохновило на дальнейшую разработку. В процессе столкнулся с парой нюансов. Во-первых, иногда приложение выдавало ошибки при билде. Решалось это запуском/перезапуском dnvm через консоль. Во-вторых, Telegram выдавал ошибку, что в ответных сообщениях от приложения при работе в Inline режиме нет поля message_text, а судя по API оно должно быть. Это решилось добавлением поля в InlineQueryResultNew.cs:

С WebHook также получилось работать после получения сертификата, для этого используется Microsoft Owin.

Работа с Inline-сообщениями
Это сообщения, когда бота упоминают по нику в другом чате. Например, упомянув бота youtube и задав ему поисковый запрос вы можете скинуть в чат ссылку на видео. У моего бота поиска нет, но при inline-упоминании он отдает последнюю ссылку на загруженный пользователем файл. Реализация такова: проверяется что update.InlineQuery != null
Далее в поле update.InlineQuery.Query можно получить поисковый запрос пользователя, но я обошелся без него. Для ответа содержащего ссылку я использовал InlineQueryResultArticle где задавал Url, Title, Description а также MessageText. Затем вызывался метод AnswerInlineQuery, но он принимает в себя массив вот так:

Получение сертификата и ngrok
Когда логика бота более-менее заработала, я решил переписать его через WebHook. Самый легкий путь сделать это — воспользоваться сервисом Ngrok Он выдаст вам https-адрес, и будет перенаправлять пакеты к вам на локальную машину. Но при этом все равно нужно воспользоваться urlacl как написано здесь а в качестве certhash прописать хэш от ngrok — 53e6c6860a403880ad77703a8b6d4bd1d4dcc451.

После этого вы сможете запустить бота даже на своей локальной машине, указав в качестве ссылки для SetWebhook ту, что вам даст ngrok.

Я решил пойти более сложным путем и получить свой собственный сертификат. Так вышло, что у меня есть VPS-сервер на WIndows от parking.ru, и я захотел развернуть приложение бота на нем. Я нашел замечательный сервис Startssl. Для начала они мне выдали сертификат на мою почту (Email Validation). Потом я понял что нельзя выпустить сертификат на IP адрес моего сервера, но у меня был доменный адрес. Я сделал поддомен bott.mydomainname.ru и перенаправил его на IP моего сервера с помощью настроек DNS в панели управления доменом. Просто сделал там DNS-запись «bott.mydomainname.ru IN A 1.2.3.4» где указал IP своего сервера. Затем пришлось слегка разобраться с IIS — Startssl выдал мне html файл для подтверждения домена (опция Website control validation), который должен был быть доступен по адресу типа http://bott.mydomainname.ru/startssl_answer.html. На этом этапе я запустил IIS и сделал статичный сайт из этой самой одной html-странички. После этого мне выдали сертификат на год для моего домена, я его установил и его хэш указал в urlacl для параметра certhash.

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

Для подключения к Mega.nz я воспользовался библиотекой MegaApiClient . К сожалению, не получилось использовать её в анонимном режиме, и я просто подключился под новым обычным аккаунтом. Это может стать проблемой, если место в 50 ГБ у него кончится, но пока хватает.

Метрики и производительность.
Для сбора метрик есть два хороших сервиса — это Appmetrica от Яндекс а также Botan. В первом случае есть готовая библиотека Nuget, во втором можно использовать простые Http вызовы сервиса Botan.

Я воспользовался решением от Яндекс, но скорее в режиме тестирования — не собираю много информации, и не делаю сложной аналитики.

Насчет производительности, не проверял как мой бот поведет себя под нагрузкой. Он использует кучу сторонних dll — Owin, newtonsoft.Json, Nlog, Yandex.Metrica. Надо бы протестировать, так как в описании конкурса говорилось что бот должен быть реально быстрый. Также я пока не добавлял связь с БД, для хранения расшаренных пользователем ссылок, пока храню в памяти.

Дополнения
Еще был интересен вопрос перевода приложения. Сейчас бот по умолчанию на английском, но планирую сделать и русский интерфейс. Перевод, как оказалось, легко делается через добавление в Visual Studio Resources file со строками, к нему генерируется класс, у которого можно поменять свойство Culture и для разных языков будут выдаваться разные строки. Выбор языка пользователем можно сделать как через команду, так и через отправку ему встроенной клавиатуры с флажками разных стран при старте диалога пользователя и бота. Пока что я еще не экспериментировал со встроенными клавиатурами и редактированием сообщений, которое появилось недавно, 15 мая.

Читать еще:  Как узнать кто заходил в телеграмме

Никнейм бота -@meganzbot
Если у вас есть вопросы, с удовольствием отвечу в этой теме.

Бот для Telegram на Python: от первой строчки кода до запуска на Heroku

Бот для Telegram на Python: от первой строчки кода до запуска на Heroku

    Переводы , 3 июля 2017 в 0:35

В этом руководстве мы разберём процесс написания простого Telegram-бота на Python и его запуска на сервере Heroku. Но сперва давайте выясним, зачем вообще нужны боты и почему вам стоит написать своего.

Вступление

На первый взгляд, Telegram — это просто очередной мессенджер. Реклама гласит, что он быстр, защищён, в нём нет рекламы и всё такое. Но у него есть важная фича — боты!

Бот — это не просто «автоответчик». Его правильнее считать автоматизированным помощником. Представим, что вы хотите поделиться в групповом чате видео с YouTube, но ссылки у вас нет.

Вот стандартный алгоритм действий без бота:

  • открываем YouTube в браузере;
  • находим видео;
  • нажимаем на «Поделиться» (и надеемся, что в списке будет наш мессенджер);
  • если нашего мессенджера в списке не оказалось, копируем ссылку на видео;
  • возвращаемся в мессенджер и делимся ссылкой.

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

  • переписываемся в мессенджере;
  • вводим @vid и название видео, которое вы хотите найти и скинуть в беседу;
  • отправляем его.

Удобно, не правда ли? И это лишь одна из возможностей.

Ивент переехал в онлайн, есть новые даты ( 14 – 15 июля ) , Москва и онлайн, 10 750–138 000 ₽

Telegram позволяет пользователям создавать своих ботов. Ответим на вопрос «Почему мне стоит написать своего?» — это, пожалуй, самый простой способ понять, что такое API.

Круто, начинаем писать бота?

Обо всём по порядку. Сперва нужно зарегистрироваться в Telegram. Наиболее удобно использовать веб-клиент для знакомства с основными принципами работы ботов и API.

Откройте приложение, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. После выполнения первых шагов вы получите:

Собственно, вот и всё. На данном этапе ваш бот полностью пассивен.

Вам нужно начать беседу с ботом. Введите в поисковой строке его имя и нажмите на кнопку /start . Отправьте сообщение, например, «Привет». Это первое сообщение очень важно, поскольку оно станет первым обновлением, которое получит ваш бот.

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

Открыв этот адрес в браузере, вы отправите запрос на сервер Telegram, и он ответит вам в формате JSON. Ответ чем-то похож на словарь в Python. Вы увидите что-то вроде такого:

Если вы изучите раздел метода /sendMessage в документации, то увидите, что он принимает два параметра: chat_id и text . Вы можете создавать цепочки параметров в адресной строке браузера, используя ? для первого и & для всех последующих. Команда для отправки сообщения будет выглядеть так:

Попробуйте получить ответ от вашего бота, подставив в качестве chat_id значение, полученное после вызова /getUpdates (в нашем примере — 303262877 ). Текст сообщения может быть любым. Запрос должен выглядеть примерно так:

И когда же будет код?

Если вы пользуетесь Windows и у вас не установлен Python, скачать его можно с официального сайта. Вообще версия не важна, но в этой статье будет использоваться Python 3.x. Если же у вас Linux или macOS, то обе версии (или, как минимум, Python 2.x) уже установлены.

Затем нужно установить pip. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip —version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

Загвоздка в том, что разные версии Python используют разные pip. Если у вас macOS, вы можете попробовать следовать советам со Stack Overflow. В случае с Windows вам нужно скачать get-pip.py, открыть командную строку, перейти в директорию со скачанным файлом и выполнить команду:

Самое сложное позади. Установим пакет requests при помощи pip:

А теперь — код

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

Сперва бот должен проверить обновления. Первое сообщение можно расценивать как самое свежее, но getUpdates возвращает все обновления за последние 24 часа. Напишем небольшой скрипт, чтобы получить самое последнее обновление:

Словарь обновлений состоит из двух элементов: ok и results . Нас интересует вторая часть — список всех обновлений, полученных ботом за последние 24 часа.

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

Теперь нужно добавить ещё 2 функции. Первая будет доставать chat_id из обновления, а вторая — отправлять сообщение.

Помните, как мы объединяли параметры при помощи ? и & ? Вы можете сделать то же самое, добавив словарь в качестве второго дополнительного параметра в функциях get / post из пакета requests.

Скрипт готов, но он не идеален. Главным минусом является необходимость запускать его каждый раз, когда мы хотим, чтобы бот отправил сообщение. Исправим это. Чтобы бот слушал сервер и получал обновления, нам нужно запустить основной цикл. На новой строке, после import requests , добавьте from time import sleep . После этого замените две последние строки на следующий код:

Хотя мы и добавили таймаут в 1 секунду, пример выше можно использовать только в обучающих целях, поскольку он использует частые опросы (short polling). Это плохо влияет на сервера Telegram, поэтому их нужно избегать. Есть ещё два способа получения обновлений через API — длинные опросы (long polling) и вебхуки (webhooks). Если мы будем использовать способ получения обновлений через getUpdates без параметров, то запросы будут происходить слишком часто.

Поскольку мы начали использовать в скрипте основной цикл, мы должны переключиться на длинные опросы. Сперва изменим первую функцию, добавив в неё параметр timeout . Сам по себе он не уменьшит частоту проверки обновлений и будет работать только в том случае, когда обновлений нет. Чтобы помечать уже просмотренные обновления, нужно добавить параметр сдвига offset :

Теперь бот должен работать нормально, но его всё ещё можно улучшить. Давайте инкапсулируем все функции в один класс. Должно получиться что-то вроде этого:

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

Теперь вы можете улучшать бота так, как захотите. Можно, например, настроить отправку медиафайлов или добавить собственные кнопки.

Устрой деплой

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

Сперва зарегистрируйтесь на GitHub. Создайте аккаунт (рано или поздно он вам точно пригодится) и установите Git. На Linux выполните следующую команду:

На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku.

Теперь вам нужно навести порядок в файлах. Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv :

Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env .

Теперь вам нужно склонировать git-репозиторий. Введите следующую команду:

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

Вернитесь в папку my_env и запустите virtualenv :

Если вы успешно запустили virtualenv , приглашение командной строки должно начинаться с (my_env).

Перейдите в папку репозитория и ещё раз установите модуль requests:

Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:

Создайте Procfile . В этом файле вам нужно разместить инструкции по работе с вашим скриптом. Имя файла обязательно должно быть Procfile ( Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):

Добавьте файл __init__.py в вашу папку. Он может быть пустым, но он должен там быть.

Отправьте коммит с изменениями в репозиторий:

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

Рассмотрим лишь те действия, которые нужны для развёртывания приложения. Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду.

Если вы пользуетесь Ubuntu, используйте следующие команды:

Если возникнут ошибки, проверьте, присутствуют ли все зависимости.

Теперь выполните следующие команды:

С этого момента ваше приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:

Коды ошибок можно найти на сайте Heroku.

Бесплатный аккаунт накладывает некоторые ограничения. Тем не менее теперь у вас есть полностью рабочий бот — поздравляем! Продолжить изучение возможностей ботов для Telegram вам поможет видеокурс — в нём используют PHP, но суть остаётся той же.

О том, как написать telegram бота

Для тех, кто хотел написать телеграмм бота, но не понимал, как это работает я снял ознакомительное видео. А то в рунете не очень много информации по этой теме.
Про bot API, Webhook и getUpdates.. А то без информации о разработке совсем нет духа Open Source

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

я как разработчик говорю это. нафиг мне терять время, смотря мультики, если мне нужна конкретная информация? с примерами и описанием этих примеров.

посмотрите хотя бы посты здесь на пикабу про то как человек учит писать игры на С++.

очень доступно понятно, и, главное, без тупой видео-воды

главное здесь на что заточен сенсей. Если на поднятие ЧСВ через педагогику, то будет текст. Если ютубодрочер с подключенной монетизацией, то будет мультик.

Читать еще:  Каталог телеграм ботов

Вроде норм, не знаю, почему тебя заминусили, парень!

Кто хочет может пользоваться моей разработкой – бесплатный визуальный редактор для ботов telegram.

Ух ты, куча полезной информации! Я первак, и для сдачи латеха нам задали написать проект(материалы проекта будут основой для отчета по латеху), в общем неважно. Получила больше полезной информации за 6 минут, чем за 5 часов вчерашнего чтения документации бот апи и разбора питон-кодов. Продолжай, пожалуйста!

Телеграм-бот, помогающий оформить фото на документы

Возникла у меня тут в очередной раз задача сделать фото для документов. Обычно, я в таком случае фотографируюсь на фоне холодильника на телефон, в ФШ поворачиваю, кадрирую и вырезаю фон. В этот раз мне даже на бумаге печатать фото было не нужно. Но блин, 2020 на дворе, нейросети там и AI, неужели я должен как 10 лет назад это делать руками? Иду в интернет, и что я там вижу: все сервисы подобного рода делятся на 3 типа:

1) Не вырезает фон впринципе, предлагает кадрировать и цвет покрутить

2) Предлагает вырезать фон руками в браузере инструментом аля MS Paint

3) Делает все как я хочу, но просит за одно фото 300р (. )

Приложения в Google Play примерно такие же.

Короче пришлось делать на коленке, самому. Находясь в короновирусной самоизоляции, освободилось прилично времени для таких вот проектов. Родилось вот что: https://t.me/PassportPhoto_bot

Пока что бот имеет довольно скромный функционал: на первом этапе распознаются глаза, подбородок и макушка, кадр поворачивается и зумится так, чтобы выполнялись требования большинства ведомств (ориентировался на шенген, но на загранник или паспорт РФ тоже должно проканать). Далее, нейросетью обрезается фон, и фото готово для скачивания. Элементов управления — по минимуму. Сейчас бот живет на довольно скромном железе, поэтому чутка задумчивый 🙂 Гора возможных улучшений поселилась в беклоге, буду дорабатывать по мере появления времени.

Никаких денег за работу бот не берет, только добровольные донаты 🙂

Противникам голосовых сообщений

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

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

Если не хотите добавлять бота в чат, то можете просто пересылать ему голосовые сообщения, а в ответ бот пришлет текст:

Добавить бота себе можно по ссылке — https://t.me/VoiceMsgBot

Отзывы и пожелания по функционалу приветствуются.

Lovebot — обновление 0.9

Наконец обновление дописано и выложено! )

Сразу и по порядку:

1) Изменена регистрация:

Теперь она намного удобнее и очевиднее!

Достаточно просто отправить команду(или проследовать по подсказкам бота, если Вы в первый раз зашли), а дальше по инструкции. Главное отправить фото, как фото, а не как файл 😉

2) Время отдачи анкеты

Раньше, в самой первой версии, на выдачу анкеты тратилось около 2х секунд. Теперь же цифры совершенно иные:

То есть в среднем около 0,003 на поиск.

Тут даже нет смысла расписывать )

3) Появился поиск

Который тоже, надеюсь, удобен и очевиден.

Так же его можно досрочно закончить, просто нажав «Начать поиск»!

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

P.s. из-за появления поиска, старые анкеты пришлось удалить, сразу прошу за это прощения и обещаю, что такое больше не повториться.

Тариф День Рождения от РЖД или как экономить от 40% до 80% на билеты Сапсан. Личный опыт.

В начале этого года я столкнулся с проблемой найти среди своих коллег человека, кто был бы не против воспользоваться Сапсаном и в нужные мне даты съездить со мной в Москву из СПб и обратно (или только в одну сторону). Мне было важно найти не просто попутчика, а пассажира, чья дата рождения совпадала или лежала в интервале 14 дней с предполагаемой датой моей поездки для того, чтобы мы могли вмести купить в кассе РЖД билеты на поезд Сапсан со скидкой в 50% для каждого. Я не смог осуществить задуманное, но задумался, что если бы я не ограничивался стенами офиса, то мог бы купить билет со скидкой и поехать с кем-то еще, возможно, даже с незнакомым мне человеком.

После этого я создал бота в Телеграм T.me/Allo812Bot, который помогает регулярно пользоваться льготным тарифом «День рождения» для проезда в поездах «Сапсан».

T.me/Allo812Bot ищет людей, которые могут применить тариф День Рождения от РЖД и помогает найти пассажиров-попутчиков, чтобы купить билет со скидкой от 60% до 80%.

С его помощью можно также найти пассажира-именинника и каждый раз при покупке билетов на скоростной поезд Сапсан экономить 40% от их общей стоимости

(см. раздел Правила в T.me/Allo812Bot).

Одна из решенных технических проблем

После блокировки Телеграм в апреле встал вопрос, как технически организовать оплату, потому что SberbankPaymentBot, платежный бот Яндекс.Касса, иностранные платежные сервисы не позволяли подключить эквайринг к боту в Телеграм. Последовательно осуществлялись попытки подключить каждую из них. Одновременно придумал альтернативное техническое решение, которое позволяет принимать платежи пользователей, сохранив эквайринг от Сбербанк. Я изучал опыт других каналов и ботов, мое решение по приему платежей оказалось в чем-то техническим ноу-хаю в текущей ситуации с блокировкой.

Я хочу узнать мнение у аудитории Pikabu на мой сервис, хочу предложить вам присоединиться к нему T.me/Allo812Bot и пополнить таким образом сообщество (сейчас оно n-тысяч), чтобы каждый мог регулярно экономить деньги и планировать поездки по маршрутам следования Сапсанов.

Если у вас есть идеи или советы, как правильно продвигать этот бот онлайн/оффлайн, мне будет тоже интересно это услышать. Спасибо

Игра Bastion Siege – новое творение

Доброго времени суток, Пикабу. Сегодня хочу представить вам своего второго бота, который по совместительству является многопользовательской текстовой стратегией. Встречайте – Bastion Siege.

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

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

Игроку предоставляются владения в которых он может строить конкретные здания и улучшать их.

Изначально уже построены ратуша и дома. Ратуша отвечает за налоги и казну, дома необходимы для расселения новых жителей, которые в свою очередь являются источником рабочей силы, доходов казны, а так же необходимы для строительства личной армии. Чем больше свободных жителей (свободные жители – жители которые не работают и не состоят на службе, отображаются в информации главного меню), тем больше дохода в казну. Однако их в свою очередь нужно кормить. Голодные жители платят вдвое меньше. А если еды нет вовсе, приток жителей останавливается. Чтобы этого не случилось, вашим владениям понадобится ферма.

Ферма производит еду, необходимую для обеспечения жителей каждый игровой день (одна минута), а так же для организации военных походов. Но мало просто производить еду. Её еще необходимо доставить на основной склад, откуда уже и начнется потребление.

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

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

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

Сезон и погода пока формальны и просто создают атмосферу для фантазии игроков. Но в дальнейшем на эти два параметра есть некоторые планы.

Наверное самая первостепенная цель игры – воевать с другими игроками за территорию и золото. Для этого понадобятся казармы. Изначально их у игрока нет. Это не позволяет атаковать, но так же защищает от возможности быть атакованным, что в свою очередь позволяет тихо, мирно разобраться в игре, почитать описание разделов.

Но как только игрок обзаведется казармами, о спокойно жизни можно забыть. Атаковать других игроков можно не чаще чем раз в 10 минут. Быть атакованным – раз в 30 минут. Бои длятся в зависимости от количества войск с обоих сторон. В текущей реализации у топовых игроков это время достигает до получаса. Бой происходит следующим образом – каждую секунду сталкиваются в поединке два воина каждой армии. Если армии равны по численности, то у каждого из воинов шанс убить другого равняется 45%. 10% остается на ситуацию, когда они убивают друг друга. При разнице количества войск процентное соотношение сдвигается на 5% (в отрицательную у меньшего войска и в положительную у большего). Побеждает тот игрок, чья армия выживет. В награду он получает часть казны и территории врага. И конечно же увеличивает счетчик побед.

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

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

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

Игра реализована на языке Go и до первого запуска на боевом окружении было потрачено примерно месяц вечеров разработки. Многие вещи в игре слабо освещены, есть некоторые неточности в описаниях, но со временем это будет исправлено и дополнено (я искренне надеюсь).

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

Ключевой параметр в конце ссылки даст вам в подарок немного золота. 🙂

Ну а игровой чат, если он вам понадобится, вы найдете внутри игры без особого труда.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector
×
×