Jacek Kowalski
2012-08-25 57117dd2614bd14808e391a7f1ae20ade00b8d5b
1. Przeportowanie modułu data do nowej wersji API.
2. Dodanie metody setClass() do klasy BotSession.
3. Aktualizacja "Instrukcji tworzenia modułów" o w/w metodę.
2 files modified
2 files added
1 files deleted
326 ■■■■ changed files
MODULES.html 8 ●●●● patch | view | raw | blame | history
class/BotSession.php 10 ●●●●● patch | view | raw | blame | history
modules/10_data.php 145 ●●●●● patch | view | raw | blame | history
modules/10_data/handler.php 105 ●●●●● patch | view | raw | blame | history
modules/10_data/init.php 58 ●●●●● patch | view | raw | blame | history
MODULES.html
@@ -264,10 +264,16 @@
<p>Odpowiednik klasy database z poprzedniej wersji bota. Aktualnie instancja klasy BotSession, umożliająca przechowywanie danych przypisanych do użytkownika, m.in. miasta, nazwy kina i tym podobnych.</p>
<p class="warning">Przed użyciem sesji należy ustawić nazwę klasy, dla której zmienne będą przetwarzane. Jest to odpowiednik drugiego argumentu przekazywanego do metody database::get() z pierwszych wersji bota.</p>
<p>Przykład użycia:</p>
<pre>
<code><i>// Ustawienie pojedynczej wartości</i>
<code>
<i>// Ustawienie nazwy modułu. WYMAGANE!</i>
<var>$msg<b>-&gt;</b>session<b>-&gt;</b>setClass</var><b>(<cite>'przyklad'</cite>);</b>
<i>// Ustawienie pojedynczej wartości</i>
<var>$msg<b>-&gt;</b>session<b>-&gt;</b>zmienna</var> <b>= <cite>'To jest test'</cite>;</b>
<a href="http://php.net/assert"><b>assert</b></a><b>(</b><var>$msg<b>-&gt;</b>session<b>-&gt;</b>zmienna</var> <b>=== <cite>'To jest test'</cite>);</b>
class/BotSession.php
@@ -7,7 +7,7 @@
    
    /**
     * Nazwa modułu, którego zmienne klasa przetwarza
     * @var string max. 40 znaków
     * @var string max. 40 znaków
     */
    var $class;
    
@@ -25,6 +25,10 @@
    }
    
    private function init() {
        if(strlen($this->class) == 0) {
            throw new Exception('Przed użyciem $msg->session należy ustawić nazwę modułu za pomocą metody setClass - patrz "Poradnik tworzenia modułów", dział "Klasa BotMessage", rozdział "Pole $session".');
        }
        if($this->PDO) {
            return NULL;
        }
@@ -145,6 +149,10 @@
        return $return;
    }
    
    function setClass($class) {
        $this->class = $class;
    }
    function truncate() {
        $this->init();
        
modules/10_data.php
File was deleted
modules/10_data/handler.php
New file
@@ -0,0 +1,105 @@
<?php
class bot_data_module implements BotModule {
    static $dni = array(
        'niedziela',
        'poniedzia³ek',
        'wtorek',
        '¶roda',
        'czwartek',
        'pi±tek',
        'sobota',
    );
    static $miesiace = array(
        1 => 'stycznia',
        'lutego',
        'marca',
        'kwietnia',
        'maja',
        'czerwca',
        'lipca',
        'sierpnia',
        'wrze¶nia',
        'pa¼dziernika',
        'listopada',
        'grudnia',
    );
    function data($msg, $params) {
        $arg = funcs::utfToAscii($msg->args);
        if(empty($arg)) {
            $data = time();
        }
        else
        {
            $data = calendar::parse_date($arg);
            if(!$data) {
                return new BotMsg('Podana data nie zosta³a rozpoznana<br />'."\n"
                    . '<br />'."\n"
                    . '<u>Przyk³ady:</u><br />'."\n"
                    . 'data<br />'."\n"
                    . 'data pojutrze<br />'."\n"
                    . 'data 1.01.2009');
            }
        }
        if(date('d.m.Y') == date('d.m.Y', $data)) {
            $txt = 'Dzi¶ jest ';
        }
        else
        {
            $txt = 'Wybrany dzieñ to ';
        }
        include('./data/data/data.php');
        $txt .= self::$dni[date('w', $data)].', '.date('j', $data).' '.self::$miesiace[date('n', $data)].' '.date('Y').' r., '.(date('z', $data)+1).' dzieñ roku.<br />'."\n"
            . '<br />'."\n";
        $msg->session->setClass('pogoda');
        if(!isset($msg->session->geo)) {
            $geo = array('lon' => '52.25', 'lat' => '21.0');
        }
        else
        {
            $geo = $msg->session->geo;
        }
        $txt .= 'Imieniny: '.$imieniny[date('n', $data)][date('j', $data)].'<br />'."\n"
            . 'Wschód S³oñca: '.date_sunrise($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I')).'<br />'."\n"
            . 'Zachód S³oñca: '.date_sunset($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I'));
        return new BotMsg($txt);
    }
    function imieniny($msg, $params) {
        $arg = funcs::utfToAscii($arg);
        if(empty($arg)) {
            return new BotMsg('Nie podano imienia!<br />'."\n"
                . '<br />'."\n"
                . '<u>Przyk³ady:</u><br />'."\n"
                . 'imieniny Adama<br />'."\n"
                . 'imieniny Ewy');
        }
        include('./data/data/imieniny.php');
        if(!isset($imiona[$arg])) {
            return new BotMsg('Nie znaleziono imienia w bazie. Pamiêtaj, by podaæ imiê w dope³niaczu liczby pojedynczej!<br />'."\n"
                . '<br />'."\n"
                . '<u>Przyk³ady:</u><br />'."\n"
                . 'imieniny Adama<br />'."\n"
                . 'imieniny Ewy');
        }
        foreach($imiona[$arg] as $dzien) {
            $dzien = explode('.', $dzien);
            $txt[] = $dzien[0].' '.self::$miesiace[$dzien[1]];
        }
        return new BotMsg('Imieniny '.ucfirst($arg).' s± '.implode(', ', $txt));
    }
}
?>
modules/10_data/init.php
New file
@@ -0,0 +1,58 @@
<?php
class bot_data_init implements BotModuleInit {
    function register() {
        $handler_data = array(
            array(
                'file' => 'handler.php',
                'class' => 'bot_data_module',
                'method' => 'data',
            )
        );
        $handler_imieniny = array(
            array(
                'file' => 'handler.php',
                'class' => 'bot_data_module',
                'method' => 'imieniny',
            )
        );
        return array(
            'data' => $handler_data,
            'dzien' => $handler_data,
            'd' => $handler_data,
            'imieniny' => $handler_imieniny,
            'im' => $handler_imieniny,
            'i' => $handler_imieniny,
        );
    }
    function help($params = NULL) {
        if($params === NULL) {
            return new BotMsg('<b>data</b> <i>[dzień]</i><br />'."\n"
                . '   Informacje o danym dniu.<br />'."\n"
                . '<b>imieniny</b> <i>imię</i><br />'."\n"
                . '   Kiedy <i>imię</i> obchodzi imieniny.');
        }
        elseif(substr($params, 0, 1) == 'd') {
            return new BotMsg('<b>data</b> <i>[dzień]</i> (aliasy: <b>d, dzień</b>)<br />'."\n"
                . '   Zwraca informacje (wschód/zachód słońca, imieniny) o dniu podanym w argumencie <i>[dzień]</i> lub o dniu dzisiejszym - gdy nie uda się określić dnia lub nie podano argumentu.<br />'."\n"
                . '<br />'."\n"
                . '<u>Przykłady:</u><br />'."\n"
                . 'data<br />'."\n"
                . 'data pojutrze<br />'."\n"
                . 'data 1.01.2009');
        }
        else
        {
            return new BotMsg('<b>imieniny</b> <i>imię</i> (alias: <b>i</b>)<br />'."\n"
                . '   Podaje dni, w których <i>imię</i> obchodzi imieniny. Parametr <i>imię</i> winien być podany w dopełniaczu liczby pojedynczej.<br />'."\n"
                . '<br />'."\n"
                . '<u>Przykłady:</u><br />'."\n"
                . 'imieniny Adama<br />'."\n"
                . 'imieniny Ewy');
        }
    }
}
return 'bot_data_init';
?>