Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie odpowiedzi
Forum PHP.pl > Forum > Przedszkole
Mateoo88
Witam,
to jest fragment kodu bota w php:
  1. case "cześć": $M->addText('Cześć :)'); break;

A chciałbym by na słowo "cześć" owy bot losował z kilku odpowiedzi a nie tylko z jednej "Cześć smile.gif".

Proszę o pomoc.
Będę wdzięczny
czychacz
http://php.net/manual/en/function.rand.php
http://php.net/manual/en/language.types.array.php
a jak nie chcesz trzymać odpowiedzi w tablicach, to skorzystaj z bazy
http://php.net/manual/en/book.pdo.php
d.stp
array_rand()
bpskiba
A ja poskładam

  1. case "cześć":
  2. $f=array("sie ma","witaj","you","hej");
  3. $M->addText($f[array_rand($f)]);
  4. break;
Beniooo
Mateo88, w BotAPI masz tą funkcję opisaną, nawet gdy pobrales biblioteke był przykład jej użycia
Mateoo88
Nie dokładnie taki przykład bo tam losuje jedna z 7 odpowiedzi, obojętnie co napiszesz.
Jedną wade ma ten bot. Nie odpowie Ci jak mu na przykład napiszesz (jeżeli chodzi o górny przykład) "cześć jak się masz". Nie wyłapuje fragmentów zdań. Jest na to jakaś rada?
Z góry dzięki za pomoc
markonix
preg_match
Giluś
Coś takiego ?smile.gif

  1. <?
  2. require_once('MessageBuilder.php');
  3. $M=new MessageBuilder();
  4.  
  5.  
  6. switch ($HTTP_RAW_POST_DATA) {
  7. case "cześć":
  8.  
  9. switch (rand(1, 7)) {
  10. case 1: $M->addText('Tekst pomarańczowy', FORMAT_NONE, 255, 165, 0); break;
  11. case 2: $M->addText('Tekst pogrubiony, pochylony i podkreślony', FORMAT_BOLD_TEXT | FORMAT_ITALIC_TEXT | FORMAT_UNDERLINE_TEXT); break;
  12. case 3: $M->addText('Tekst podkreślony w kolorze czerwonym', FORMAT_UNDERLINE_TEXT, 255, 0, 0)); break;
  13. case 4: $M->addText("Pierwsza linia\nDruga linia"); break;
  14. case 5: $M->addText('Tekst wysłany do innych')->setRecipients(array(123,456)); break;
  15. case 6: $M->addBBcode('Tekst wysłany do Ciebie i innych')->setRecipients(array(123,456,$_GET['from'])); break;
  16. case 7: $M->addRawHtml('Tekst <b>pogrubiony</b> oraz <i>pochylony</i> oraz <u>podkreślony</u>'); break;
  17. }
  18.  
  19.  
  20. break;
  21.  
  22. default: $M->addBBcode('Nie rozumiem...[br]Napisz to innymi słowami.');
  23. }
  24.  
  25.  
  26. $M->reply();
  27.  
  28. ?>
Mateoo88
Bardziej chodzi mi o to, gdy ktoś napisze np." Cześć Jak się masz?" a bot ma w kodzie sprecyzowaną tylko komende "cześć" to i tak odpisze. Bo przy obecnym kodzie nawet gdy ktoś napisze "cześć!" z wykrzyknikiem to bot nie odpisze.
Giluś
Tu masz przykład:

  1.  
  2. $wzorzec = '/(Zgłoszenie)/'; $wzorzec1 = '/(zgłoszenie)/'; $wzorzec2 = '/(ZGŁOSZENIE)/';
  3. if(preg_match_all($wzorzec, $HTTP_RAW_POST_DATA, $wyniki)){$M->addRawHtml('<br /> <b>Dziękujemy za zgłoszenie.</b> <br />'); }
  4.  


Możesz tego użyć, lub ewentualnie szukać czegoś co nie patrzy na wielkość liter smile.gif
GoOx
Popatrz na funkcję strstr
markonix
Cytat(Mateoo88 @ 6.08.2012, 18:07:25 ) *
Bardziej chodzi mi o to, gdy ktoś napisze np." Cześć Jak się masz?" a bot ma w kodzie sprecyzowaną tylko komende "cześć" to i tak odpisze. Bo przy obecnym kodzie nawet gdy ktoś napisze "cześć!" z wykrzyknikiem to bot nie odpisze.

No to napisałem. Wyrażenia regularne tutaj w zupełności na początku wystarczą.
Najpierw switchem sprawdzasz czy nie wpisał określonej, konkretnej komendy, potem w default zaczynasz zabawę z ifami.
Potem jeżeli żaden if się nie spełni dopiero info o tym, że nie rozumiesz co napisał.

W każdym z tych etapów możesz losować odpowiedzi żeby urozmaicić wypowiedzi.

Osobiście tak właśnie napisałem bota i się sprawdza.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.