<?php
|
class bot_synonimy_module implements BotModule {
|
function handle($msg, $params) {
|
$args = trim($msg->args);
|
|
if(empty($args)) {
|
return new BotMsg('Funkcja <b>synonimy</b> wymaga argumentu.<br />'
|
. '<br />'."\n"
|
. '<u>Przykłady:</u><br />'."\n"
|
. 'synonimy abecadło<br />'."\n"
|
. 'synonimy wyspa');
|
}
|
|
$args = funcs::utfToAscii($args);
|
|
$fp = fopen('./data/synonimy/thesaurus.res', 'r');
|
list($rows, $len) = explode('x', trim(fgets($fp, 50)));
|
$start = ftell($fp);
|
|
$l = 0;
|
$p = $rows-1;
|
|
while($l<$p) {
|
//echo 'L: '.$l.' - P: '.$p."\n";
|
$s = floor(($l+$p)/2);
|
|
$poz = $start + ($s*$len);
|
fseek($fp, $poz);
|
|
$line = fread($fp, $len);
|
|
$word = strtok($line, ';');
|
$cmp = strcmp($word, $args);
|
|
if($cmp >= 0) {
|
//echo 'Right'."\n";
|
$p = $s;
|
}
|
else
|
{
|
//echo 'Left'."\n";
|
$l = $s+1;
|
}
|
}
|
|
$poz = $start + ($l*$len);
|
fseek($fp, $poz);
|
|
$i = 1;
|
$return = '';
|
while(TRUE) {
|
$line = fread($fp, $len);
|
$word = strtok($line, ';');
|
|
if($word != $args) break;
|
$return .= '<br />'."\n".($i++).'. '.htmlspecialchars(rtrim(substr(strstr($line, ';'), 1)));
|
}
|
|
if(!empty($return)) {
|
return new BotMsg('Znalezione synonimy:'.$return);
|
}
|
else
|
{
|
return new BotMsg('Nie znaleziono synonimów podanego słowa');
|
}
|
}
|
}
|
?>
|