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