devnull не нужен пишем бота на Python, который будет присылать свежие мемасики


Оглавление (нажмите, чтобы открыть):

Как сделать бота, кликающего по элементам на сайте с ajax?

25.11.2013, 17:12

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

Как применить код ко всем элементам на сайте
Как применить код ко ВСЕМ элементам на сайте?

Как сделать отвечающего бота?
помогите пажалуйста. не могу разобраться! как с помощью php сделать отвечающего бота ? типо есть.

как сделать на php сервер для icq бота
как сделать на хостинге при помощие php сервер для icq бота, чтобы он постоянно был онлайн

Как сделать или где скачать бота для вк?
Чтобы он отправлял в указанное время определённое сообщение одному из друзей вк.

25.11.2013, 18:36 2

Чем автоматизировать заполнение форм в браузере (создание ботов)

Автор: Igor Kirsanov

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

1) Селениум
Selenium, это не химический элемент селен, это инструмент для тестирования сайтов. Предназначен он в первую очередь для тестирования, т.е. можно сделать программу и смотреть как запускаются браузер, в нем робот ходит по страничкам, кликает по ссылкам, загружает файлы и т.п.

Лично мне нравится модуль под язык программирования питон, хотя доступно и для других языков, а также автономная IDE для браузера firefox.
Установка для питона достаточно простая
С сайта seleniumhq.org загружаем Selenium Client Drivers для python, распаковываем и устанавливаем как обычно, для виндовс через файл setup.py -install
Пример программы на python

В данном примере запускается браузер Mozilla Firefox, скрипт переходит на страницу поиска яндекса. В строке поиска набирает название этого сайта www.site.com и нажимает кнопку поиска.

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

Делаем ботнет на Python

Мы создадим простого управляемого бота, который будет получать команды из ленты твиттера и выполнять их на клиентской машине. Для работы с Twitter API, установите пакет python-twitter .

В качестве рабочего окружения я буду использовать python2.7 под virtualenv, и один из дистрибутивов GNU/Linux. Программа-клиент будет работать в бесконечном цикле, периодически получая команды из твиттера.

Сохраните следующий код в файле twibot.py.

Имя вашего Twitter-аккаунта необходимо задать в переменной TWITTER_USERNAME .

Запустим и проверим работу нашего скрипта.

Теперь опубликуем тестовый твит.

Снова откроем окно с запущенным ботом, и подождем пару секунд.

Как сделать так, чтобы бот отправлял сообщения каждый раз, когда ему написал пользователь?

Всем привет!
Подскажите, пожалуйста, как сделать так, чтобы бот отправлял сообщения каждый раз, когда ему написал пользователь? я пока понятия не имею как это реализовать, у меня бот отправляет сообщения только в том случае, если я запущу код, получается каждый раз нужно запускать код..
спасибо.
вот код:

2 Answers

1) Создаёшь бесконечный цикл, в котором получаешь с помощью методов long pool новые сообщения

2) Обходишь ещё одним циклом все новые сообщения, и на каждое шлёшь ответ

В целом, нужно использовать callback api. Но он подходит только для групп.

Привожу в пример класс, позволяющий получать обновления в отдельном потоке/процессе:

Как отправить картинку пользователю с помощью бота в вк [закрыт]

Язык Python, библиотека vk_api.
Проверял множество способов которые нашел в интернете, но ничего не работает.
Мне нужно когда пользоветель отправляет боту команду /tabl , бот отсылал картинку.

Проблема в том, что я немогу отсылать картинку.
Помогите кто знает.

Закрыт по причине того, что не по теме участниками 0xdb, nomnoms12, L.F.C., MaximLensky, VTT 24 авг в 18:40 .

Похоже, этот вопрос не соответствует тематике сайта. Те, кто голосовал за его закрытие, указывали следующую причину:

  • «Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.» – 0xdb, nomnoms12, L.F.C., MaximLensky, VTT

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

1 ответ 1

Для загрузки фотографии на сервер ВК используется класс VkUpload и его метод photo_messages .

Данный метод вернёт нам ответ, из которого нам необходимо извлечь owner_id , id и access_key . Данные значения нам нужны для формирования attachment ‘а к сообщению.

attachment имеет следующий вид: f’__‘ .
Иногда access_key можно опустить, но для отправки в сообщениях он нужен.

Формируем его с типом photo и значениями, полученными выше.
Чтобы приложить его к сообщению, используется поле с тем же названием — attachment .

Пример:


Данный код отправит в беседу (или ЛС) c peer_id равным PEER_ID изображение photo.jpg

Не забудьте заменить в начале кода переменные TOKEN ( access_token ) и PEER_ID на соответствующие им свои значения.

UPD:

Для отправки фото по URL его все равно придётся загрузить (хотя бы в ОЗУ).
Для этого можно воспользоваться модулями requests и io .

Как создать чат-бота с нуля на Python: подробная инструкция

Аналитики Gartner утверждают, что к 2020 году 85% взаимодействий клиентов с сервисами сведется к общению с чат-ботами. В 2020 году они уже обрабатывают около 30% операций. В этой статье мы расскажем, как создать своего чат-бота на Python.

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

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

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

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

Итак, что такое чат-бот?

Чат-бот — это программа, которая выясняет потребности пользователей, а затем помогает удовлетворить их (денежная транзакция, бронирование отелей, составление документов). Сегодня почти каждая компания имеет чат-бота для взаимодействия с пользователями. Некоторые способы использования чат-ботов:

  • предоставление информации о рейсе;
  • предоставление пользователям доступа к информации об их финансах;
  • служба поддержки.

История чат-ботов восходит к 1966 году, когда Джозеф Вейценбаум разработал компьютерную программу ELIZA. Программа подражает манере речи психотерапевта и состоит лишь из 200 строк кода. Пообщаться с Элизой можно до сих пор на сайте.

Как работает чат-бот?

Существует два типа ботов: работающие по правилам и самообучающиеся.

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

В поисковых ботах используются эвристические методы для выбора ответа из библиотеки предопределенных реплик. Такие чат-боты используют текст сообщения и контекст диалога для выбора ответа из предопределенного списка. Контекст включает в себя текущее положение в древе диалога, все предыдущие сообщения и сохраненные ранее переменные (например, имя пользователя). Эвристика для выбора ответа может быть спроектирована по-разному : от условной логики «или-или» до машинных классификаторов.

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

В этой статье мы научимся писать код простых поисковых чат-ботов на основе библиотеки NLTK.

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

Предполагается, что вы умеете пользоваться библиотеками scikit и NLTK. Однако, если вы новичок в обработке естественного языка (NLP), вы все равно можете прочитать статью, а затем изучить соответствующую литературу.

Обработка естественного языка (NLP)

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

Краткое введение в NLKT

NLTK (Natural Language Toolkit) — платформа для создания программ на Python для работы с естественной речью. NLKT предоставляет простые в использовании интерфейсы для более чем 50 корпораций и лингвистических ресурсов, таких как WordNet, а также набор библиотек для обработки текста в целях классификации, токенизации, генерации, тегирования, синтаксического анализа и понимания семантики, создания оболочки библиотек NLP для коммерческого применения.

Книга Natural Language Processing with Python — практическое введение в программирование для обработки языка. Рекомендуем ее прочитать, если вы владеете английским языком.

Мастер Йода рекомендует:  Автоматический таргетинг от Яндекс.Директ

Загрузка и установка NLTK

  • Установите NLTK: запустите pip install nltk.
  • Тестовая установка: запустите python, затем введите import nltk.

Инструкции для конкретных платформ смотрите здесь.

Установка пакетов NLTK

Импортируйте NLTK и запустите nltk.download(). Это откроет загрузчик NLTK, где вы сможете выбрать версию кода и модели для загрузки. Вы также можете загрузить все пакеты сразу.

Предварительная обработка текста с помощью NLTK

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

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

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


  • Удаление шума, то есть всего, что не является цифрой или буквой;
  • Удаление стоп-слов. Иногда из словаря полностью исключаются некоторые крайне распространенные слова, которые, как считается, не имеют большого значения для формирования ответа на вопрос пользователя. Эти слова называются стоп-словами (междометия, артикли, некоторые вводные слова);
  • Cтемминг: приведение слова к коренному значению. Например, если нам нужно провести стемминг слов «стемы», «стемминг», «стемированный» и «стемизация», результатом будет одно слово — «стем».
  • Лемматизация. Лемматизация — немного отличающийся от стемминга метод. Основное различие между ними заключается в том, что стемминг часто создает несуществующие слова, тогда как лемма — это реально существующее слово. Таким образом, ваш исходный стем, то есть слово, которое получается после стемминга, не всегда можно найти в словаре, а лемму — можно. Пример лемматизации: «run» — основа для слов «running» или «ran», а «better» и «good» находятся в одной и той же лемме и потому считаются одинаковыми.

Набор слов

После первого этапа предварительной обработки нужно преобразовать текст в вектор (или массив) чисел. «Набор слов» — это представление текста, описывающего наличие слов в тексте. «Набор слов» состоит из:

  • словаря известных слов;
  • частот, с которыми каждое слово встречается в тексте.

Почему используется слово «набор»? Это связано с тем, что информация о порядке или структуре слов в тексте отбрасывается, и модель учитывает только то, как часто определенные слова встречаются в тексте, но не то, где именно они находятся.

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

Например, если словарь содержит слова и мы хотим составить вектор предложения “Learning is great”, получится вектор (1, 1, 0, 0, 1).

Метод TF-IDF

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

Один из подходов к решению этих проблем состоит в том, чтобы вычислять частоту появления слова не в одном тексте, а во всех сразу. За счет этого вклад, например, артиклей «a» и «the» будет нивелирован. Такой подход называется TF-IDF (Term Frequency-Inverse Document Frequency) и состоит из двух этапов:

  • TF — вычисление частоты появления слова в одном тексте
  • IDF — вычисление того, на сколько редко слово встречается во всех текстах

Коэффициент TF-IDF — это вес, часто используемый для обработки информации и интеллектуального анализа текста. Он является статистической мерой, используемой для оценки важности слова для текста в некотором наборе текстов.

Пример

Рассмотрим текст, содержащий 100 слов, в котором слово «телефон» появляется 5 раз. Параметр TF для слова «телефон» равен (5/100) = 0,05.

Теперь предположим, что у нас 10 миллионов документов, и слово телефон появляется в тысяче из них. Коэффициент вычисляется как 1+log(10 000 000/1000) = 4. Таким образом, TD- >

TF-IDF может быть реализован в scikit так:

Коэффициент Отиаи

TF-IDF — это преобразование, применяемое к текстам для получения двух вещественных векторов в векторном пространстве. Тогда мы можем получить коэффициент Отиаи любой пары векторов, вычислив их поэлементное произведение и разделив его на произведение их норм. Таким образом, получается косинус угла между векторами. Коэффициент Отиаи является мерой сходства между двумя ненулевыми векторами. Используя эту формулу, можно вычислить схожесть между любыми двумя текстами d1 и d2.

Здесь d1, d2 — два ненулевых вектора.

Подробное объяснение и практический пример TF-IDF и коэффициента Отиаи приведены в посте по ссылке.

Пришло время перейти к решению нашей задачи, то есть созданию чат-бота. Назовем его «ROBO».

Обучение чат-бота

В нашем примере мы будем использовать страницу Википедии в качестве текста. Скопируйте содержимое страницы и поместите его в текстовый файл под названием «chatbot.txt». Можете сразу использовать другой текст.

Импорт необходимых библиотек

Чтение данных

Выполним чтение файла corpus.txt и преобразуем весь текст в список предложений и список слов для дальнейшей предварительной обработки.

Давайте рассмотрим пример файлов sent_tokens и word_tokens

Предварительная обработка исходного текста

Теперь определим функцию LemTokens, которая примет в качестве входных параметров токены и выдаст нормированные токены.

Подбор ключевых слов

Определим реплику-приветствие бота. Если пользователь приветствует бота, бот поздоровается в ответ. В ELIZA используется простое сопоставление ключевых слов для приветствий. Будем использовать ту же идею.

Генерация ответа

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

  • Импортируйте векторизатор TFidf из библиотеки, чтобы преобразовать набор необработанных текстов в матрицу свойств TF-IDF.
  • Кроме того, импортируйте модуль коэффициента Отиаи из библиотеки scikit

Этот модуль будет использоваться для поиска в запросе пользователя ключевых слов. Это самый простой способ создать чат-бота.


Определим функцию отклика, которая возвращает один из нескольких возможных ответов. Если запрос не соответствует ни одному ключевому слову, бот выдает ответ «Извините! Я вас не понимаю».

Наконец, мы задаем реплики бота в начале и конце переписки, в зависимости от реплик пользователя.

Вот и все. Мы написали код нашего первого бота в NLTK. Здесь вы можете найти весь код вместе с текстом. Теперь давайте посмотрим, как он взаимодействует с людьми:

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

Заключение

Хотя наш примитивный бот едва ли обладает когнитивными навыками, это был неплохой способ разобраться с NLP и узнать о работе чат-ботов. «ROBO», по крайней мере, отвечает на запросы пользователя. Он, конечно, не обманет ваших друзей, и для коммерческой системы вы захотите рассмотреть одну из существующих бот-платформ или фреймворки, но этот пример поможет вам продумать архитектуру бота.

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

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

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

Шаг №0: немного теории об API Telegram-ботов

Начать руководство стоит с простого вопроса: как создавать чат-ботов в Telegram?

Ответ очень простой: для чтения сообщений отправленных пользователями и для отправки сообщений назад используется API HTML. Это требует использования URL:

Токен — уникальная строка из символов, которая нужна для того, чтобы установить подлинность бота в системе. Токен генерируется при создании бота. METHOD_NAME — это метод, например, getUpdates , sendMessage , getChat и так далее.

Токен выглядит приблизительно так:

Для выполнения запросов используются как GET, так и POST запросы. Многие методы требуют дополнительных параметров (методу sendMessage , например, нужно передать chat_ >

После отправки запроса к API, вы получаете ответ в формате JSON. Например, если извлечь данные с помощью метода getME , ответ будет такой:

Если значение ‘ok’ — true, значит запрос был успешным и результат отобразится в поле ‘field’. Если false — в поле ‘description’ будет сообщение об ошибке.

Список всех типов данных и методов API Telegram-бота можно найти здесь (ENG) или с переводом здесь (ру) .

Тест на знание python

Следующий вопрос: как получать пользовательские сообщения?

Есть два варианта.

Первый — вручную создавать запросы с помощью метода getUpdates . В качестве объекта вы получите массив объектов Update . Этот метод работает как технология длинных опросов (long polling), когда вы отправляете запрос, обрабатываете данные и начинаете повторяете процесс. Чтобы избежать повторной обработки одних и тех же данных рекомендуется использовать параметр offset .

Второй вариант — использовать webhooks. Метод setWebhook нужно будет применить только один раз. После этого Telegram будет отправлять все обновления на конкретный URL-адрес, как только они появятся. Единственное ограничение — необходим HTTPS, но можно использовать и сертификаты, заверенные самостоятельно.

Как выбрать оптимальный метод? Метод getUpdates лучше всего подходит, если:

  1. Вы не хотите или не можете настраивать HTTPS во время разработки.
  2. Вы работаете со скриптовыми языками, которые сложно интегрировать в веб-сервер.
  3. У бота высокая нагрузка.
  4. Вы меняете сервер бота время от времени.

Метод с Webhook лучше подойдет в таких случаях:

  1. Вы используете веб-языки (например, PHP).
  2. У бота низкая нагрузка, и нет смысла делать запросы вручную.
  3. Бот на постоянной основе интегрирован в веб-сервер.

В этом руководстве будет использоваться метод getUpdates .

Еще один вопрос: как создать зарегистрировать бота?

@BotFather используется для создания ботов в Telegram. Он также отвечает за базовую настройку (описание, фото профиля, встроенная поддержка и так далее).

По своей сути, все эти библиотеки — оболочки HTML-запросов. Большая часть из них написана с помощью принципов ООП. Типы данных Telegram Bot API представлены в виде классов.

В этом руководстве будет использоваться библиотека pyTelegramBotApi.

Шаг №1: реализовать запросы курсов валют

Весь код был проверен на версии Python==3.7 c использование библиотек:
pyTelegramBotAPI==3.6.6
pytz==2020.1
requests==2.7.0

Начать стоит с написания Python-скрипта, который будет реализовывать логику конкретных запросов курсов валют. Использовать будем PrivatBank API. URL: https://api.privatbank.ua/p24api/pubinfo?json&exchange&cours >Пример ответа:

Создадим файл pb.py со следующим кодом:

Были реализованы три метода:

  • load_exchange : загружает курсы валют по указанному URL-адресу и возвращает их в формате словаря(dict).
  • get_exchange : возвращает курсы валют по запрошенной валюте.
  • get_exchanges : возвращает список валют в соответствии с шаблоном (требуется для поиска валют во встроенных запросах).

Шаг №2: создать Telegram-бота с помощью @BotFather

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

Его нужно сразу настроить. Необходимо добавить описание и текст о боте (команды /setdescription и /setabouttext ), фото профиля ( /setuserpic ), включить встроенный режим ( /setinline ), добавить описания команд ( /setcommands ). Потребуется использовать две команды: /help и /exchange . Стоит описать их в /setcommands .

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


Шаг №3: настроить и запустить бота

Начнем с создания файла config.py для настройки:

В этом файле указаны: токен бота и часовой пояс, в котором тот будет работать (это понадобится в будущем для определения времени обновления сообщений. API Telegram не позволяет видеть временную зону пользователя, поэтому время обновления должно отображаться с подсказкой о часовом поясе).

Создадим файл bot.py . Нужно импортировать все необходимые библиотеки, файлы с настройками и предварительно созданный pb.py . Если каких-то библиотек не хватает, их можно установить с помощью pip .

Создадим бота с помощью библиотеки pyTelegramBotAPI. Для этого конструктору нужно передать токен:

Шаг №4: написать обработчик команды /start

Теперь чат-бот на Python работает и постоянно посылает запросы с помощью метода getUpdates . Параметр none_stop отвечает за то, чтобы запросы отправлялись, даже если API возвращает ошибку при выполнении метода.

Из переменной бота возможно вызывать любые методы API Telegram-бота.

Начнем с написания обработчика команды /start и добавим его перед строкой bot.polling(none_stop=True) :

Как можно видеть, pyTelegramBotApi использует декораторы Python для запуска обработчиков разных команд Telegram. Также можно перехватывать сообщения с помощью регулярных выражений, узнавать тип содержимого в них и лямбда-функции.

В нашем случае если условие commands=[‘start’] равно True , тогда будет вызвана функция start_command . Объект сообщения (десериализованный тип Message ) будет передан функции. После этого вы просто запускаете send_message в том же чате с конкретным сообщением.

Это было просто, не так ли?

Шаг №5: создать обработчик команды /help

Давайте оживим обработчик команды /help с помощью встроенной кнопки со ссылкой на ваш аккаунт в Telegram. Кнопку можно озаглавить “Message the developer”.

Как видно в примере выше, был использован дополнительный параметр ( reply_markup ) для метода send_message . Метод получил встроенную клавиатуру ( InlineKeyboardMarkup ) с одной кнопкой ( InlineKeyboardButton ) и следующим текстом: “Message the developer” и url=’telegram.me/artiomtb’ .

Код выше выглядит вот так:

Шаг №6: добавить обработчик команды /exchange

Обработчик команды /exchange отображает меню выбора валюты и встроенную клавиатуру с 3 кнопками: USD, EUR и RUR (это валюты, поддерживаемые API банка).

Вот как работает InlineKeyboardButton . Когда пользователь нажимает на кнопку, вы получаете CallbackQuery (в параметре data содержится callback-data ) в getUpdates . Таким образом вы знаете, какую именно кнопку нажал пользователь, и как ее правильно обработать.

Вот как работает ответ /exchange:

Шаг №7: написать обработчик для кнопок встроенной клавиатуры

В библиотеке pyTelegramBot Api есть декоратор @bot.callback_query_handler , который передает объект CallbackQuery во вложенную функцию.

Давайте реализуем метод get_ex_callback :

Метод answer_callback_query нужен, чтобы убрать состояние загрузки, к которому переходит бот после нажатия кнопки. Отправим сообщение send_exchange_query . Ему нужно передать Message и код валюты (получить ее можно из query.data . Если это, например, get-USD, передавайте USD).

Все довольно просто.

Сперва отправим состояние ввода в чат, так чтобы бот показывал индикатор «набора текста», пока API банка получает запрос. Теперь вызовем метод get_exchange из файла pb.py , который получит код валюты (например, USD). Также нужно вызвать два новых метода в send_message: serialize_ex , сериализатор валюты и get_update_keyboard (который возвращает клавиатуре кнопки “Update” и “Share”).

Запишем в get_update_keyboard текущий курс валют в callback_data в форме JSON. JSON сжимается, потому что максимальный разрешенный размер файла равен 64 байтам.

Кнопка t значит тип, а e — обмен. Остальное выполнено по тому же принципу.

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

Методы serialize_ex и дополнительный serialize_exchange_diff нужны, чтобы показывать разницу между текущим и старыми курсами валют после нажатия кнопки Update .

Как видно, метод serialize_ex получает необязательный параметр diff . Ему будет передаваться разница между курсами обмена в формате <'buy_diff': , 'sale_diff': >. Это будет происходить во время сериализации после нажатия кнопки Update . Когда курсы валют отображаются первый раз, он нам не нужен.

Вот как будет выглядеть бот после нажатия кнопки USD:

Шаг №8: реализовать обработчик кнопки обновления

Теперь можно создать обработчик кнопки Update . После дополнения метода iq_callback_method он будет выглядеть следующим образом:

Если данные обратного вызова начинаются с get- ( get-USD , get-EUR и так далее), тогда нужно вызывать get_ex_callback , как раньше. В противном случае стоит попробовать разобрать строку JSON и получить ее ключ t . Если его значение равно u , тогда нужно вызвать метод edit_message_callback . Реализуем это:

Как это работает? Очень просто:

  1. Загружаем текущий курс валюты ( exchange_now = pb.get_exchange(data[‘c’]) ).
  2. Генерируем текст нового сообщения путем сериализации текущего курса валют с параметром diff , который можно получить с помощью новых методов (о них дальше). Также нужно добавить подпись — get_edited_signature .
  3. Вызываем метод edit_message_text , если оригинальное сообщение не изменилось. Если это ответ на встроенный запрос, передаем другие параметры.

Метод get_ex_from_iq_data разбирает JSON из callback_data :

Метод get_exchange_diff получает старое и текущее значение курсов валют и возвращает разницу в формате <'buy_diff': , 'sale_diff': >:

get_edited_signature генерирует текст “Updated…”:

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


И вот так — если изменились:

Шаг №9: реализовать встроенный режим

Реализация встроенного режима значит, что если пользователь введет @ + имя бота в любом чате, это активирует поиск введенного текста и выведет результаты. После нажатия на один из них бот отправит результат от вашего имени (с пометкой “via bot”).

Обработчик встроенных запросов реализован.

Библиотека передаст объект InlineQuery в функцию query_text . Внутри используется функция answer_line , которая должна получить inline_query_id и массив объектов (результаты поиска).

Используем get_exchanges для поиска нескольких валют, подходящих под запрос. Нужно передать этот массив методу get_iq_articles , который вернет массив из InlineQueryResultArticle :

Теперь при вводе “@exchangetestbost + пробел” вы увидите следующее:

Попробуем набрать usd, и результат мгновенно отфильтруется:

Проверим предложенный результат:

Кнопка “Update” тоже работает:

Отличная работа! Вы реализовали встроенный режим!

Выводы

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

Заметки, идеи и скрипты

Как сделать мир лучше с помощью компьютера

Постинг в канал telegram с помощью python или бот telegram в 3 строчки

Предположим надо написать телеграмм бота, который при появлении свежей новости на сайте пишет в канал. Практическое применение для меня было в том, что на одном сайте изредка появляется важная информация, которую пропускать не хотелось, но и постоянно мониторить сайт тоже. В итоге захотелось написать максимально простой и минималистичный python скрипт, выполнющий задачу постинга в канал telegram и не использующий даже базу данных. Такая простота достигается следующим образом: по крону раз в сутки запускается программа, которая вытягивает все новости за вчерашний день. Непосредственно отправление сообщения в канал занимает 3 строчки, подробнее об этом конце, а сейчас разделим задачу на несколько логических последовательных подзадач:

    Отслеживание появления новости

  • 1.1 Запрос html страницы (использование бибиотеки requests)
  • 1.2 Парсинг html страницы (здесь будем использовать питон библиотеку BeautifulSoup)
  • 1.3 разбивка списка новостей на старые и новые публикации
  • Отправка сообщения в телеграм канал

    • 2.1 Создание канала а также бота с помощью BotFather и добавление бота в администраторы канала
    • 2.2 Выбор библиотеки и её инициализация с помощью токена telegram, полученного от все того же BotFather (в нашем случае это библиотека python-telegram-bot )
    • 2.3 Отправка сообщения.
  • Настройка обработчика cron

    • раз в сутки: «1 12 * * * /path/to/bot.py >/dev/null 2>&1″

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

    Работа бота: как симулировать нажатия клавиш в Python

    Сегодня день рождения у Гвидо ван Россума, создателя Python. Поздравляем! Самое время поговорить о его детище и затронуть животрепещущую тему: как в Питоне имитировать нажатия клавиш при создании ботов. Суть бота — автоматическое выполнение действий, на которые не хочет тратить время человек. У программистов Python есть инструменты, позволяющие имитировать события клавиатуры и реагировать на них. Подборку таких инструментов вы и найдете ниже.

    Зачем и кому это нужно

    Поводы симулировать нажатие клавиш:

    автоматизация — создание ботов для сайтов, приложений и игр. Пример: бот для автоматического заполнения форм или кормления/лечения игровых персонажей;

    тестирование десктопных приложений — перебор возможных действий пользователя и реакций программы;

    доступность — адаптация интерфейса для людей с ограниченными возможностями здоровья, в том числе за счёт эмуляции мыши (ведь без зрения ею не воспользуешься);

    оптимизация — переназначение стандартных клавиш и/или замена недостающих кнопок физической клавиатуры.

    Инструменты питониста для разных платформ

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

    Quartz и AppKit — на Mac,

    pywin32, pyHook — в Windows.

    Для Windows также стоит отметить:

    pyautoit — это Python API к средству автоматизации AutoIt;

    pywinauto — набор модулей, который автоматизирует взаимодействие с Microsoft Windows GUI. Библиотека написана на чистом Python — простейшие её функции по обработке событий мыши и клавиатуры работают и в Linux. Но более сложные возможности для работы с текстом заточены именно под Windows и доступны только там.

    Актуальные версии этих инструментов поддерживают Python 3, более ранние — Python 2.


    Как это работает: примеры

    В директории examples каталога pywinauto на GitHub собраны два десятка наглядных примеров по использованию библиотеки. С их помощью вы можете прямо сейчас создавать ботов, которые умеют устанавливать/удалять программы, скачивать web-страницы, перетаскивать файлы между окнами, пакетно обрабатывать изображения в MS Paint и решать другие задачи.

    Новички оценят читаемость кода:

    Хорошо? Представьте, что вам нужно перенастроить приложение из дефолтного состояния на N-ном количестве компьютеров — выбрать нужные пункты меню, заполнить нужные поля. Или вы тестируете свою программу вдоль и поперёк, чтобы выявить сбои при обращении к GUI. Скрипт, который вам потребуется, будет длиннее, чем в примере выше, но по сути усложнится незначительно.

    Добавьте сюда возможность работать с любыми приложениями на Win32 GUI и виджетами под интерфейс MS UI Automation.

    Устанавливается pywinauto как обычный пакет — через pip install — и автоматически ставит еще несколько полезных компонентов: библиотеку pyWin32 , COM-клиент и серверный фрейморк comtypes , библиотеку six , которая обеспечивает совместимость Python 2 (начиная с 2.6) и 3. Всё это пригодится начинающему разработчику не только для создания ботов, но и в разработке собственных программных продуктов.

    Сегодня день рождения у Гвидо ван Россума, создателя Python. Поздравляем! Самое время поговорить о его детище и затронуть животрепещущую тему: как в Питоне имитировать нажатия клавиш при создании ботов. Суть бота — автоматическое выполнение действий, на которые не хочет тратить время человек. У программистов Python есть инструменты, позволяющие имитировать события клавиатуры и реагировать на них. Подборку таких инструментов вы и найдете ниже.

    Зачем и кому это нужно

    Поводы симулировать нажатие клавиш:

    автоматизация — создание ботов для сайтов, приложений и игр. Пример: бот для автоматического заполнения форм или кормления/лечения игровых персонажей;

    тестирование десктопных приложений — перебор возможных действий пользователя и реакций программы;

    доступность — адаптация интерфейса для людей с ограниченными возможностями здоровья, в том числе за счёт эмуляции мыши (ведь без зрения ею не воспользуешься);

    оптимизация — переназначение стандартных клавиш и/или замена недостающих кнопок физической клавиатуры.

    Инструменты питониста для разных платформ

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

    Quartz и AppKit — на Mac,

    pywin32, pyHook — в Windows.

    Для Windows также стоит отметить:

    pyautoit — это Python API к средству автоматизации AutoIt;

    pywinauto — набор модулей, который автоматизирует взаимодействие с Microsoft Windows GUI. Библиотека написана на чистом Python — простейшие её функции по обработке событий мыши и клавиатуры работают и в Linux. Но более сложные возможности для работы с текстом заточены именно под Windows и доступны только там.

    Актуальные версии этих инструментов поддерживают Python 3, более ранние — Python 2.

    Как это работает: примеры

    В директории examples каталога pywinauto на GitHub собраны два десятка наглядных примеров по использованию библиотеки. С их помощью вы можете прямо сейчас создавать ботов, которые умеют устанавливать/удалять программы, скачивать web-страницы, перетаскивать файлы между окнами, пакетно обрабатывать изображения в MS Paint и решать другие задачи.

    Новички оценят читаемость кода:

    Хорошо? Представьте, что вам нужно перенастроить приложение из дефолтного состояния на N-ном количестве компьютеров — выбрать нужные пункты меню, заполнить нужные поля. Или вы тестируете свою программу вдоль и поперёк, чтобы выявить сбои при обращении к GUI. Скрипт, который вам потребуется, будет длиннее, чем в примере выше, но по сути усложнится незначительно.

    Добавьте сюда возможность работать с любыми приложениями на Win32 GUI и виджетами под интерфейс MS UI Automation.

    Устанавливается pywinauto как обычный пакет — через pip install — и автоматически ставит еще несколько полезных компонентов: библиотеку pyWin32 , COM-клиент и серверный фрейморк comtypes , библиотеку six , которая обеспечивает совместимость Python 2 (начиная с 2.6) и 3. Всё это пригодится начинающему разработчику не только для создания ботов, но и в разработке собственных программных продуктов.

    Теория создания ботнета на Python.

    midinjer

    Заблокирован

    Добрый вечер, пользователи форума 🙂
    Занимаюсь я, значится программированием (больше как хобби, с профессией не связано).
    И недавно, листая форум, заинтересовался созданием ботнета.
    Немного погуглив как это работает.. не увидел проблемы.
    Мы по сути просто заражаем компьютер и удаленно даём ему некоторые комманды.
    Так собственно и не увидев проблемы, решил попробовать сделать нечто подобное..

    Это, скорее, просто записки, так сказать, мысли вслух. Тапками не кидать :(06-SES):

    Итак, что же нам нужно для ботнета? Некая программа на компьютере жертвы, которая будет общаться с сервером, получать от него команды и неким образом реагировать.
    Если программа, значит *.exe файл, если *.exe файл — значит более чем вероятные траблы с антивирусами.

    Я решил ‘выебнуться’ и ни как не компилить программу. Всё будет выполнять исключительно Python скриптом.

    Необходимо: поставить интерпритатор языка Python на машину пользователя (более чем легальный софт, антивирус едет лесом) + закинуть python скрипт на машину жертвы (с точки зрения системы — текстовый файл с парой строчек букавок — антивирь едет лесом)
    Добавляем наш скрипт в автозагрузку — делаем с компьютером жертвы всё что пожелаем.

    p.S. тут не уверен, как будет действовать антивирь с защитой от всяких ‘интернет угроз’. Мой аваст молчит в тряпочку.

    Итак.. Что же должен представлять из себя скрипт? Всё предельно просто: раз в Nное количество времени он отправляет запрос на сервер — получает определённый ответ -> как-то на него реагирует.

    Окей.. Можно напрямую обращаться к серверу (читай: сайту), на котором стоит некая админка, как у ‘настоящего’ ботнета.. Но это сложно (читай:лень), т.к. php я не знаю (читай:не признаю), а ставить django или ему подобный фрейм и долго тупить как это работает.. короче ЛЕНЬ !

    Окей, значит нужен другой вариант.. Я мальчик не совсем маленький, родился ещё в прошлом тысячелетии, так что помню как ботнеты управлялись.. irc сетями. Мирка! Вот что мне нужно!

    Всё просто: штатными средставми python’a (благо всё хорошее давно придумали за меня) коннектимся к серверу в irc сетях, к созданному мной каналу (благо никаких серверов самому подымать не прийдётся, всё, как оказалось, не столь заброшено, как кажется) и всё. Бот просто ‘висит’ на линии и ждёт указаний. Вернее ботЫ. Все. Вместе. На одном канале. Когда появляется сообщение — они все на него реагируют. Легкотня.

    Благо python из коробки умеет работать со всем этим чудом (правда не умею я, но тут на помощь пришёл github с его тоннами туториалов, так что через часика мог уже и я :(53-SES):)

    Собственно, лирическая часть окончена, переходим к технической:

    Подключаем единственный модуль, который нам необходим


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

    Итак, что мы имеем: возможность полностью контролировать компьютер жертвы, за счёт того, что скрипт может выполнять ЛЮБЫЕ python скрипты (а следовательно делать можно что угодно, если аккуратно), получая их от сервера и банально записывая в любой текстовый файл и затем самостоятельно его импортируя в себя.
    Что остаётся сделать: убрать файл из процессов, ибо там их светится аж два (python + скрипт), но это к сожалению силами python не решается (читай: я дурачок, win32api не знать, английский тоже, так что документацию тоже не читать). Но работа скрипта никаких нагрузок не даёт (

    7к килобайт нагрузка), так что зачем вам вообще туда лезть? я вот не лажу, пока не прижмёт ))

    Вообщем, это просто записки, тапками не бросайте. Написал, мол, вдруг кому будет интересно ))
    Если будут вопросы, задавайте, буду рад ответить ))

    midinjer

    Заблокирован

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

    Далее научил бота делать хоть что-то полезное:
    1. По команде ‘console TEXT’ выполняется консольная команда через cmd.exe (сама команда вместо слова TEXT). Выполняет всё, что выполняется из под ‘не админской’ консолькой (а это довольно много всякой фигни).
    2. Выполнять любые python скрипты (в данный момент работает так: бот получает ссылку, заходит по ней, копирует текст скрипта, создаёт рядышком этот скрипт и вызывает его). Работает по команде ‘python URL’.
    2.5. Научил импортировать сторонние модули для python (можно делать как п.2, но в начале скрипта принудительно импортирую модуль request, ставится через pip install в консоли)

    Далее попробовал решить проблему с отображением программы в диспетчере задач. Пока что единственное что придумал (реализовал, вродь работает), это запускать скрипт как Службу Windows. Там в службах столько всякого бреда, что даже если захочешь, нифига не найдёшь (не, не усли захочешь, то конечно найдёшь, но.. я вот туды никогда не захожу, а если и зайду, то разберусь что к чему онли с помощью гугла). В процессах больше ни python, ни сам скрипт не светятся. Единственная проблема: при установки софтинки (готового билда) теперь выскакивает дэбильное окошко, мол вы точно хотите установить (тобишь запрашивает права). Это впринципе не проблема, ибо винда постоянно при установки всяких игрушек с кряками и ломаного софта это просит, но всё равно обидно, как решить пока что не знаю.

    Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков

    Это новый вид статьи, в котором мы не будем говорить про PHP, многим python превосходит php, а для начинающих он покажется проще. Данная статья будет содержать в себе следующие шаги:

    1. Установка Python 3.7.3 на Windows.

    Установка не занимает много времени и умений. Переходим на официальный сайт https://www.python.org/downloads/ и скачиваем установщик себе на ПК.

    Запускаем установщик, обязательно поставьте галочку возле надписи Add Python 3.7 to PATH, так у вас не возникнет проблем при работе с командной строкой Windows.

    После установки запускаем командую строку:

    И пишем команду:

    Если Вы сделали все правильно, то увидите список команд и опций

    На этом установка Python успешно завершена. Переходим к установке IDE PyCharm

    2. Установка PyCharm и его настройка.

    Переходим на сайт jetbrains.com/pycharm и скачиваем среду PyCharm Community, она бесплатная.

    После чего устаналвиваем и запускаем PyCharm

    Забегая вперед, у меня по умолчанию в настройках программы стоял Python 2.7

    Нам нужна последняя версия, открываем File -> Settings. -> Project interpreter и из выпадающего меню выбираем последнюю версию, или добавляем ее туда нажав на Show All…

    Теперь можно создавать новый проект.

    3. Создание проекта и установка библиотеки VK_API

    В Pycharm выбираем: File -> New Project и создаем новый проект, выбрав необходимые настройки:

    Теперь создаем новый файл, назовем его new.py, так как Python использует расширение .py (английскими буквами, не путайте) расширение указывать не обязательно.

    Пишем наш первый самый простой код:
    И нажав правой кнопкой мыши по файлу, выбираем: Run ‘new’

    Все работает. Теперь нам нужно установить библиотеку vk_api, для этого открываем терминал прямо в PyCharm и пишем команду:

    Если в конце видите такой текст, библиотека успешно установлена, можно импортировать ее в проект и писать первый код:

    Это код из примера, благодаря нему мы убедимся что сделали все правильно. Вставить его нужно в файл new.py предварительно удалив все оттуда, что мы написали ранее.

    4. Запуск скрипта используя LongPoll VK.

    Для начала настроим наше сообщество.
    Создаем ключ

    Копируем ключ и вставляем его в наш скрипт:
    Вместо ‘your_group_token‘ указываем ключ сообщества
    Вместо ‘your_group_id‘ указываем ID нашего сообщества

    Теперь переходим во вкладку Long Poll APIи включаем его

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

    Вернемся к нашему коду. Давайте запустим наш скрипт и проверим как он будем обрабатывать события, запускаем скрипт:

    Давайте покинем сообщество и снова вступим в него:

    В консоли мы сразу увидели последние события. Немного добавим строк в наш код, и научим отвечать наше сообщество сообщением в ЛС на одно из событий:

    Импортируем:
    После:
    Добавляем:
    И отправляем сообщение самому пользователю:

    Полный код:
    напишем любое сообщение нашему боту и получим ответ:

    Как узнать названия других событий? Они будут выводится в консоли, так как в коде используется:

    Тут мы получили 2 события:

    VkBotEventType.WALL_POST_NEW — Новый пост
    VkBotEventType.GROUP_OFFICERS_EDIT — Выдача админ прав в самой группе

    Документация и больше примеров можно посмотреть на GitHub . Если Вам интересен этот язык и вы хотите видеть больше статей по Python, пишите в комментарии об этом!

    5. Разница между CallBack API и LongPoll

    И все же в чем разница между CallBack API и Long Poll API? А разница есть и она большая.
    Когда Вы используете CallBack API, ВК сам отправляет Вам происходящее событие на сервер, нам остается только получить его и обработать, у Long Poll API все наоборот, ВК ничего не отправляет, а хранит все события у себя на серверах, Вам нужно самому их получать и обрабатывать, Long Poll API подходит для высоко нагруженных проектов, в идеале советуем использовать оба типа получения событий. На этом наша статья подходит к концу, в следующий раз мы напишем как запустить Long Poll используя PHP, всем хорошего кодинга и настроения

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