Как делают ботов. Написание покерного бота. Создание бота для Telegram

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

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

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

Что это?

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

Если вы помните о CleverBot , вы наверняка знаете о том, что они — далеко не новинка. Актуальными же их делает ряд вещей:

  • Огромное количество времени, которое люди проводят, набирая текст в различных мессенджерах (будь то ВКонтакте , Facebook , Slack и т.д) делает эти самые мессенджеры быстро растущим сегментом на рынке приложений. Люди используют их не только для дружеских переписок, но и в интересах развития бизнеса.
  • Быстрое развитие технологий искусственного интеллекта , машинного обучения позволяет современным чат-ботам вести себя максимально приближённо к тому, как ведут себя люди.
  • Современные чат-боты не опираются исключительно на текст, а ещё и умеют показывать всевозможные полезные карточки, картинки, ссылки, формы, создавая атмосферу использования приложения.

    Всё это позволяет использовать их для совершенно различных целей, таких как помощь в совершении покупок, сервис обратной связи, новости, игры и многое другое. Хороший чат-бот не должен уметь делать всё: если он просто показывает вам последние новости, ему совершенно необязательно уметь заказывать еду из ресторана. Он выполняет что-то одно и выполняет на совесть.

    Как они работают?

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

    Бэкенд: Чат-боты могут быть разработаны на любом языке программирования, с помощью которого можно создать web API. Для большинства это будут либо Node.js, либо PHP, однако существует множество библиотек для создания чат-ботов, написанных на Java или Python. Бэкенд получает сообщение, думает, что ответить, и возвращает пользователю ответ.

    Фронтенд: Это может быть любой мессенджер: от популярных вроде Facebook Messenger , Slack , Telegram до простеньких Realtime Chat With Node.js. Вы не ограничены одной платформой: один и тот же бот может работать, по сути, везде.

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

    Тупые и умные боты

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

    Работающие по командам боты работают, опираясь на заранее написанные ключевые слова, которые они понимают. Каждая из таких команд должна быть написана разработчиком отдельно с использованием регулярных выражений или других форм анализа строк. Если пользователь задал вопрос, не использовав ни одного ключевого слова, робот не может понять его и, как правило, отвечает сообщениями вроде «простите, я не понял».

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

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

    Работа с обработкой естественного языка и машинным обучением — непростое задание, особенно для начинающих. К счастью, сегодня вам не нужно выполнять всю работу, так как существует большой выбор отличных библиотек (ConvNetJS , nlp_compromise , TextBlob) и сервисов (wit.ai , api.ai), которые могут помочь вам обучить ваших ботов некоторым разговорным навыкам.

    Начало работы с чат-ботами

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

    • BotKit — самый популярный набор инструментов для создания ботов. Он open-source и, к тому же, неплохо документирован.
    • Claudia — этакий конструктор чат-ботов, созданный для использования непосредственно в AWS Lambda.
    • Bottr — очень простой фреймворк, написанный на Node.js с готовым приложением для тестирования. Если вы хотите поиграться с ним минут 10, рекомендуем.

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

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

    "Боты" - это новое направление в социальных сетях. Данная тема интересует очень многих пользователей. зачем он нужен, как создать "бота" в "ВК", его страничку, самостоятельно и не используя никаких элементов программирования? Ответы на эти вопросы можно найти в данной статье.

    Что такое "бот"?

    На самом деле все очень просто. "Бот" в социальных сетях - это несуществующий человек, которого на самом деле просто нет. Это фейк. Еще их называют "мертвыми душами", прямо как в повести Гоголя, несуществующие люди, но числящиеся в некоторых структурах. В данном случае будут рассмотрены фейки в социальной сети "ВКонтакте". "Живое" отображение "бота" представлено в виде анкеты тех людей, которые на самом деле не существуют, или это заброшенные странички пользователей, а возможно, даже и копии, но реальные владельцы об этом не знают. Что умеет делать такой "бот"? Ничего, он просто есть и все. Он не умеет читать или писать и вообще ничего.

    Для чего нужен "бот"?

    Как уже было сказано выше, все такие фейки абсолютно ничего не делают, если, конечно, не устанавливать для них специальную программу. Так зачем он тогда вообще нужен? Основная его функция заключается в том, чтобы при помощи таких "ботов" повысить численность нужной группы. Для раскрутки любого сообщества требуются подписчики или члены. Именно такую функцию выполняют боты.

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

    Как создать страницу "бота" в "ВК" самостоятельно?


    1. В любой поисковой системе находим страницу регистрации в "ВК". В графе "имя" пишем любое имя. В строке "фамилия" какую-либо, лучше всего распространенную, фамилию. Нажимаем "зарегистрироваться".

    3. После подтверждения для вас откроется чистая страничка, которую нужно заполнить.

    Теперь, после регистрации, переходим к главному вопросу, а именно "Как создать бота в "ВК"?". На страничке нового пользователя нужно заполнить все обязательные поля. А конкретно следующие:

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

    2. Контакты: нужно добавить страну, Skype, личный сайт. Можно последние пункты и не добавлять.

    3. Интересы: надо вписать деятельность. Указать как можно большее количество, интересов (книги, путешествия, юмор и другое). Далее заполнить - любимая музыка, затем фильмы, телешоу, книги, игры, цитаты и написать что-либо "о себе", а затем сохранить.

    4. Следующее - образование, указать школу, учебные заведения и сохранить.

    5. Карьера: нужно вписать место учебы и работы, можно несколько, и также сохранить.

    6. Служба: только для мужского пола.

    7. Жизненная позиция: надо заполнить - мировоззрение, главное в жизни, главное в людях, отношение к курению, отношение к алкоголю, источник вдохновения, и все это также сохранить.

    Итак, основные данные заполнены, переходим на следующий этап.

    Второй этап - добавление фотографий

    Итак, переходим на второй этап решения вопроса "Как создать бота в "ВК"?". Теперь надо добавить аватарку и фотографии.

    1. Находим в интернете в разделе "картинки" подходящие фотографии. Загружаем их к себе на компьютер и сохраняем.

    2. Желательно найти фотографии несколько штук одного какого-либо человека. В таком случае можно создать видимость "живого и реального пользователя".

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

    4. Теперь добавляем фотографии, чем их больше, тем лучше. Они могут быть любыми. "Бот" может на них быть запечатлен как в единственном числе, так и с компанией и с группой людей. Нужно загрузить хотя бы 4-5 фотографий. Переходим на следующий этап и узнаем, как создать "бота" в "ВК", заключительные действия.

    Оживление "бота"

    Теперь нужно добавить больше жизненности фейку.

    Третий этап решения задачи "Как создать "бота" в "ВК"?" подразумевает самые активные действия. На страничку нового фейка надо загрузить несколько видеороликов, какие-либо аудиозаписи. А также добавить друзей. Как создать "бота" в "ВК" без программ, так сказать, в ручном режиме? Это потребует затрат вашего личного времени. Дело в том, что друзей придется добавлять вручную. Создавать запросы в друзья и принимать придется ежедневно. Чтобы лжепользователь казался еще более живым, нужно, чтобы он общался. "бота" в "ВК"? Можно это сделать двумя способами: установить специальную программу или ежедневно самостоятельно писать в чате и общаться с другими пользователями от его имени.

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

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


    Статья написана для новичков, чтобы показать, что ничего сложного в написании ботов на Python нет.

    Авторизация

    Нам понадобится библиотека vk_api . Авторизоваться в вк можно двумя способами:
    - Как пользователь
    - Как сообщество


    В первом случае надо будет ввести логин и пароль. Во втором случае в группе надо включить "Сообщения сообщества" и создать ключ доступа к API:





    import time import vk_api vk = vk_api.VkApi(login = "login", password = "password") #vk_api.VkApi(token = "a02d...e83fd") #Авторизоваться как сообщество vk.auth() Отправка сообщений

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


    P.S. Сообщество может отправлять сообщения только ранее писавшим пользователям.


    def write_msg(user_id, s): vk.method("messages.send", {"user_id":user_id,"message":s})

    В vk.method мы можем вызывать любой метод из VK API и передавать параметры в виде словаря.


    В данном случае мы вызываем метод messages.send и в качестве параметров передаем id пользователя и текст сообщения.

    Прием сообщений

    Отлично! Отправлять сообщения мы научились, осталось научиться их принимать. Для этого нам нужен метод messages.get .


    Несколько параметров, на которые стоит обратить внимание:


    1) out - если этот параметр равен 1, сервер вернет исходящие сообщения.
    2) count - количество сообщений, которое необходимо получить.
    3) time_offset - максимальное время, прошедшее с момента отправки сообщения до текущего момента в секундах.
    4) last_message_id - идентификатор сообщения, полученного перед тем, которое нужно вернуть последним (при условии, что после него было получено не более count сообщений)


    values = {"out": 0,"count": 100,"time_offset": 60} vk.method("messages.get", values)

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


    В итоге мы получаем список items:


    {u"count": 3441, u"items": [{u"body": u"\u041f\u0438\u0448\u0435\u043c \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0432\u043a!", u"date": 1491934484, u"id": 7387, u"out": 0, u"read_state": 0, u"title": u" ... ", u"user_id": 23107592}, {u"body": u"\u041f\u0440\u0438\u0432\u0435\u0442 \u0425\u0430\u0431\u0440!", u"date": 1491934479, u"id": 7386, u"out": 0, u"read_state": 0, u"title": u" ... ", u"user_id": 23107592}]}

    Если объяснять простыми словами, то items - это то, что можно выделить в диалоге.



    Финальный аккорд, делаем вечный цикл, где на каждое сообщение будем отвечать "Привет, Хабр!".


    while True: response = vk.method("messages.get", values) if response["items"]: values["last_message_id"] = response["items"]["id"] for item in response["items"]: write_msg(item,u"Привет, Хабр!") time.sleep(1)

    Чат-бот готов.


    P.S. Мы запоминаем параметр last_message_id, чтобы в следующий раз обрабатывать только новые сообщения.


    Полный код

    # -*- coding: utf-8 -*- import time import vk_api vk = vk_api.VkApi(login = "login", password = "password") #vk_api.VkApi(token = "a02d...e83fd") #Авторизоваться как сообщество vk.auth() values = {"out": 0,"count": 100,"time_offset": 60} def write_msg(user_id, s): vk.method("messages.send", {"user_id":user_id,"message":s}) while True: response = vk.method("messages.get", values) if response["items"]: values["last_message_id"] = response["items"]["id"] for item in response["items"]: write_msg(item,u"Привет, Хабр!") time.sleep(1)


    Получилось 17 строк кода. Успехов!


    UPD 17.09.18:
    К сожалению в новой версии (5.80) VK API был убран метод "messages.get" и данная статья потеряла актуальность. Теперь для создания ботов используйте систему longpoll. Пример на модуле vk_api для Python вы можете найти .

    Итак в этой статье я продемонстрирую как создать простого бота основанного на визуальном поиске объектов на экране. Преимуществом данного метода является «незаметность» для различных систем защиты от ботов. Для написания бота мы естественно будем использовать специализированную среду для разработки ботов . Если боты создаются для того чтобы сэкономить ваше время на совершение однообразных рутинных действий, то NOMAD создан для того, чтобы сэкономить ваше время при написании бота. В сравнении с написанием ботов на неспециализированных средах программирования или на не очень специализированных разработка на NOMAD может происходить в десятки, а то и в сотни раз быстрее. (т.к. для начала вам еще придется разработать инструменты обнаружения объектов, которые в NOMAD уже встроены готовые). Скачать дистрибутив NOMAD с уже установленным ботом из этой статьи вы можете по этой ссылке (внимание! настройки программы в дистрибутиве рассчитаны на установку его в папку по умолчанию, если вы устанавливаете его в другое место, то измените пути к базе и конструктору с проигрывателем!)

    adminbot
    Дата: 22.07.2015

    Управлять многими - то же, что управлять немногими. Дело в организации.

    Сунь Цзы

    Нашей задачей сейчас является демонстрация того, как делается бот программа, а потому для автоматизации мы выберем что-нибудь простое и в то же время всем доступное, например, Калькулятор. Конечно это не онлайн игра, но поверьте, создание бота для онлайн игры ничем не отличается. (внимание пример работает в Windows 8 и Windows 7, причем калькулятор должен выглядеть как на скриншоте, который есть ниже по тексту, т.е. например, в Windows XP калькулятор называется и выглядит иначе, и потому там бот работать не будет)

    Для того чтобы начать играть «автоматически» в что нибудь нам необходимо пройти следующие этапы:

  • Сформулировать для себя задачу. Каких целей должен достигать наш бот.
  • Какие действия он должен выполнять для этого?
  • Исходя из задачи определить какие объекты он должен видеть, и каким образом, и на какие события реагировать для достижения целей описанных в пункте 1.
  • Создание алгоритма.
  • Программирование.
  • Задачей нашего бота будет бесконечно складывать на калькуляторе 2 числа 59 и 3.

    Для достижения нашей цели нам необходимо, чтобы наша программа нажимала на кнопки 5 и 9 калькулятора, а в случае успеха на кнопку + и кнопку 3 и затем кнопку =

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

    Итак, наш алгоритм: В бесконечном цикле сначала ищем и жмем мышью на кнопку 5, и на кнопку 9. В случае успеха делаем паузу 3 секунды (чтобы успеть насладиться результатом). Затем проверяем есть ли у нас изображение числа 59, если есть то находим и кликаем мышью на кнопки + и 3 калькулятора, если эти операции также выполнены успешно, то находим и кликаем по кнопке = калькулятора. После чего спим 5 секунд. Затем проверяем, если в поле результата нет картинки 0, значит необходимо нажать кнопку CE, чтобы сбросить результаты предыдущих вычислений. После чего итерация повторяется. При нажатии кнопки Esc программа останавливается.

    Продемонстрируем код программы которая у нас получилась:

    Delphi/Pascal

    Procedure StartOnClick(); begin while (getasynckeystate($1B) = 0) do //цикл продолжается пока не нажмут Esc++ begin if five.MouseClick("l") and nine.MouseClick("l") then //если успешно нажали пять и 9 то begin sleep(3000); //спим 3 секунды if fiftynine.FindPicture then //если нашли 59, то прибавим к ним 3: begin if plus.MouseClick("l") and three.MouseClick("l") then //если получилось нажать плюс 3, то жмем на равно equal.MouseClick("l"); end; end; sleep(5000); //спим 5 секунд if not zero.FindPicture then //если на табло нет нуля CE.MouseClick("l"); //то жмем CE Application.ProcessMessages;//принудительно обрабатывает //сообщения пришедшие в окно за время работы, например //сообщение о нажатии клавиши Esc. Если не вызывать то //программа может "подвисать", плохо реагировать на нажатия Esc и т.п. end; //цикл продолжается пока не нажмут Esc -- ShowMessage("Программа остановлена!"); end;

    Procedure StartOnClick () ;

    begin

    while (getasynckeystate ($ 1B ) =0 ) do //цикл продолжается пока не нажмут Esc++

    begin

    if five . MouseClick ("l" ) and nine . MouseClick ("l" ) then //если успешно нажали пять и 9 то

    begin

    sleep (3000 ) ; //спим 3 секунды

    if fiftynine . FindPicture then //если нашли 59, то прибавим к ним 3:

    begin

    if plus . MouseClick ("l" ) and three . MouseClick ("l" ) then //если получилось нажать плюс 3, то жмем на равно

    equal . MouseClick ("l" ) ;

    end ;

    end ;

    sleep (5000 ) ; //спим 5 секунд

    if not zero . FindPicture then //если на табло нет нуля

    CE . MouseClick ("l" ) ; //то жмем CE

    Application . ProcessMessages ; //принудительно обрабатывает

    //сообщения пришедшие в окно за время работы, например

    //сообщение о нажатии клавиши Esc. Если не вызывать то

    //программа может "подвисать", плохо реагировать на нажатия Esc и т.п.

    end ; //цикл продолжается пока не нажмут Esc --

    ShowMessage ("Программа остановлена!" ) ;

    end ;

    Тут мы забежали немного вперед, написав сразу код, т.к. в NOMAD сначала необходимо создать шаблоны изображений которые мы будем искать. Так если посмотреть в код, то можно увидеть следующие записи: five,nine,fiftynine,plus,three,equal,zero,CE — что это? а это собственно и есть те шаблоны, в NOMAD с ними можно работать из кода как с объектами, т.е. пишем имя объекта в коде и вызываем его метод, например: FindPicture — найти изображение шаблона, MouseClick(‘l’) — найти изображение шаблона и кликнуть левой кнопкой мыши по нему. Для того чтобы подробно изучить возможности и функции NOMAD рекомендую обратиться к . А сейчас я в кратце опишу как нам создать недостающие шаблоны:

    Во первых создадим базу данных, для этого в Launcher нажмем кнопку ADD, в открывшимся окне заполним в первом поле имя базы данных (например Калькулятор), и во втором поле укажем каталог где мы хотим хранить все что мы напрограммировали. Т.е. собственно исходник нашей программы, или иными словами базу данных. Далее жмем кнопку Save и в списке у нас должна появится запись. Выбираем ее и жмем кнопку Constructor.

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

    На пункте выделенном на картинке голубым цветом жмем правой кнопкой мыши и выбираем пункт меню «добавить конвеер скриншотов». В появившемся окошке указываем его имя — «Calc». И нажимаем кнопку Input. После чего объект с таким именем должен появиться в дереве объектов в разделе ScreenShotPipe. Найдем его там и кликнем на нем левой кнопкой мыши. В левой части программы появится окошко следующего вида (свойства могут идти в другом порядке):

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

    В третьих запустим калькулятор и сделаем его снимок, для того чтобы сделать снимок необходимо нажать кнопку ScreenShot в левом верхнем углу Конструктора. После этого у нас появится окно TV со снимком экрана. Теперь нам необходимо нажать кнопку Cut и выделить в окне TV наш калькулятор, результатом этих действий должно быть окно TV с изображением калькулятора.

    Нажимаем кнопку Borders (примечание. с момента написания этой статьи в программе появился режим FixBorders (кнопка черный мониторчик с луной), рекомендую использовать именно его. Используется он точно также как Borders, но работает на динамических изображениях гораздо стабильнее ) и начинаем делать шаблоны. Объясню как это делается на примере шаблона для кнопки «+» — мы должны выбрать на изображении самый характерный его участок, который не повторяется в других местах. Собственно и выбираем сам символ +, нажимаем на кнопку Select, и выделяем этот знак в квадратик:

    Кликаем правой кнопкой мыши внутри пунктирного квадратика и у нас появляется окно:

    в поле имя которого мы пишем «plus» (так как этот объект у нас в коде был написан) и жмем Input. В разделе Templates дерева объектов у нас появился объект с таким именем. Нажмем на него и слева появится уже знакомое нам окошко:

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

    Очень важно, чтобы наименования в точности включая регистр ввода соответствовали тому, что вы видите на картинке. В примере шаблоны five и nine сделаны другим способом, в режиме ColMap, за подробностями того как это делается предлагаю обратиться к документации. На работу кода программы это не окажет особого влияния и вы можете сделать все шаблоны тем же образом как и шаблон кнопки +. А можете ничего не делать, и скачать готовый дистрибутив с примером

    Для того чтобы создать шаблоны fiftynine и zero необходимо делать шаблон участка калькулятора выделенного на картинке:

    По шаблонам все.

    3) Еще нам необходимо создать графический интерфейс программы через который она будет общаться с пользователем. Для этого необходимо в Конструкторе программы войти в меню «Окна» и выбрать пункт «Дизайнер Формы»

    Откроется окно с формой, на которой нужно дважды щелкнуть и из открывшегося окна добавить объект Button в обоих полях формы пишем Start. Жмем ОК и выходим из формы, а на главной форме у нас появилась кнопка Start, нажимаем на нее и появляется опять меню свойств, жмем на закладку Events и видим следующее:

    В колонке Value на против события OnClick дважды щелкаем мышью, и в Value автоматически заполняется значение на картинке выше. А в центральном окне появляется текстовый редактор:

    Вот этот текст мы и должны заменить кодом, который я привел в начале статьи. Все теперь программа готова. Для запуска необходимо сохранить программу нажав кнопку с изображением двух дискет, затем откомпилировать программу нажав кнопку с картинкой перекрещенных отвертки и ключа, а затем нажать кнопку Launch, или запустить ее из лаунчера. Из конструктора программа всегда запускается в отладочном режиме, поэтому будут показываться отладочные сообщения. Если мы все сделали верно то должны увидеть окно с кнопкой которое мы создали:

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

    Вот и все. Сложно? Делать это на обычном языке программирования сложнее в разы. Лично у меня написание этого бота заняло не более получаса, чего не могу сказать об этой статье.

    Другие примеры ботов можно поискать на форуме например,

    Пишем бота для сайта на javascript

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

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

    Я уже сталкивался с такой проблемой и прекрастно понимаю, что php-шная библиотека curl вполне справляется со своей задачей и в этом случае с ajax-ом, но, видать, я был не первым таким умником и разработчики сайта защитились от ботов постоянно меняя ajax-запросы, да еще и генерируя их с помощью javascript.

    Все статьи цикла
    Промучившись три ночи, я осознал, что нужно писать интерпретатор javascript, вот только занятие это, мягко говоря, не благодарное, покопавшись в интернете я нашел уже 2 готовых (весь остальной абзац к делу фактически не относится):

    Для java. (пользуясь случаем хочу отметить, что вопреки распространенному мнению, java и javascript – два совершенно разных языка, а приставку «java» javascript приобрел в последний момент и только в маркетинговых целях).

    Благодаря случайно попавшейся месяц назад на глаза батиной книжке Питера Нотона за 1996 год я понял, что java – язык без сомнения интересный и позволяющий решить много специфических задач язык. Вот только я, как и большинство, думаю, не смогу взять и написать бота на нем, java требует не малых усилий по изучению, и если и изучать его, то не для написания одной маленькой программки.
    Для python. Наверно в начале весны от одного человека (руководителя одной из конторок по производству сайтов, как он сам себя называет) слышал восторженный отзыв об этом языке программирования, в котором обсирались все известные мне серверные языки и прославлялся великий и могучий python. Из этого монолога я также узнал, что для конторы, по заказу на python-е сейчас пишется CMS и почти завершена. Вот только:
    говорил он не своими словами, а словами программиста, который эту CMS пишет, сам же он даже не знает, как этот самый python выглядит.
    в программировании этот человек не идет дальше лабороторок в институте и даже плохо в нем соображает, все его программирование ограничивается навигацией в интерактивных flesh мультиках,
    даже после полутора лет своей работы контора убыточна,
    возможно из-за предыдущего пункта она, по сути, не легальна и представляет собой просто N-ое количество друзей работающих за идею,
    CMS все еще не доработана даже до beta-версии.

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

    После еще одной бессонной ночи впустую, мой засыпающий мозг вспомнил о Delphi. О той старенькой 7-ой версии, которую машинально устанавливаю после каждого форматирования диска, но с которой, по сути, не работал уже лет пять или даже семь. (Кстати, думаю, в C++Builder все те же самые огурцы лежат, но лично не проверял.)

    Там, на вкладке internet притаился компонент TWebBrowser, он является встроенным в Delphi экземпляром Internet Explorer-а, в котором уже есть так нужный мне интерпретатор javascript.

    При этом мы получаем почти безграничную власть над этим творением Microsoft-а.

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

    Итак, перво-наперво, после размещения компонента TWebBrowser на форме, нам нужно загрузить в него страницу, для этого служит метод Navigate:
    WebBrowser.Navigate(‘http://vvy.me’);

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

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

    добавляем в uses модуть MSHTML
    добавляем переменные:
    WB_Doc: IHTMLDocument2; // В этой переменной будет хранится интерфейс взаимодействия со всем WebBrowser-ом WB_HTMLWindow: IHTMLWindow2; // А тут уже наше окно, с которым и работает javascript

    и конечно кусок кода в процедуре onDocumentComplete
    WebBrowser1.Document.QueryInterface(IHTMLDocument2, WB_Doc); WB_HTMLWindow:= WB_Doc.parentWindow; if not Assigned(WB_HTMLWindow) then showmessage(‘авот фих тебе’) else showmessage(‘ все OK’);

    Но на самом деле все немного сложнее, событие onDocumentComplete возникает при:

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

    При этом во время возникновения события объект браузера может быть не доступен, но мы можем убедится в возможности взаимодействия с WebBrowser-ом по его свойству ReadyState, если все хорошо, то оно должно быть равно 4 или READYSTATE_COMPLETE, кому как нравится. Все остальные значения от 0 до 3 в нашем контексте мало интересны и лишь обозначают степень готовности WebBrowser-а к работе с ним.

    Что бы добраться до html-кода страницы мы можем применить вот такую функцию:
    function GetHtml(doc: IHtmlDocument2): string; var iDisp: IDispatch; iCollection: IHTMLElementCollection; begin result:= »; iCollection:= doc.all.Tags(‘HTML’) as IHTMLElementCollection; iDisp:= iCollection.item(0, 0); result:= (iDisp as IHTMLElement).outerHTML; end;

    Хоть она и вернула все содержимое в виде одной строки, кодовые символы
    в наличии, и все прекрасно загружается например в TMemo с переносом строк:
    Memo.Lines.Add(GetHtml(WB_Doc));

    Смертельный номер! Функция GetHtml вернет нам не просто html-код страницы, а код, в котором выполнились уже все скрипты, т.е вместо

    Мы получим
    document.write(‘Я работаю!’); Я работаю!

    И даже больше: мы можем обращаться к html-элементам страницы, например заполнять input-ты или отправлять формы средствами Delphi, но что б не курить мануалы еще и по этому вопросу я поступаю хитрее, а точнее выполняю javascript, например:
    WB_HTMLWindow.execScript(‘alert(“Тадам!”)’, ‘javascript’);

    Схема работы получается предельно простая (с примерами как получилось у меня):

    Загружаем первую страницу
    Например, код ссылки, в том виде как ее получил WebBrowser
    Далее

    Получаем цункцией GetHtml ее html-код с уже отработавшими скриптами
    Наша ссылка получилась вот такой
    Далее

    И малого того, что событие onclick задается в самом javascript, так еще и функцию qwerty явно прогнали через абсфукатор, но это нам не помешает
    Регулярками вытаскиваем код из события onclick
    qwerty()

    С помощью.execScript запускаем событие onclick, вернее код из него
    Из многочисленных событий onDocumentComplete ифом(if) выбираем то, в котором WebBrowser.ReadyState равно 4 и только тогда продолжаем работу.

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

    И так по кругу

    Кстати, в TWebBrowser частенько не выполняются правильно написанные скрипты, которые выполняются в обычном IE, в этом случае на экран выскакивает стандартное окошко об ошибке в javascript, с предложением запустить отладку. И, кроме того, что они мельтешат перед глазами, они еще иступарят нам весь компонент делая его не доступным до момента загрузки нового url-а, да и всю программу, подобно процедуре showmessage(). Это можно решить, назначив свойству Silent значение true. Оно поможет нам отключить все ошибки javascript в TWebBrowser, но оставит нам сообщения об ошибках взаимодействия с самим компонентом, что жизненно важно при отладке.

    У TWebBrowser еще куча плюшек, но лично мне хватило перечисленных, а еще все это работает не только в компонентах WebBrowser, но и окнах Internet Explorer-а, достаточно получить указатель на окно программы и вперед!

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

    ВКонтакте
  • Войдите ВК под аккаунтом, на котором вы собираетесь использовать бота.
  • После загрузки игры, обновите страницу, нажав F5. Это важно!
  • Скопируйте в адресную строку браузера следующий код: var allscripts=document.getElementsByTagName(«script»); script=allscripts.innerHTML;var json=JSON.parse(script.substring(script.indexOf(‘{«api_url’), script.indexOf(‘»};’)) + ‘»}’);var answer1=prompt(«VK id»,json.viewer_id);var answer2=prompt(«VK auth»,json.auth_key);
  • Если окошки не появились, то обновите страницу с игрой, нажав F5, и еще раз повторите действия в пунктах 4 и 5.
  • Перейдите по ссылке и нажмите «Разрешить».
  • Скопируйте из браузерной строки значение параметра access_token. Не обращайте внимание на предупреждение, данный параметр используется в боте исключительно для получения списка ваших друзей в игре.
  • Одноклассники
  • Войдите в Одноклассники под аккаунтом, на котором вы собираетесь использовать бота.
  • Перейдите на страницу с игрой.
  • Скопируйте в адресную строку браузера следующий код: var frame=document.getElementById(«appMain_Div»).src;window.location.href=frame;
  • Пропишите в начало адресной строки «javascript:» (без кавычек).
  • Нажмите Enter. Как создать бот собственными силами за пять минут

    Браузер перейдет на похожую страницу. На этой странице скопируйте в адресную строку браузера следующий код: var script=document.getElementsByTagName(«script»).innerHTML;var json=JSON.parse(script.substring(script.indexOf(‘{«web_se’), script.indexOf(‘»};’)) + ‘»}’);var answer1=prompt(«Odnoklassniki id»,json.logged_user_id);var answer2=prompt(«Odnoklassniki auth»,json.auth);

  • Пропишите в начало адресной строки «javascript:» (без кавычек).
  • Нажмите Enter. По очереди выведутся два окна с нужными параметрами. Сохраните их где-нибудь (например, в блокноте), т.к. перейти на вкладку с регистрацией в боте вы не сможете, пока не закроете эти сообщения.
  • Mail.ru
  • Войдите в Mail.ru под аккаунтом, на котором вы собираетесь использовать бота.
  • Перейдите на страницу с игрой.
  • Скопируйте в адресную строку браузера следующий код: var url=document.getElementById(‘app-wrapper’).dataset.src;var params=url.split(«?»).split(«&»);var id=params.split(«=»);var auth=params.split(«=»);var answer1=prompt(«Mail.ru id»,id);var answer2=prompt(«Mail.ru auth»,auth);
  • Пропишите в начало адресной строки «javascript:» (без кавычек).
  • Нажмите Enter. По очереди выведутся два окна с нужными параметрами. Сохраните их где-нибудь (например, в блокноте), т.к. перейти на вкладку с регистрацией в боте вы не сможете, пока не закроете эти сообщения.
  • Как написать Telegram бота: практическое руководство

    В последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных «фишек» Telegram является его якобы защищённость — по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом.

    На чем писать бота для браузера

    Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.

    В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы «запилим» полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.

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

    Как создать Telegram бота?

    Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:

    • Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут
    • Добавляем к себе в контакт-лист бота с именем BotFather
    • Запускаем процедуру «общения» с ботом нажатием кнопки Start . Далее перед нами предстанет список команд точно как на скриншоте.
    • Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot . Например, DjangoBot или Django_bot.

    • Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю 🙂

    После создания бота, обратите внимание на строку с текстом:

    Use this token to access the HTTP API:

    За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

    • Присвоить боту описание
    • Установить аватар
    • Поменять token
    Приступаем к кодированию

    Как я ранее уже упоминал, мы будем писать веб-приложение на Django . Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates ) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.

    • Использование вызова API метода getUpdates
    • Установка Webhook

    Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook . Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе setWebhook передавать также публичный ключ в PEM формате (ASCII base64). Либо же можно получить валидный бесплатный SSL сертификат от Let’s Encrypt.

    Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.

    Итак, вернёмся к python библиотеке для работы с Telegram — telepot . На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:

    Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:

    Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения этих команд мы получим:

    Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.

    Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start

    Выполняем код:

    Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update. Внутри Update находится объект Message. Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.

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

    Простая функция парсинга RSS фида Planet Python выглядит вот так:

    Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django «вьюшка» выглядит следующим образом:

    CommandReceiveView ждёт POST запрос на себя, парсит его и отвечает исходя из заданной команды. Полноценное Django приложение можно найти по этой ссылке. Стоит отметить в коде использование ещё одного API вызова — sendMessage . Этот метод отправляет сообщение заданному пользователю, используя при этом chat_id и сам текст сообщения. Chat_id — это уникальный идентификатор чата между пользователем и ботом (его идентификатор есть в ответе на запрос getUpdates ). У Telegram ботов есть одно ограничение, они не могут посылать сообщения пользователям, которые предварительно не инициировали общение с ним. По-видимому это сделано дабы избежать массового создания спам-ботов.

    Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой. Если вам это интересно, то отпишитесь, пожалуйста, в комментариях к этой статье. Хочется получить обратную связь 🙂

    Итак, веб-приложение на Django запущено. Как же начать тестировать бота? А всё очень просто — необходимо симулировать действия Telegram сервиса. Для этого нам понадобится HTTP клиент и тело запроса. В качестве HTTP клиента я часто использую Chrome плагин под названием Postman, а тело запроса мы возьмём напрямую из данных, полученных с помощью API вызова getUpdates .

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

    http://127.0.0.1:8000/planet/b…BOT_TOKEN /

    где BOT_TOKEN — это токен нашего бота. Смотрим скриншот:

    А давайте-ка отправим команду feed для получения списка новостей из Planet Python:

    На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.

    Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.