From 57117dd2614bd14808e391a7f1ae20ade00b8d5b Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Sat, 25 Aug 2012 18:28:59 +0000 Subject: [PATCH] 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ę. --- modules/10_data/init.php | 58 +++++++++ /dev/null | 145 ------------------------ modules/10_data/handler.php | 105 +++++++++++++++++ class/BotSession.php | 10 + MODULES.html | 8 + 5 files changed, 179 insertions(+), 147 deletions(-) diff --git a/MODULES.html b/MODULES.html index 7b1ab7b..6397387 100755 --- a/MODULES.html +++ b/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>-></b>session<b>-></b>setClass</var><b>(<cite>'przyklad'</cite>);</b> + +<i>// Ustawienie pojedynczej wartości</i> <var>$msg<b>-></b>session<b>-></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>-></b>session<b>-></b>zmienna</var> <b>=== <cite>'To jest test'</cite>);</b> diff --git a/class/BotSession.php b/class/BotSession.php index cec7f45..e8b8930 100644 --- a/class/BotSession.php +++ 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(); diff --git a/modules/10_data.php b/modules/10_data.php deleted file mode 100644 index 5a93bad..0000000 --- a/modules/10_data.php +++ /dev/null @@ -1,145 +0,0 @@ -<?php -class data implements module { - 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', - ); - - static function register_cmd() { - return array( - 'data' => 'cmd_data', - 'dzien' => 'cmd_data', - 'd' => 'cmd_data', - 'imieniny' => 'cmd_imieniny', - 'im' => 'cmd_imieniny', - 'i' => 'cmd_imieniny', - ); - } - - static function help($cmd = NULL) { - switch($cmd) { - case 'data': - case 'd': - GGapi::putRichText('data', TRUE); - GGapi::putRichText(' [dzień]', FALSE, TRUE); - GGapi::putRichText(' (alias: '); - GGapi::putRichText('d', TRUE); - GGapi::putRichText(')'."\n".' Zwraca informacje (wschód/zachód słońca, imieniny) o dniu dzisiejszym lub podanym dniu '); - GGapi::putRichText('[dzieĹ]', FALSE, TRUE); - GGapi::putRichText("\n\n".'Przykłady:', FALSE, FALSE, TRUE); - GGapi::putRichText("\n".' data'."\n".' data pojutrze'."\n".' data 1.01.2009'); - break; - case 'imieniny': - case 'im': - case 'i': - GGapi::putRichText('imieniny', TRUE); - GGapi::putRichText(' imie', FALSE, TRUE); - GGapi::putRichText(' (alias: '); - GGapi::putRichText('i', TRUE); - GGapi::putRichText(')'."\n".' Podaje dni, w których imieniny obchodzi osoba o imieniu '); - GGapi::putRichText('imie', FALSE, TRUE); - GGapi::putRichText("\n\n".'Przykłady:', FALSE, FALSE, TRUE); - GGapi::putRichText("\n".' imieniny Adama'."\n".' imieniny Ewy'); - break; - default: - GGapi::putRichText('data', TRUE); - GGapi::putRichText(' [dzien]', FALSE, TRUE); - GGapi::putRichText("\n".' Informacje o danym dniu'."\n"); - - GGapi::putRichText('imieniny ', TRUE); - GGapi::putRichText(' imie', FALSE, TRUE); - GGapi::putRichText("\n".' Kiedy '); - GGapi::putRichText('imie', FALSE, TRUE); - GGapi::putRichText(' obchodzi imieniny'."\n\n"); - break; - } - } - - static function cmd_data($name, $arg) { - if(empty($arg)) { - $data = time(); - } - else - { - $data = calendar::parse_date($arg); - if(!$data) { - GGapi::putText('Podana data nie została rozpoznana'."\n\n"); - GGapi::putRichText('Przykłady:', FALSE, FALSE, TRUE); - GGapi::putRichText("\n".' data'."\n".' data pojutrze'."\n".' data 1.01.2009'); - - return; - } - } - - 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.'; - - $geo = database::get($_GET['from'], 'pogoda', 'geo'); - if(!$geo) { - $geo = array('lon' => '52.25', 'lat' => '21.0'); - } - - $txt .= "\n\n".'Imieniny: '.$imieniny[date('n', $data)][date('j', $data)]."\n".'Wschód Słońca: '.date_sunrise($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I'))."\n".'Zachód Słońca: '.date_sunset($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I')); - - GGapi::putText($txt); - } - - static function cmd_imieniny($name, $arg) { - $arg = funcs::utfToAscii($arg); - - if(empty($arg)) { - GGapi::putText('Nie podano imienia!'."\n\n"); - GGapi::putRichText('Przykłady:', FALSE, FALSE, TRUE); - GGapi::putRichText("\n".' imieniny Adama'."\n".' imieniny Ewy'); - - return; - } - - include('./data/data/imieniny.php'); - - if(!isset($imiona[$arg])) { - GGapi::putText('Nie znaleziono imienia w bazie. Pamiętaj, by podać imię w dopełniaczu liczby pojedynczej!'."\n\n"); - GGapi::putRichText('Przykłady:', FALSE, FALSE, TRUE); - GGapi::putRichText("\n".' imieniny Adama'."\n".' imieniny Ewy'); - - return; - } - - foreach($imiona[$arg] as $dzien) { - $dzien = explode('.', $dzien); - - $txt[] = $dzien[0].' '.self::$miesiace[$dzien[1]]; - } - - GGapi::putText('Imieniny '.ucfirst($arg).' są '.implode(', ', $txt)); - } -} -?> \ No newline at end of file diff --git a/modules/10_data/handler.php b/modules/10_data/handler.php new file mode 100644 index 0000000..175eebe --- /dev/null +++ b/modules/10_data/handler.php @@ -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)); + } +} +?> \ No newline at end of file diff --git a/modules/10_data/init.php b/modules/10_data/init.php new file mode 100644 index 0000000..d86377b --- /dev/null +++ b/modules/10_data/init.php @@ -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'; +?> \ No newline at end of file -- Gitblit v1.9.1