Чат-боты: введение от разработчика. Как создать "бота" в "ВК" самостоятельно и без специальных программ

На iOS - iPhone, iPod touch 15.05.2019
На iOS - iPhone, iPod touch

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

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

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

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

Зачем он нужен?

Как создать бота в ВК для группы? Боты в известной социальной сети продвигают различные сообщества. Заниматься накруткой подписчиков в социальных сетях рискованно, особенно если их число превышает пятьсот в день. Если в группе состоят роботы, а это более 30%, то она будет заблокирована администрацией.

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

Конструкторы

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

Чат-бот ВК

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

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

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

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

Не знаете, как создать бота в ВК самостоятельно? В этом могут помочь бесплатные конструкторы. Если же планируете сделать бота сложнее, лучше написать его вручную, используя любой язык программирования. Существуют инструменты, которые упрощают задачу конструктору. К примеру, api.ai умеет преобразовывать запросы пользователя так, что эти команды понимает компьютер. Если спросить у бота: «Какая завтра будет погода в Ростовской области?» - он поймет вопрос по ключевым словам «погода, завтра, Ростовской области» и выдаст результат.

На вопрос о том, как создать бота в ВК без программ, специалисты отвечают: в первую очередь выберите язык программирования. Это относится к тем пользователям, которые имеют об этом представление. Чаще всего применяют Python, Javascript. Затем выбирается платформа для работы с ботом: любая социальная сеть, программа отправки и получения сообщений и библиотека для взаимодействия с мессенджером (API). Она позволяет программе общаться с социальной сетью. Когда платформа и язык программирования выбраны, можно создать простого бота, а все дальнейшие действия зависят от первых. Когда бот создан, попробуйте протестировать его. Это помогает устранить недочеты и ошибки, улучшить его.

Как действовать?

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

В последнее время 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). Либо же можно получить от Let"s Encrypt.

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

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

Pip install telepot

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

Import telepot token = "123456" TelegramBot = telepot.Bot(token) print TelegramBot.getMe()

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

{u"username": u"PythonPlanetBot", u"first_name": u"Python Planet Bot", u"id": 199266571}

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

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

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

TelegramBot.getUpdates() [{u"message": {u"date": 1459927254, u"text": u"/start", u"from": {u"username": u"adilkhash", u"first_name": u"Adil", u"id": 31337}, u"message_id": 1, u"chat": {u"username": u"adilkhash", u"first_name": u"Adil", u"type": u"private", u"id": 7350}}, u"update_id": 649179764}]

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

TelegramBot.getUpdates(649179764+1) [{u"message": {u"date": 1459928527, u"text": u"hello bro", u"from": {u"username": u"adilkhash", u"first_name": u"Adil", u"id": 31337}, u"message_id": 13, u"chat": {u"username": u"adilkhash", u"first_name": u"Adil", u"type": u"private", u"id": 7350}}, u"update_id": 649179765}]

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

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

# -*- coding: utf8 -*- from xml.etree import cElementTree import requests def parse_planetpy_rss(): """Parses first 10 items from http://planetpython.org/rss20.xml """ response = requests.get("http://planetpython.org/rss20.xml") parsed_xml = cElementTree.fromstring(response.content) items = for node in parsed_xml.iter(): if node.tag == "item": item = {} for item_node in list(node): if item_node.tag == "title": item["title"] = item_node.text if item_node.tag == "link": item["link"] = item_node.text items.append(item) return items[:10]

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

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

Немного истории.

Начал играть около 5 лет назад, за это время отыграно более 1 миллиона рук. В основном это No Limit Holdem (нелимитированный холдем) за короткими столами (от 2 до 6 человек за столом), есть опыт игры в Омаху, HU NL Holdem. Игра вроде как хобби и отдых. И вот как то с друзьями появилась идея написать бота, первая идея была написать под лимит холдем, и когда наполовину бот был написан, приняли закон запрещающий играть американцам в покер, в итоге с лимитом закинули бота. Первая версия была написано на нейронной сети с распознаванием образов, что это значит – обучили бота распознавать по снимкам с экрана карты, но это сами понимаете неточный метод, но при достаточно хорошем обучении распознавал с точностью 98-99%.Далее версии ботов уже работали на прямую с окнами румов, используя их ресурсы., а так же в тандеме с программами для анализа и сбора статистики игры.

Покер румы не спят.

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

Схема покер бота.

Схему можно разделить на 3 части:

Блок 1 - блок взаимодействия с клиентом для игры в покер.
Блок 2 - блок принятия решения.
Блок 3 - блок сбора статистики, на мой взгляд лучше использовать сторонний софт, например PokerTracker3, отключив при этом вывод статистики на экран.
Далее рассмотрим каждый блок более подробно.

Блок 1 - блок взаимодействия с клиентом для игры в покер.

Этот блок служит для сбора информации на игровом столе и передачи в блок принятия решения, а так же получив ответ с решением выполнить то или иное действие как Fold, Raise, Call или All-In. Теперь рассмотрим этот блок. Часть этой части это взаимодействие с главным окном программы, это такие действия как выбор лимита, выбор стола за которым будем играть, это тоже большая часть, но на ней не будем останавливаться. Рассмотрим более подробно часть уже со столом. Сначала нам нужно найти хэндлы всех игровых открытых столов (окон), можно это сделать при помощи функции EnumWindows.
Функция EnumWindows перечисляет все окна верхнего уровня на экране, передавая дескриптор каждого окна, в свою очередь, в определяемую программой функцию повторного вызова. EnumWindows действует до тех пор, пока последнее окно верхнего уровня не будет перечислено, или пока функция повторного вызова не возвратит значение ЛОЖЬ (FALSE).

Синтаксис:
BOOL EnumWindows (WNDENUMPROC lpEnumFunc, // указатель на функцию обратного вызова LPARAM lParam // определяемое программой значение);
Параметры:
lpEnumFunc - указывает на определяемую программой функцию повторного вызова. Для получения дополнительной информации, см. функцию повторного вызова EnumWindowsProc.

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

Теперь когда мы имеем хэндл игрового окна мы можем вытягивать информацию о столе. Большая часть информации хранится в дилерском окне. Из него мы можем узнать все участников за столом, кто зашел, кто вышел со стола, кто сделал какое действие, карты на столе и свои карты. Для этого нам понадобится парсер текста, как его писать рассказывать не буду, это отдельная тема, главное что идея ясна J. Но перед парсером нам нужно сначала найти элементы окна, и среди них найти дилерское окошко. Очень часто дилерское окно это класс производный от Internet Explorer_Server, чтобы его найти воспользуемся функцией EnumChildWindows, а затем GetClassName.

EnumChildWindows перечисляет дочерние окна, которые принадлежат определенному родительскому окну, в свою очередь, передавая дескриптор каждого дочернего окна в функцию повторного вызова, определяемую программой. Функция EnumChildWindows работает до тех пор, пока не будет перечислено последнее дочернее окно или функция повторного вызова не возвратит значение ЛОЖЬ (FALSE).

Синтаксис

BOOL EnumChildWindows (HWND hWndParent, // дескриптор родительского окна WNDENUMPROC lpEnumFunc, // указатель на функцию обратного вызова LPARAM lParam // значение, определяемое программой);

Параметры:
hWndParent - идентифицирует родительское окно, чьи дочерние окна должны перечисляться.
lpEnumFunc - указывает на определяемую программой функцию повторного вызова. Для получения дополнительной информации относительно функции повторного вызова, см. функцию повторного вызова EnumChildProc.
lParam - устанавливает 32-разрядное, определяемое программой значение, которое будет передано в функцию повторного вызова.
Возвращаемые значения: если функция завершилась успешно, возвращается значение отличное от нуля. Если функция потерпела неудачу, возвращаемое значение - ноль.

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

Блок 2 - блок принятия решения

Этот блок, сердце всего бота, т.к. от него зависит насколько он успешен в игре, насколько правильные принимает решения. В журнале Хакер 137 от 06.2010 рассматривался пример полностью опирающийся на теорию вероятности и это хорошо, но чтобы получить достаточно достоверный результат надо провести достаточно много итераций. Чтобы играть достаточно уверенно против противника мы должны знать его диапазон и как он играет(это кусок привязан к статистике), так же есть определенные стратегии игры, зависящие от количества денег у вас, от количества игроков за столом, и самой стратегии игры. От всего этого зависит стартовый диапазон рук, и действия на последующих улицах, например человек играющий по стратегии коротких стеков (SSS) редко делает какие то ходы на ривере (когда выложена 5 карта на стол), т.к. к этому моменту он часто уже в Аллине (пошел в ва-банк). Оценка ситуаций так же идет в подсчете аутов, ауты это количество карт, которое улучшит наше положение на последующих улицах, отсюда вытекаю такие комбинации как стрит дро, стрит в дырку, флэшь дро и т.д. Дро это тоже комбинация и в зависимости от количества аутов имеет цену.И имея определенную комбинацию, даже в данный момент не победную, мы уже строим линию игры. Благодаря этим дополнительным данным мы уже можем принимать решения в зависимости от выбранной стратегии, если добавить поверх еще статистику игрока они будут еще точнее, а при добавлении полного просчета эту выборку еще можно дополнить. Надеюсь донес свою мысль о сокращении выборок и принятия решений, все это складывается на личном опыте игры и принятия решения, т.к. в несколько предложений не расскажешь теории игры в покер, которая издается во многих томах, о разных ситуациях, который бесчисленное множество, хотя можно и выделить по основным группам…

Сначала нам надо узнать ситуацию на столе, и узнать какая комбинация у нас имеется. Вот пример кода определения комбинации(переписал более понятно, но может не оптимально):

// функция для заполнения массива карт, вовращает порядковый номер карты int CardToNumber(char Card) { if ((Card>"1")&&(Card<="9"))return (Card-48); if (Card=="T")return 10; if (Card=="J")return 11; if (Card=="Q")return 12; if (Card=="K")return 13; if (Card=="A")return 14; return -1; } // функция для получения бита, соотвествующего масти карты int MastToNumber(char mast) { if (mast=="h")return 1; if (mast=="d")return 2; if (mast=="c")return 4; if (mast=="s")return 8; return 0; } // функции расчета комбинации int Hand(char *MyHand_,char *CardsTable_) { int flush_,flush; //0-ничего 1-флэшь 2-флэшь дро 3-бэедорфлэшьдро 4-флэшь на столе(nothing cards) int cards; //i-карты j1-кол-во карт j2-масти bits 1,2,3,4-h,d,c,s j3-0/1 - 1-наша карта 0-не наша(на столе) int straight; //0-ничего, 1-стрит, 2-открытый стрит(2-х сторонний) 3-гатшот 4-натс стрит на столе 5-стрит на столе int readyhand; //0-не готовая, 1-готовая комбинация int i,j, maxi,flag_,flag,flmax,top,pair_,pair,three,four,over,set_,treeps,quad,num,kicker; // заполнение массива с картами исходя из входящих данных for(i=1;i<=14;i++) for(j=1;j<=3;j++)cards[i][j]=0; cards++; cards=cards| 2*MastToNumber(MyHand_)); cards=cards|(32*MastToNumber(MyHand_)); cards=1; cards++; cards=cards|(2*MastToNumber(MyHand_)); cards=cards|(32*MastToNumber(MyHand_)); cards=cards+1; i=0; while(i0)&&(i>1)) { num++; if (cards[i]==1)flag=i; } else { if (maxi0) { num++; if (cards[i]==1)flag=i; } else { if (maxi=maxi) { while(i0)&&(flmax-i!=1))flag++; if((cards>0)&&((flmax-i)==1))flag++; i++; } } straight=0; if((maxi>=5)&&(flmax==14)&&(flag==0)) straight=4; if((maxi>=5)&&(flmax<14)&&(flag==0)) straight=5; if((maxi>=5)&&(flag>0)) straight=1; if((maxi==4)&&(flag>0)&&(flmax<14)) straight=2; if((maxi==4)&&(flag>0)&&(flmax==14)) straight=3; if((maxi==4)&&(flag>0)&&(flmax==4)) straight=3; // вычисление флэшей flush_=0; j=2; while(j<=16) { flush=0; flag=0; i=2; num=0; flmax=0; flag_=0; while(i<15){ if ((cards[i]& j)==j) { flmax=i;num++;} if ((cards[i]& (j*16))==j*16) { flag_++;flag=i;} i++; } if((num==5)&&(flag==0)) flush=4; if((num>=5)&&(flmax==14)&&(flag>=13)) flush=1; if((num>=5)&&(flmax==14)&&((cards& j)==j)&&(flag==12)) flush=1; if((num>=5)&&(flmax==14)&&((cards& j)==j)&&((cards& j)==j)&&(flag==11)) flush=1; if((num>=5)&&(flmax==14)&&((cards& j)==j)&&((cards& j)==j)&&((cards& j)==j)&&(flag==10)) flush=1; if((num>=5)&&(flmax==14)&&((cards& j)==j)&&((cards& j)==j)&&((cards& j)==j)&&((cards& j)==j)) flush=1; if((num==5)&&(flag_==2)) flush=1; if((num==4)&&(flag>0)) flush=2; if((num==3)&&(flag==2)) flush=3; if((flush>flush_)&&(flush!=0))flush_=flush; j*=2; } flush=flush_; // вычисление пары, овер пары, сета, трипса, квада, кикера pair=0;three=0;four=0; top=0;over=0;set_=0;treeps=0;quad=0;pair_=0; i=2; while(i<15) { if ((cards[i]>=1)&&(cards[i]==0)){ top=0;over=0;} if ((cards[i]==1)&&(cards[i]==0)){ top=0;over=0;} if ((cards[i]==2)&&(cards[i]==0)){ pair++;} if ((cards[i]==2)&&(cards[i]==1)){ pair_++;pair++;top=1;} if ((cards[i]==2)&&(cards[i]==2)){ pair_++;pair++;over=1;} if (cards[i]==3){ three++;} if (cards[i]==4){ four++;} if ((cards[i]==3)&&(cards[i]==1)) treeps=1; if ((cards[i]==3)&&(cards[i]==2)) set_=1; if ((cards[i]==4)&&(cards[i]>0)) quad=1; if ((cards[i]==4)&&(cards>0)) quad=1; i++; } kicker=0; if (top>0) for(i=2;i<=14;i++){ if ((cards[i]==1)&&(cards[i]==1)) kicker=i; } // "Стрит:и тип стрита "- straight // "Флеш:и тип флэша "- flush // "К-во пар: "- pair // "К-во пар у нас: "- pair_ // "Топ пара: "- top // "Кикер" - kicker // "Овер пара: "- over // "3 карты: "- three // "Трипс:(2 карты на столе 1 у нас) "- treeps // "Сет: (2 у нас 1 на столе)"- Set_ // "4 карты: "- four // "Каре: "- quad ……… }

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

//готовность руки
readyhand=0; if ((pair==1)&&((top==1)||(over==1))) readyhand=1; if ((pair==1)&&(top==1)&&(kicker<11)&&(over==0)) readyhand=0; if ((pair>=2)&&((top==1)||(over==1))) readyhand=1; if ((pair==2)&&(top==1)&&(kicker<11)&&(over==0)) readyhand=0; if ((pair==2)&&((top==0)||(over==0))&&(pair_==2)) readyhand=1; if ((pair>2)&&((top==0)||(over==0))) readyhand=0; if ((three==1)&&(top==0)&&(over==0)&&(pair_==0)) readyhand=0; if (treeps==1) readyhand=1; if (set_==1) readyhand=1; if (straight==5) readyhand=0; if (straight==4) readyhand=1; if ((straight==2)&&(readyhand==0)) readyhand=2; if (straight==1) readyhand=1; if (flush==4) readyhand=0; if ((flush==2)&&(readyhand==0)) readyhand=2; if (flush==1) readyhand=1; if ((three==1)&&((top==1)||(over==1))) readyhand=1; if ((three==1)&&(top==0)&&(over==0)&&(pair_>0)) readyhand=1; if ((three==1)&&(top==0)&&(over==0)&&(pair_==0)&&(pair>0)) readyhand=0; //фулл на столе if ((treeps==1)&&(pair>0)) readyhand=1; if ((set_==1)&&(pair>0)) readyhand=1; if (quad==1) readyhand=1;

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

Блок 3 - блок сбора статистики

Это немаловажный блок, помогающий в принятии решений, вы можете как сами собирать статистику, как воспользоваться сторонними программами. Я опишу пример запроса к PokerTracker3, программа для сбора и анализа статистики игры, параметров в программе более 100, но нам хотя бы для примера достаточно и нескольких основных. В PokerTracker3 база хранится в Postges базе. Пример запроса:

SELECT sites.site_abbrev, p.player_name, COUNT(hhps.id_player) AS hands, AVG (CASE WHEN flg_vpip THEN 1 ELSE 0 END)*100 AS vpip, AVG (CASE WHEN cnt_p_raise >= 1 THEN 1 ELSE 0 END)*100 AS pfr, AVG (CASE WHEN flg_steal_att THEN 1 WHEN flg_steal_opp THEN 0 END)*100 AS ats, AVG (CASE WHEN flg_sb_steal_fold THEN 1 WHEN flg_blind_def_opp and flg_blind_s THEN 0 END)*100 AS fsbtos, AVG (CASE WHEN flg_bb_steal_fold THEN 1 WHEN flg_blind_def_opp and flg_blind_b THEN 0 END)*100 AS fbbtos, AVG (CASE WHEN enum_f_cbet_action="F" THEN 1 WHEN flg_f_cbet_def_opp THEN 0 END)*100 AS fcbetf FROM lookup_sites AS sites INNER JOIN (player AS p INNER JOIN holdem_hand_player_statistics AS hhps ON (p.player_name = "ник аппонента")and(p.id_player = hhps.id_player)) ON p.id_site = sites.id_site GROUP BY sites.site_abbrev,p.player_name ORDER BY sites.site_abbrev DESC;

На выходе получим по определенному игроку выборку, сайтов на которых такой ник имеется в базе, можно сократить по нашему сайту только, количество рук оппонента (нужна для точности показаний), VPIP(% рук с которыми заходит в игру), PFR (preflop raise –префлоп рейз), ATS (attemptto steel – сколько крадет блайндов на префлопе), CBET (c-bet on flop – ставка в продолжение на флопе),BBS (big blind steel –кража большого блайнда), SBS (small blind steel – кража малого блайнда). Эти параметры в основном используются при расширенной стратегии коротких стеков, для полных стеков этих параметров мало, но в качестве примера как их получить хватит. Для чего все эти параметры нужны и как их использовать советую почитать соответствующие ресурсы.

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

В заключение.
Вот немного скриншотов с того что может получится у тебя:







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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



Рекомендуем почитать

Наверх