2010/04/18

Немного о ботах и репах дебиана

Мы строили-строили и наконец построили! :) (Ц)все знают

Вштырилось мне как-то написать твиттер-бота для игры "Мафия". И я его написал, почти. А потом ещё одного...
Как всем известно, программист - существо ленивое, так и мне стало лень копипастить пачку свич-кейсов из одного бота в другого. Пришлось рефакторить (переписывать, да), выделять сущности, строить модель... И получился класс Bot, который реагирует на поток строковых команд. Так как он вызывает колбеки с параметрами, то оказалось, что его можно использовать как роутер, или интерпретатор, или как вам фантазия подскажет ;)

В качестве небольшой хаутушки кусок кода из погодного бота @WeaTwi
$bot = new WeaTwiBot($config['username'],$config['password']);

$bot->addBatch(
array(
Bot::COMMAND => '~!info|!help|!about~i'
,Bot::ACTION => array($bot,'updateStatus')
,Bot::PARAMETER => array('%s %s',
'~^(@[a-z0-9_]+):~i'=>1,
$bot->URL_INFO
)
,Bot::LAST => 1
)
);
$bot->addBatch(
array(
Bot::COMMAND => '~.+~'
,Bot::ACTION => array($bot,'getWeather')
,Bot::PARAMETER => array('~^@[a-z0-9_]+:(.+)~i'=>0)
,Bot::LAST => 1
)
);

$s = array();
foreach ($bot->getLastMentions() as $m)
$s[] = '@'.$m->user->screen_name.':'.preg_replace('~@'.$config['username'].'~i','',$m->text);

$bot->setQueue($s);
$bot->run();
die;
Вот так и живём =:)

Ах да, про дебиан и пхп. Оказывается, в репах дебиана нет такого вкусного php5.3! Как подсказывает гугл и http://www.openkazan.info/node/3515 обновиться можно из http://packages.dotdeb.org
$ nano /etc/apt/sources.list
...
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all
#
deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all
...
$ apt-get update
$ apt-get install php5
, о чём продвинутый юзер и так знает

Оставайтесь с нами, фоловьте ботов ;)
А кто предложит лучший алгоритм для мафиозного бота, тому плюшка

ps: чем бы таким код нормально отформатировать?..