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

  • 10.05.2019

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

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

Немного о ботах

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

Создание бота для Telegram

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



Написание робота не всегда требует знание веб-языков программирования, можно обойтись практически без данной информации. Единственный недостаток второго варианта – программу нельзя будет качественно оптимизировать и могут появляться некоторые косяки. Для создания бота потребуется робот - @BotFather . Изначально потребуется добавить бота в список контактов и инициировать его запуск.

Написание бота выполняется поэтапно:

  1. Ввод команды /newbot – сейчас происходит генерация собственного, нового бота. Робот системы, BotFather, запросит ввести имя для бота, оно должно быть уникальным и заканчиваться на 3 буквы – «bot» ;
  2. По желанию добавляется аватарка для программы и описание его действий или информация об авторе;
  3. На этом этапе BotFather пересылает ваш собственный токен API . В будущем код потребуется, поэтому нужно сохранить его куда-нибудь, чтобы не потерять, ведь запомнить вряд ли получится;
  4. Теперь бот создан, но его функционал приравнивается к 0. Для обучения программы хоть каким-нибудь действиям лучше использовать программирование, но подойдёт и Paquebot – ресурс для формирования роботов в социальные сети;
  5. Далее нужно добавить ещё одного бота - @Chatfuel и активировать его;
  6. Для запуска нужно ввести /addbot и после пробела вставить токен, который был ранее бережно сохранён;
  7. Сейчас бот уже сохранился на сервисе и пользоваться им можно прямо оттуда. Интерфейс программы интуитивно понятный, а команды для управления требуют начального уровня английского для понимания их предназначения. Функций огромное количество, поэтому перечислять нет смысла.
Используя услуги Paquebot теперь возможно управлять всем функционалом собственного бота, достаточно вводить базовые команды. К примеру, можно задать для бота права администратора канала, и он самостоятельно будет добавлять новости и обновлять ленту. Дополнительно здесь же возможно настраивать обновление в параллельных социальных сетях

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

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

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

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

Начал играть около 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 – кража малого блайнда). Эти параметры в основном используются при расширенной стратегии коротких стеков, для полных стеков этих параметров мало, но в качестве примера как их получить хватит. Для чего все эти параметры нужны и как их использовать советую почитать соответствующие ресурсы.

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

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







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

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

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

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

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

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

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

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

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

Чат-бот ВК

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

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

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

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

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

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

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

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