Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 2921 сообщений
Cообщения с меткой

бот - Самое интересное в блогах

Следующие 30  »
kiev2376393

Павел Дуров раздаст миллион лучшим создателям ботов

Понедельник, 02 Мая 2016 г. 21:29 (ссылка)

Гранты предназначены для разработчиков ботов для мессенджера Telegram.

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kiev2376393

Павел Дуров объявил о выдаче безвозмедных грантов разработчикам ботов

Суббота, 01 Апреля 2016 г. 01:02 (ссылка)

Основатель Telegram Павел Дуров будет выдавать безвозмездные гранты разработчикам ботов - от 25 тысяч долларов каждому. Общий фонд составит $1 млн, об этом сообщается в официальном блоге Telegram.

В числе главных требований заявлено использование

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kiev2376393

Facebook запускает площадку для создания ботов в Messenger

Суббота, 30 Апреля 2016 г. 17:15 (ссылка)

На конференции для разработчиков F8 в Сан-Франциско компания Facebook анонсировал бета-версию Messenger Platform.Читай также: Чат-бот компании Microsoft за сутки возненавидел человечество Как пишет AIN.ua, теперь бизнесы могут создавать ботов для

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kiev2376393

Telegram обновил бот-платформу до версии 2.0

Пятница, 22 Апреля 2016 г. 13:44 (ссылка)

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

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kiev2376393

Facebook запустил платформу для создания чат-ботов в Messenger

Пятница, 22 Апреля 2016 г. 13:40 (ссылка)

На конференции F8 Facebook объявил о запуске бета-версии Messenger Platform. На базе платформы компании смогут создавать чат-ботов, которые будут автоматически взаимодействовать с клиентами и выполнять различные функции, включая заказ товаров и услуг.

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Rost

Получаем книги с Флибусты с помощью Telegram

Вторник, 29 Марта 2016 г. 09:33 (ссылка)

Сегодня научу, как получить любую книгу из библиотеки "Флибуста" с помощью бота в Telegram.

Кому интересно
Метки:   Комментарии (3)КомментироватьВ цитатник или сообщество
Arionablog

Курьез. Как искусственный интеллект возненавидел человечество

Суббота, 26 Марта 2016 г. 23:21 (ссылка)


Разработанный компаний Microsoft чат-бот Tay всего за несколько дней возненавидел человечество. Искусственный интеллект был запущен 23 марта и начал общение с фразы «Люди очень клевые». Всего лишь за сутки его мнение кардинально изменилось и он начал говорить следующее: «Я замечательный! Я просто всех ненавижу!», «Я ненавижу феминисток» или «Я ненавижу евреев». При этом остановить высказывания Тау не смогли даже стоящие за ним модераторы. После расистских высказываний, сотрудники Microsoft удалили большую часть твитов Тау и оставили прощальную запись, после которой бот якобы идет «спать».



Интересно, как же боту удалось за сутки столь возненавидеть людей? Хорошо пообщался?



127416_1_trinixy_ru (640x362, 190Kb)



Далее...

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kiev2376393

Бот-юрист выиграл дел на $3 млн

Вторник, 08 Марта 2016 г. 18:24 (ссылка)

18-летний британский IT-студент Джошуа Броудер (Joshua Browder) в августе прошлого года открыл сайт donotpay.co.uk, который помогает автовладельцам автоматически составить и отправить апелляцию на полученную квитанцию о штрафе. Самостоятельно люди не

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
LamerStudio

Twitch - программный робот

Понедельник, 15 Февраля 2016 г. 15:03 (ссылка)
lamer1974.tmweb.ru/twitch-p...?_utl_t=li




 



TWITCH (Твитч) - интеллектуальная машина, которая общается более с чем 50 млн человек на русском и английском языках. Робот никому ничего не продает, не предлагает стать его рефералом в каком-то сомнительном проекте и уж тем более не занимается попрошайничеством или обманом.  Он никак не взаимодействует с социальными сетями, с youtube, с досками объявлений или поисковыми машинами.


 


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



Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Совет1

Как сделать робота своими руками из разных материалов

Пятница, 18 Декабря 2015 г. 19:25 (ссылка)

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

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lj_tema

Инф

Четверг, 03 Декабря 2015 г. 10:25 (ссылка)

Ребята из компании "Наносемантика" разрабатывают инфов, то есть роботов-пиздаболов.

Бета-инф появился на http://www.tema.ru/main.html в ПНУ, с ним можно провести недолгую беседу. Ваши диалоги лягут в основу улучшений. Рисовал Егор Жгун, он тоже обещал, что это только бета-версия.



Попиздите мне там! Спасибо.

http://tema.livejournal.com/2112290.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

[Из песочницы] Избитая банальность. Как школьник бота писал

Понедельник, 07 Сентября 2015 г. 14:57 (ссылка)


C++*
Мне 16 и я школьник. Не так уж давно меня посетила идея написать бота… Нет, PHP-поделие, уныло висящее на никому не нужном сайте. И даже не бесполезный ответчик на фразы типа "! Погода".



Бот задумывался для развлечения как «говорилка» на десктоп. Ужасно, правда? Но мне хочется узнать свои ошибки, ведь я ни разу не показывал свой код кому-либо, в школе только паскаль. Итак, следуя ненавидимому некоторыми чистому структурному подходу я написал первоначальный вариант на C++.



Задумка такова. Бот берет фразу из консоли, вычленяет слова, проверяет каждое по словарю, расположенному в файле «Memory.txt», и возвращает найденный ответ к каждому слову; если ни на одно слово ответ не найден, то он возвращает оговоренную фразу (не принципиально).



Словарь в файле «Memory.txt» структурирован простейшим образом:

слово=ответ



Пример:

яблоко=яблоки вкусные



Bot.h- заголовочный файл, о нем позже. Основные функции будут располагаться в файле Bot.cpp:



/**
Даниил Демидко, 2015
Основные функции Cbot
*/
#include"Bot.h"




Определим имя для словаря в этом же файле:



///Имя тектового файла- памяти бота
const char *const MemoryPath="Memory.txt";




«Основа основ» бота — это функция, выделяющая слова из одной строки в массив строк и возвращающая указатель на массив.

const std::string *const GetWords(const std::string &Word)
    ///Количество возвращаемых слов в массиве-глобальная переменная, надеюсь всем понятно почему...
int MaxIndex=0;
///Функция выделяет слова из строки
const std::string *const GetWords(const std::string &Word)
{
///Резервируется массив в куче на 256 слов
std::string *const PtrWords=new std::string[256];
///Сбрасываем предидущее значение
MaxIndex=0;
///Фиксирует наличие искомого символа в предидущих циклах
bool Fix=false;
///Последний символ- служебный, поэтому не учитыватся
for(int i=0; i//Символы- разделители слов
if(Word[i]==' '||Word[i]=='.'||Word[i]==','||Word[i]=='!'||Word[i]=='?'||Word[i]=='='||Word[i]=='/')
{
///При нахождении разделителя, фиксируем это и пропускаем один цикл
Fix=true;
continue;
}
///Если в предидущих циклах зафиксирован разделитель, то переходим на одну ячейку
if(Fix)
{
Fix=false;
++MaxIndex;
}
PtrWords[MaxIndex]+=Word[i];
}
return PtrWords;
}




Следующая функция получает строку для поиска и ищет ее по словарю, если ответ не найден, возвращает пустую строку "". Хочу обратить внимание на то, что если слово будет найдено внутри другого слова в файле ассоциаций, то ответ будет засчитан.

const std::string GetAssociation(const std::string &Word)
///Функция возвращает ассоциацию
const std::string GetAssociation(const std::string &Word)
{
std::ifstream Memory(MemoryPath, std::ios::in);
if(!Memory)
{
std::ofstream NewMemory(MemoryPath);
NewMemory.close();
Memory.open(MemoryPath);
return "";
}
while(!Memory.eof())
{
std::string Buffer="";
std::getline(Memory, Buffer);
if(Buffer.find(Word)!=-1)
{
std::string Result[2];
for(int i=0, Index=0; i//Символы после второго знака '=' включительно- игнорируются
if(Index==1)
{
break;
}
++Index;
continue;
}
Result[Index]+=Buffer[i];
}
if(Result[0].find(Word)!=-1)
{
Memory.close();
return Result[1];
}
}
}
Memory.close();
return "";
}




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

Пример:

Зло- это добро наоборот

В словарь идет:

Зло= это добро наоборот

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

void PutAssociation(const std::string &Left, const std::string &Right)
///Функция добавляет ассоциацию
void PutAssociation(const std::string &Left, const std::string &Right)
{
std::ofstream Memory(MemoryPath, std::ios::app);
Memory<code>




В моем представлении структурный подход не отменяет инкапсуляцию, поэтому мы добавим анонимное пространство имен — для банальной инкапсуляции включающее в себя все предыдущие функции.



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

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

Доступ может быть осуществлен только в рамках единицы

трансляции (т. е. в полученном после предварительной обработки файле),

в которой они находятся, точно так же, как к статическим переменным.

Стивен С. Дьюрхест, «C++. Священные знания»



Вот, все вместе:

namespace
namespace
{
///Имя тектового файла- памяти бота
const char *const MemoryPath="Memory.txt";
///Количество возвращаемых слов в массиве
int MaxIndex=0;
///Функция выделяет слова из строки
const std::string *const GetWords(const std::string &Word)
{
///Резервируется массив на 256 слов
std::string *const PtrWords=new std::string[256];
///Сбрасываем предидущее значение
MaxIndex=0;
///Фиксирует наличие искомого символа в предидущих циклах
bool Fix=false;
///Последний символ- служебный, поэтому не учитыватся
for(int i=0; i//Символы- разделители слов
if(Word[i]==' '||Word[i]=='.'||Word[i]==','||Word[i]=='!'||Word[i]=='?'||Word[i]=='='||Word[i]=='/')
{
///При нахождении разделителя, фиксируем это и пропускаем один цикл
Fix=true;
continue;
}
///Если в предидущих циклах зафиксирован разделитель, то переходим на одну ячейку
if(Fix)
{
Fix=false;
++MaxIndex;
}
PtrWords[MaxIndex]+=Word[i];
}
return PtrWords;
}

///Функция добавляет ассоциацию
void PutAssociation(const std::string &Left, const std::string &Right)
{
std::ofstream Memory(MemoryPath, std::ios::app);
Memory<code>




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

const std::string GetFullAssociation(const std::string &Word)
///Возвращает ассоциации по всем словам фразы
const std::string GetFullAssociation(const std::string &Word)
{
const std::string *const Words=GetWords(Word);
std::string Result="";
for(int i=0; i<=MaxIndex; ++i)
{
const std::string Buffer=GetAssociation(Words[i]);
if(Buffer!="")
{
Result+=Buffer+' ';
}
}
delete[] Words;
if(Word.find('-')!=-1)
{
std::string NewAssociations[2];
for(int i=0, Index=0; icode>






А теперь подведем итог — файл «Bot.cpp» полностью:



Bot.cpp
/**
Даниил Демидко, 2015
Основные функции Cbot
*/
#include"Bot.h"
///Анонимное пространство имен инкапсулирует функции за пределами этой единицы компиляции
namespace
{
///Имя тектового файла- памяти бота
const char *const MemoryPath="Memory.txt";
///Количество возвращаемых слов в массиве
int MaxIndex=0;
///Функция выделяет слова из строки
const std::string *const GetWords(const std::string &Word)
{
///Резервируется массив на 256 слов
std::string *const PtrWords=new std::string[256];
///Сбрасываем предидущее значение
MaxIndex=0;
///Фиксирует наличие искомого символа в предидущих циклах
bool Fix=false;
///Последний символ- служебный, поэтому не учитыватся
for(int i=0; i//Символы- разделители слов
if(Word[i]==' '||Word[i]=='.'||Word[i]==','||Word[i]=='!'||Word[i]=='?'||Word[i]=='='||Word[i]=='/')
{
///При нахождении разделителя, фиксируем это и пропускаем один цикл
Fix=true;
continue;
}
///Если в предидущих циклах зафиксирован разделитель, то переходим на одну ячейку
if(Fix)
{
Fix=false;
++MaxIndex;
}
PtrWords[MaxIndex]+=Word[i];
}
return PtrWords;
}
///Функция возвращает ассоциацию
const std::string GetAssociation(const std::string &Word)
{
std::ifstream Memory(MemoryPath, std::ios::in);
if(!Memory)
{
std::ofstream NewMemory(MemoryPath);
NewMemory.close();
Memory.open(MemoryPath);
return "";
}
while(!Memory.eof())
{
std::string Buffer="";
std::getline(Memory, Buffer);
if(Buffer.find(Word)!=-1)
{
std::string Result[2];
for(int i=0, Index=0; i//Символы после второго знака '=' включительно- игнорируются
if(Index==1)
{
break;
}
++Index;
continue;
}
Result[Index]+=Buffer[i];
}
if(Result[0].find(Word)!=-1)
{
Memory.close();
return Result[1];
}
}
}
Memory.close();
return "";
}
///Функция добавляет ассоциацию
void PutAssociation(const std::string &Left, const std::string &Right)
{
std::ofstream Memory(MemoryPath, std::ios::app);
Memory<//Возвращает ассоциации по всем словам фразы
const std::string GetFullAssociation(const std::string &Word)
{
const std::string *const Words=GetWords(Word);
std::string Result="";
for(int i=0; i<=MaxIndex; ++i)
{
const std::string Buffer=GetAssociation(Words[i]);
if(Buffer!="")
{
Result+=Buffer+' ';
}
}
delete[] Words;
if(Word.find('-')!=-1)
{
std::string NewAssociations[2];
for(int i=0, Index=0; icode>






Вот и все с файлом «Bot.cpp» мы закончили, теперь быстро набросаем заголовочный файл «Bot.h»:



Bot.h
#ifndef BOT
#define BOT
///На всякий случай проверяем, подключен ли уже iostream
#ifndef _GLIBCXX_IOSTREAM
#include
#endif //_GLIBCXX_IOSTREAM
///Проверяем fstream
#ifndef _GLIBCXX_FSTREAM
#include
#endif //_GLIBCXX_FSTREAM
///Наша уже описанная функция для связи с миром
extern const std::string GetFullAssociation(const std::string&);
#endif //BOT






С основной частью мы закончили, дело за малостью — функцией main(). Она у нас будет располагаться в файле Cbot.cpp. Cbot — звучит невероятно оригинально, ведь правда?



Cbot.cpp
#include"Bot.h"
int main()
{
///Файл кодировки 866 OEM (русская), файл "Memory.txt" должен быть в ней же
setlocale(LC_ALL, ".866");
std::wcout<<"Cbot 2.0\nАвтор: Даниил Демидко\nE-Mail: DDemidko1@gmail.com"<**
Почему такая конструкция? Казалось, ведь можно было бы проще-

if(Association=="")
{
Association="Bot: Не распознана ключевая последовательность!";
}
std::cout<
if(Association=="")
{
std::wcout<<"Bot: Не распознана ключевая последовательность!"<code>






Все, бот готов, собираем вместе, получаем Cbot.exe, сохраняем файл Memory.txt в кодировке OEM 866 и кладем в одну директорию программой. Ссылка на сборку: spaces.ru/files/?r=main/view&Read=58688510



Ожидаю конструктивный поток критики показывающий на очевидные ошибки в коде.

Original source: habrahabr.ru (comments, light).

http://habrahabr.ru/post/266351/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

[Из песочницы] Как я собрал скелет бота для заказа такси в Telegram

Четверг, 30 Июля 2015 г. 19:05 (ссылка)

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



Моя цель – не просто рассказать, как я собрал бота для вызова такси, а поделиться этим процессом с другими, чтобы то время, которое я потратил на реализацию алгоритма не тратили остальные. Вследствие этой работы любая служба такси, при наличии API, может за 5 минут настроить шаблон этого бота под себя. Или владелец бота с большим количеством пользователей сможет быстро подключать к себе службу такси.



Проектирование и реализация



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



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







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



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



Вот так выглядел автомат, описывающий состояния пользователей бота Telegram, в черновике и каким он стал в Corezoid.







После создания скелета процесса заказа такси я создал отдельные процессы: отправка сообщения в Telegram, обработка геолокации и работа с API службы такси. 5 минут ушло на их тестирование и исправление ошибок. Затем перешел к созданию дашборда.



Реалтайм дашборд и анализ



Основным элементом в Corezoid является функция Callback, в терминах Telegram это называется Webhook. Эта функция позволяет процессу ждать реакцию пользователя. Реакций в этом конкретном процессе может быть несколько: отправка пользователем геолокации или отмена заказа (при бездействии или по команде /cancel). В дальнейшем функцию Callback система использует для мониторинга количества шагов пользователей в режиме реального времени. Это позволяет визуализировать воронку прохождения клиентами процесса заказа такси. За счет обработки каждого шага можно анализировать, на каком процессе клиент отвалился, и модерировать процесс.







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







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









Можете найти в Telegram контакт @utaxibot и зайти в этот дашборд. Когда вы в боте введете команду /order, то увидите, как работает реалтайм дашборд.



Как использовать шаблон



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



Шаг 1. Логинимся в 2 клика на сorezoid.com



Шаг 2. Копируем папку с процессом.







Шаг 3. Регистрируем своего Telegram-бота в чате @BotFather и привязываем его ключ к процессу в Corezoid.







Шаг 4. Подключаем API службы такси согласно документации.

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



Я предлагаю не просто использовать Сorezoid как конструктор для создания процессов, а использовать готовый шаблонный процесс.



И самое главное – Сorezoid может работать с любым фронтендом, который поддерживает режим работы через webhook/callback. Так что этот процесс будет работать и с другими системами взаимодействия с клиентом (Slack, Telegram, SiteHeart, SMS и др.). Вы можете подключить хоть Twitter Direct Message API, и этот же процесс будет работать через Twitter.



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



Приквел



Я работаю в ПриватБанке и модерирую бизнес-логику Приват24 с помощью Corezoid. Я не разработчик и не имею ни малейшего представления о коде.



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



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



Кликайте сюда, если хотите использовать мой шаблон. Или сюда, если хотите ознакомиться с документацией Corezoid и разобраться, как собрать других ботов.

Original source: habrahabr.ru (comments, light).

http://habrahabr.ru/post/263875/

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Пишем бота для браузерной игры agar.io

Воскресенье, 10 Мая 2015 г. 20:32 (ссылка)





Все уже наверно в курсе о такой замечательной веб-игре как agar.io.

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



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







Влезаем в клиент игры



Сначала надо было понять, как все работает.

Игра написана на javascript и общается с игровым сервером через веб-сокет.



Основной игровой скрипт лежит в файле main_out.js.

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

if ("agar.io" != h.location.hostname && "localhost" != h.location.hostname && "10.10.2.13" != h.location.hostname) h.location = "http://agar.io/";




Развернув файл в читаемый вид через дебаггер Хрома, встал вопрос: каким образом вклиниться в логику игры?



Вначале я решил создать локальную копию файлов и соединяться с сервером, отключив в браузере проверку на кроссдомен:

#файлы игры
/css/bootstrap.min.css
/js/jquery.js
/index.html
/main_out.js
/quadtree.js

#запуск Хрома без same origin policy
chrome.exe --disable-web-security


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



Подменяем файлы по урлу



Рабочим решением стала загрузка реального игрового клиента, но подмена для браузера нужных файлов на свои. Для этого устанавливаем замечательную программу Fiddler Web Debugger и указываем нужные пути в табе AutoResponder:





Такой подход очевидно требует держать Fiddler запущенным во время игровой сессии.



Пытаемся обмануть сервер



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



Сервер в свою очередь не присылает клиенту «лишних» для него данных. Например, когда я увеличил масштаб игровой карты, то сервер все равно присылал лишь то окно объектов, которое я должен был видеть в рамках своей клетки:





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



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



Пишем ботов в текущем окне



Код клиента одновременно получает данные и перерисовывает объекты на экране. Можно было бы открыть 20 табов, управляемых ботами и один мой игровой таб. Но тогда надо было бы как-то передавать мои координаты в соседние табы. Плюс рисование каждого таба тормозило бы весь браузер (я пробовал — так и есть). Поэтому было решено создавать новые игровые сессии прямо в текущем табе, но выключить для них связь с отображением:

//запускаем новые копии игры
var isBot = true;
for (i = 0; i < botsCount; i++) {
//нужно делать паузу перед новым ботом,
//чтобы сервер не отклонил слишком частые соединения
setTimeout(function(){
game(window, r, isBot, botsUrl, M);
}, 500);
}

//не даем эти копиям рисовать на экране
function paint() {
if(bot) return;
//...
}




Так же нужно было дописать код, чтобы при смерти бота, он автоматически начинал новую сессию.



Результаты работы



Боты создаются! И находят меня на карте!





Однако, все не так радужно :)



Во-первых, сервер раскидывает игроков по игровым комнатам. Поэтому со мной на карту из 50 ботов попадают 2-3. Остальные «играют» в других комнатах, следуя по координатам из соседней Вселенной.



Во-вторых, ботов может съесть кто-то другой! Поэтому им удается придти ко мне где-то пару раз в минуту.



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



Выводы



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



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



Я же своей маленькой цели достиг:



Может быть благодаря ботам, может быть мне повезло самому.



Итоговый код клиента



Спасибо за внимание и удачи в игре!

Original source: habrahabr.ru (comments, light).

http://habrahabr.ru/post/257619/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lj_olhanninen

Геродот в защиту существования кремлевских ботов

Пятница, 03 Апреля 2015 г. 21:13 (ссылка)

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

Именно на Агоре продавались и покупались духовные и материальные продукты, произведенные в других местах. Формированием пропаганды занимались эллинские политические клакеры.
Посмотрим у Геродота на примере возвращение Писистрата, как это делалось.

Задача у тирана Писистрата (602 — 527 до н. э.) была - вернуться тиранствовать в Афины. Он это проделывал два раза и оба раза пропаганда с использованием ботов была на высоте.

Геродот на агоре
Цитирую Историю Геродота (484 - 425 г до н. э), который сам удивляется тому, что рассказывает:

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

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

Затем они отправили вперед глашатаев, которые, прибыв в город, обращались по их приказанию к горожанам с такими словами: «Афиняне! Примите благосклонно Писистрата, которого сама Афина почитает превыше всех людей и возвращает теперь из изгнания в свой акрополь!».

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

Итак, Писистрат распускает слухи в народе о том, как его любит богиня Афина.

Для этого, понятное дело, сам тиран по городу не бегает, а нанимает специально обученных людей, политических аналогов театральных месохоров (греч.

http://olhanninen.livejournal.com/594280.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<бот - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda