Написание покерного бота. Чтобы сделать своего бота, нужно уметь программировать? Тупые и умные боты

26.04.2019

Пишем бота для сайта на 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 каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.

    Итак в этой статье я продемонстрирую как создать простого бота основанного на визуальном поиске объектов на экране. Преимуществом данного метода является «незаметность» для различных систем защиты от ботов. Для написания бота мы естественно будем использовать специализированную среду для разработки ботов . Если боты создаются для того чтобы сэкономить ваше время на совершение однообразных рутинных действий, то 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, и ждем сообщения о том что программа закончена.

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

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

    К сожалению, на данный момент нет хороших библиотек на 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 вы можете найти .

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

    Быстрая навигация:

    Как сделать бот ВК

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

    Что такое бот в ВК

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

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

    Можно представить в виде анкеты тех граждан, которых на самом деле нет, или это давно заброшенные странички обычных пользователей ВК, а возможно, даже и реальные копии, о которых реальные владельцы даже не догадываются. Что же умеет делать «бот»? Если говорить честно, то практически ничего, он просто существует и все. Он не умеет писать или читать и вообще ничего того, что делают обычные посетители Вконтакте. Далее мы рассмотрим вопрос: как сделать бота в ВК для того, чтобы он стал настоящим помощником в раскрутке группы.

    Как сделать бота в ВК для группы

    Важно понимать, что для создания ботов в вк существует несколько способов. Первым из ботов, о которых пойдет речь – это «Робочат». Этот бот обладает достаточно легким и понятным функционалом, при этом так же незамысловат и понятен в настройке. Для его установки необходимо перейти на сайт robochat.io, и нажать на кнопку «Создать бота» (при необходимости, нужно пройти процедуру посредством вашего е-мейла).

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

    Приложение сделает запрос к доступу к личному аккаунту в VK. Важно знать, что данный аккаунт должен обязательно иметь права администратора в нужном вам паблике «Вконтакте»). Кликните на «Разрешить»

    Так вы перейдёте к перечню добавления групп «Вконтакте», в которых вы числитесь администратором. Кликните на «Подключить» справа от необходимого сообщества», а затем кликните на «Разрешить» для доступа бота к сообщениям группы, его фото и видео. Теперь вернитесь в ваш аккаунт на сайте Robochat.io, перейдите в раздел «Чат-бот» слева, в которой будут расположены три подвкладки («Основное», «Сообщения ВК», «Ключевые слова»). Нас интересует непосредственно подвкладка «Основное», где вы будете иметь возможность настроить ответы вашего бота на всевозможные запросы пользователя, в том числе пользуясь подвкладкой «Ключевые слова». Для редактирования определенной опцией существует кнопка «Редактировать», которая располагается возле каждого из пунктов. После завершения настройки шаблонных ответов ваш бот готов к работе. Для того, чтобы его активировать пользователю необходимо кликнуть на кнопку «Написать сообщения» в вашем сообществе, и бот даст ответ пользователю в соответствие с заданной вами настройкой.

    Второй способ сделать бота для группы ВК

    К следующему способу можно отнести. Бот «BotVK», который подразумевает автоматизированные ответы на входящие сообщения пользователей паблика. Установка такого бота в ВК с сайта bot-vk.ru по своему алгоритму идентична с установкой предыдущей программы «Робочат». Скрипт бота вк встроен в саму программу, что облегчает ее использование. При этом настройка «BotVK» также интуитивно проста, и не требует от пользователя каких-либо специальных знания по программированию. Для начала работы с данным ботом перейдите на сайт bot-vk.ru, и нажмите на кнопку «Создать бота».

    Затем нужно кликнуть на кнопку «Войти или создать аккаунт», и нажать на «Разрешить» справа снизу для предоставления приложению права доступа к вашему аккаунту. Так вы сможете перейти в панель управления созданным вами ботом. Кликните на кнопку «Подключить группу» для начала работы с вашей группой, нужно отметить вашу группу в списке, и кликнуть на «Подключить», а затем на «Разрешить». Справа будет расположено меню управления созданным ботом.

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

    Третий способ – Создание Чат-ботов на сайте bots.hsstore.ru

    Вы смело можете воспользоваться ботами платной основы на сайте bots.hsstore.ru. Здесь представлено множество платных ботов для сайта VK, функционал которых можно подключить за ежемесячную плату в 990 рублей. Среди них есть википедия-бот (рассылает статьи с Википедии по вашим запросам), бот подходящий для общения (имеет навыки соединять вас анонимно с другими неизвестными пользователями), бот демонстрирующий гороскопы и так далее.

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

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

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

    Как создать бота в ВК через Андроид

    «Андроид» является операционной системой, созданной для электронных устройств. Она действует на ядре Linux и дает возможность создавать приложения, управляемые устройством через библиотеки системы «Гугл». Как создать бота ВК через смартфон? «Андроид» полностью поддерживает многие программы по созданию ботов посредством смартфона. Для того, чтобы сделать его самостоятельно, вам поможет отличное знание языка программирования, в том числе и понимание, что означает понятие «бот код». Если с этим имеются сложности, также можно воспользоваться автоматическим устройством или сервисами. Допустим, Abot способен создать собственного виртуального помощника. Он будет отвечать на сообщения и всевозможные вопросы клиентов. Это достаточно удобная вещь для контроля и ведения бизнеса через смартфон.

    Конструктор ботов ВК

    Прежде чем браться за это дело, необходимо определится, для чего он нужен. Его создание, не всегда, требует навыков программирования и каких-либо супер знаний. Конструкторы ботов помогут отлично справиться с этой задачей (одним из самых востребованных считается Chatfuel). Конструкторы позволяют создать bot с применением удобного интерфейса. Такими помощниками довольствуются серьезные компании и фирмы. Востребованными и популярными конструкторами на сегодняшний день можно считать: Api.ai, Meya, Pandarabots, Manybot. Эти сервисы применяются для конструкции чат-ботов в различных социальных сетях.

    Как создать чат бота

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

    Существует четыре вида чат-ботов:

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

    · Искусственный интеллект. Современные разработки подводят к тому, что чат-боты осуществляют задачи, требующие от человека достаточно много времени. Роботы способны отвечать на любые вопросы собеседника.

    · Бизнес-боты. Они предоставлены для того, чтобы увеличивать коэффициент полезного действия и принимать участие в оптимизации бизнеса. Тут бот для группы вк является необходимостью. Допустим, сервис SpyCat 2.0 рассылает оповещение пользователю о полученных комментариях в сети ВК, при этом имея функцию автоответчика. Бизнес-боты понижают затраты, автоматизируют все рабочие процессы (выполняют рассылку сообщений клиентам и сотрудникам).

    · Игровые. Программа, управляющая компьютером. Она имитирует партнеров в онлайн-игре по командам. Подобные боты основаны на искусственном интеллекте и полностью адаптированы к особенностям определенной игры.

    Как создать чат бот в ВК? – это очень популярный вопрос от тех, кто намерен развивать свой бизнес посредством привлечения клиентов через бот ВК. Сделать это достаточно просто. Прежде чем приступить к этому делу, необходимо соблюдение следующих критериев: непрерывный доступ в интернет и наличие свободного времени. Также нужно скачать бесплатный чат-бот, запустить его и добавить аккаунт. Далее нужно ввести логин и пароль личной страницы в ВК. Затем откроется инструкция, ее необходимо прочесть и проследовать на вкладку «Сообщения». На стене сообщества своего аккаунта нужно написать «Бот, привет!». Спустя тридцать секунд он должен дать ответ. Во вкладках программы «Аккаунт», «Команды» можно изменять и настраивать функции бот ВК.

    Скачать готовый бот для ВК

    В данном разделе мы подробно рассмотрим, как и где можно скачать бот вк. На самом деле, скачивание бота абсолютно несложная задача, справиться с которой может абсолютно любой человек, которые имеет навыки пользования ПК. Скачать Бот ВК, можно на сайте vk-robot . или на других сайтах. Всех их объеденяет одно, а именно: риск скачать вирус, скачать устаревшую программу, которая не только не будет Вам полезна, а поспособствует быстрому бану и разного рода другие неприятности. Скачивая в сети программы вы очень рискуете.

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

    Но если здравый смысл Вам говорит, что не нужно качать всякое **но с интернета, то есть надёжный сервис, который не только бесплатный, но и не навлечёт неприятностей, даже на Вашу личную страницу — BossLike.ru

    Босслайк имеет множество функций, которые хотят получить пользователи Вконтакте: , Подписчики, комментарии…

    Как написать бота для ВК самостоятельно

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

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

    · Затем нужно вписать номер телефона и кликнуть «получить код».

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

    Поэтапно:

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

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

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

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

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

    6. Служба: указывать нужно только, как правило, мужскому полу.

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

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

    1. Находим в интернете в поисках «картинки» фотографии человека. Загружаем их на свой компьютер и сохраняем.

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

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

    максимально приближено к реальности. Загружаем фото на страничку «ВК» и сохраняем.

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

    Следующий шаг…

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

    Итак, в заключении можно подвести итог, что создать бот ВК 2018, можно двумя способами: установить специальную программу или ежедневно самостоятельно писать в чате и общаться с другими пользователями от его имени. Как видите сами, ничего сложного нет. Однако стоит принять во внимание, чтобы создать полноценного «бота», нужно потратить свое свободное время.

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

    Но, как известно, в последнее время крупнейшие покер-румы начали активно закручивать гайки, выкидывая любителей нечестной игры из-за столов. В такой ситуации разработка покер-ботов превращается в весьма неблагодарное занятие, а порой и просто в пустую трату времени. Казалось бы, овчинка не стоит выделки, и тему можно смело закрывать. Однако не стоит опускать руки раньше времени. Устраивайся поудобнее, сейчас я покажу тебе, как научить собственного бота играть на partypoker.com :).

    Flop aka вливаемся в игру

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

    Мы не будем лезть в код клиентского софта покер-рума. Это понижа ет удобство работы взамен на гарантии безопасности и стабильности функционирования бота. Однако все не так сложно, как тебе кажется:).

    Turn - реализуем бота

    Итак, перед запуском бота необходимо произвести следующие действия:

  • Сливаем официальный бесплатный клиент с partypoker.com .
  • Запускаем его и регистрируемся в покер-руме.
  • В настройках клиента ставим четырехцветную колоду карт.
  • Открываем четыре любых игровых стола и устанавливаем автоматическое расположение окон.
  • Обрати внимание, что окна должны располагаться именно в автоматическом режиме, иначе бот не сможет ориентироваться в игре. Бот имеет собственную панель управления. Она рассчитана на разрешение экрана 1280х1024, размещается ниже игровых столов и выше панели задач винды, что позволяет одновременно наблюдать за игрой и контролировать работу бота, не мешая ему считывать информацию со столов. Согласно концепции, бот может играть одновременно на четырех столах, для каждого из которых выделена область, активируемая кликом мыши. Таким образом, мы можем выбрать, на каких именно столах будет играть бот.

    Подготовка завершена, но запускать бота пока рано, для начала разберемся в начинке софтины. Логика работы бота станет понятна после просмотра сорца Unit3.cpp. Для экономии места похожие строчки кода мы заменим на «…».

    Для удобства хранения инфы создадим четыре объекта TABLE, хранящие данные по каждому столу:

    TABLE table1;
    ...

    Позиция игрока за столом и предыдущие карты выставляются по-дефолту:

    table1.position = "1";
    ...
    table1.last_cards = "start";
    ...

    Забираем из боксов и присваиваем позиции для каждого стола:

    table1.position = Form1->Edit1->Text.c_str();
    ...

    Запускаем основной цикл. Задержка в начале цикла выставлена не случайно. Дело в том, что работа с нашими снимками занимает приличное количество времени. Данная задержка оптимальна для рабочей лошадки P4 2800MHZ, 1ГБ ОЗУ.

    while(true)
    {
    Sleep(2000);

    check_situation(table1.situation, table2.situation, table3.situation, table4.situation);
    Form1->Label34->Caption = table1.situation.c_str();
    Form1->Label35->Caption = table2.situation.c_str();
    Form1->Label36->Caption = table3.situation.c_str();
    Form1->Label37->Caption = table4.situation.c_str();

    И, наконец, обработка каждого стола. Рассмотрим на примере первого. Для начала проверим, требуется ли от бота игра на этом столе. Это удобно, поскольку можно отключать бота от стола и играть вручную:

    if (table_1_start == "go") {

    Проверяем ситуацию - требуется ли от бота принятие каких-либо решений, или сейчас ходят другие игроки:

    if (table1.situation=="check" ||
    table1.situation == "call_0.10" ||
    table1.situation=="call_0.05" ||
    table1.situation=="call_many" ||
    table1.situation=="allin") {
    Обнуляем параметры стола:
    table1.combination = "--";
    table1.action = "--";

    Проверяем и прорисовываем карты игрока и карты на столе:

    check_p_cards(1, table1.p_card_1, table1.p_card_2);
    Form1->Label26->Caption = table1.p_card_1.c_str();
    Form1->Label27->Caption = table1.p_card_2.c_str();
    check_t_cards(1,table1.t_card_1,table1.t_card_2, table1.t_card_3,table1.t_card_4, table1.t_card_5);
    Form1->Label11->Caption = table1.t_card_1.c_str();
    Form1->Label12->Caption = table1.t_card_2.c_str();
    Form1->Label13->Caption = table1.t_card_3.c_str();
    Form1->Label14->Caption = table1.t_card_4.c_str();
    Form1->Label15->Caption = table1.t_card_5.c_str();

    Определяем место игрока в данной раздаче (большой блайнд/малый блайнд/etc):

    check_position(1, table1);
    Form1->Label62->Caption = table1.position.c_str();

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

    shortstack(1, table1);

    В результате мы имеем конкретное решение в свойстве table1.action:

    Form1->Label38->Caption = table1.action.c_str();
    Form1->Label58->Caption = table1.combination.c_str();

    Решение - это хорошо, но от нас клиентская программа покеррума все еще ждет действий. Действуем согласно решению:

    mouse_click(1, table1);

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

    write_stat(1, table1);

    Последние карты, с которыми мы играли, записываем в свойство стола.

    table1.last_cards = table1.p_card_1 + table1.p_card_2;

    На этом основной цикл заканчивается. Рассмотрим используемые функции более подробно. Создадим функцию для получения нужной нам картинки. В переменной outfile_name получим название файла, куда будет необходимо сохранить снимок. Здесь startX и startY - координаты верхней левой точки прямоугольника с высотой height и шириной width.

    void PRINT_RECT_SVV (char* outfi le_name, int startX, int startY, int width, int height)
    // Функция GetDC извлекает дескриптор
    // дисплейного контекста устройства. 0 - экран
    {
    HDC hdc = GetDC(0);
    if (hdc) //если дескриптор успешно получен
    {
    Graphics::TBitmap* bmp = new Graphics::TBitmap();
    __try {
    bmp->Width = width;
    bmp->Height = height;
    // Копиpует каpту бит из hdc в bmp, выполняя
    // указанную pастpовую операцию, в данном случае SRCCOPY
    BitBlt(bmp->Canvas->Handle, 0, 0, width, height, hdc, startX, startY, SRCCOPY);
    bmp->SaveToFile(outfi le_name);
    //сэйв BMP
    }
    __finally {
    delete bmp; //освобождаем память
    }
    }
    }

    Теперь, когда у нас есть возможность сохранять нужные нам снимки, возникает вопрос: как установить их идентичность? Можно попиксельно сравнивать растровые изображения, но это займет много процессорного времени. Мы возьмем за основу совпадения контрольных MD5-сумм у двух изображений, пути к которым передаются как входящие параметры, а факт совпадения будет отражаться в возвращаемом функцией значении.

    Непосредственно для подсчета MD5-сумм будем использовать готовую функцию, заново изобретать велосипед ни к чему:

    bool CHECK_MD5_SVV (char* ET_file, char* newfile)
    {
    md5wrapper md5;
    // Получим хэш сравниваемого файла
    std::string hash1 = md5.getHashFromFile(newfile);
    // Получим хэш файла, содержащего шаблон
    std::string hash2 = md5.getHashFromFile(ET_file);
    // Сравним хэши
    if (hash1==hash2) return true;
    else return false;
    }

    Сравниваем контрольные суммы:

    void check_this_card (char* new_path, string &card) {
    // A
    if (CHECK_MD5_SVV(".\ET\ET_A_p.bmp", new_path))
    {card = "Ap"; }
    else if (CHECK_MD5_SVV(".\ET\ET_A_k.bmp", new_path))
    {card = "Ak"; }
    else if (CHECK_MD5_SVV(".\ET\ET_A_ch.bmp", new_path))
    {card = "Ach"; }
    else if (CHECK_MD5_SVV(".\ET\ET_A_b.bmp", new_path))
    {card = "Ab"; }
    // К
    ...
    else { card = "--"; }
    }

    void check_p_cards(int table, string &card1, string &card2) {
    if (table==1) {
    //скринить первую карту игрока
    PRINT_RECT_SVV(".\ET\ch_card1_t1.bmp", 37,150,12,22);
    //скринить вторую карту игрока
    PRINT_RECT_SVV(".\ET\ch_card2_t1.bmp", 55,150,12,22);
    //распознать первую
    check_this_card(".\ET\ch_card1_t1.bmp", card1);
    //распознать вторую
    check_this_card(".\ET\ch_card2_t1.bmp", card2);
    }
    if (table==2) {
    ...
    }
    void check_t_cards (int table, string &card1, string &card2, string &card3, string &card4, string &card5) {
    if (table==1) {
    PRINT_RECT_SVV(".\ET\t1c1.bmp",198,154,12,22);
    PRINT_RECT_SVV(".\ET\t1c2.bmp",249,154,12,22);
    PRINT_RECT_SVV(".\ET\t1c3.bmp",300,154,12,22);
    PRINT_RECT_SVV(".\ET\t1c4.bmp",351,154,12,22);
    PRINT_RECT_SVV(".\ET\t1c5.bmp",402,154,12,22);
    //распознать
    check_this_card(".\ET\t1c1.bmp", card1);
    check_this_card(".\ET\t1c2.bmp", card2);
    check_this_card(".\ET\t1c3.bmp", card3);
    check_this_card(".\ET\t1c4.bmp", card4);
    check_this_card(".\ET\t1c5.bmp", card5);
    }
    if (table==2) {
    ...
    }

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

    bool is_a_table (int table_number) {
    if (table_number==1) {
    PRINT_RECT_SVV(".\ET\is_a_table_1.bmp",5,5,95,25);
    if (CHECK_MD5_SVV(".\ET\ET_is_table.bmp", ".\ET\is_a_table_1.bmp")) return true;
    else return false;
    }
    if (table_number==2) {
    ...

    Имитировать действия игрока будем программно, двигая курсор и кликая мышью. Естественно, не абы-куда, а по кнопочке, определяемой стратегией.

    void mouse_click (int table_number, TABLE &this_table) {
    ...
    if (this_table.action == "fold") {
    SetCursorPos(x+380, y+410);
    mouse_event(MOUSEEVENTF_LEFTDOWN, x+380, y+410,0,0);
    Sleep(100);
    mouse_event(MOUSEEVENTF_LEFTUP, x+380, y+410, 0, 0);
    }
    ...
    }

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

    Теперь: mov ah,86h; mov dx,cx; int 15h .

    «Бред!» - скажешь ты, и будешь абсолютно прав! Если ты читаешь эти строки – значит, ты прошел почти весь долгий путь создания бота и можешь сделать передышку:). Но расслабляться все еще рано, впереди нас ждет самый ответственный этап - анализ и разработка стратегии игры. Все начинающие игроки, как правило, изучают стратегию коротких стеков (shortstack). Рассмотрим ситуацию на префлопе (карты розданы игрокам, но на столе все еще пусто), когда у нас на руках «карманка» (пара карт одинакового ранга).

    // Итак, удостоверяемся что на столе нет карт
    if (this_table.t_card_1 == "--") {
    // А на руках у нас карты одинакового ранга:
    if (card_rank(this_table.p_card_1)== card_rank(this_table.p_card_2)) {
    //Если кто-то до нас повысил ставки
    // или нас заставляют пойти ва-банк
    if ((this_table.situation == "call_many") || (this_table.situation == "allin")) {
    //Если карманка выше восьмерок и это уже
    // второй круг торговли, идем ва-банк (all in)
    if ((card_rank(this_table.p_card_1)>=9) && (this_table.trade_cycle>=2))
    {this_table.action = "allin";}
    // Если карманка начиная с десяток -
    // не обращаем внимания на круг торговли
    // и сразу идём all-in
    else if (card_rank(this_table.p_card_1)>=10)
    { this_table.action = "allin"; }
    else { this_table.action = "fold"; }
    //Если до нас никто внятно не рейзил
    // (ставка была не больше размера большого блайнда)
    } else if ((this_table.situation == "check") || (this_table.situation == "call_0.05")||
    (this_table.situation == "call_0.10")) {
    // Если мы находимся в ранней
    // позиции (с нас начинаются торги)
    ...

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

    River: all-in

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

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

    Tricks & Tips
  • Тестируй технические детали действий бота в играх на фантики, а стратегии - в играх на реальные деньги. В первом случае ты сэкономишь деньги, а во втором - время. Дело в том, что в играх без реальных денежных затрат срабатывает психологический эффект aka «а и ладно, не корову проигрываю». Игроки действуют хаотично, не сбрасывают слабые руки, чаще блефуют и так далее.
  • Регулярно просматривай статистику бота не только на предмет технических ошибок или неправильного следования стратегии, но и на предмет тенденций. Если игроки распознают шаблонное поведение спустя полчаса игры, они смогут использовать это в своих целях, и денежный счет твоего бота будет планомерно уменьшаться.
  • Если есть возможность, используй несколько разных аккаунтов для покер-рума. Несмотря на то, что на многих ресурсах это запрещено правилами, никто не мешает сделать пару запасных акков - разумеется, исключительно ради спортивного интереса:).
  • Не забывай, что администрация покер-рума может распознать работу бота по статистике, которая ведется для каждого игрока.
  • Выбирай столы с новичками на низких ставках. Пусть мал выигрыш, зато част:).
  • Info
    • Помни, покер-румы регулярно обновляют свой софт, поэтому для полной работоспособности бота его необходимо периодически обновлять!
    • Не забывай, что сам бот — всего лишь автоматизированное средство для игры в покер, наиболее важная его часть стратегия игры.