Not logged in. · Lost password · Register
Forum: PHP4You :: Scripts Support und Fragen RSS
Bot Funktionen hinzufügen
blaupause #1
Member since May 2009 · 1 post
Group memberships: Mitglieder
Show profile · Link to this post
Subject: Bot Funktionen hinzufügen
Aloha und erstmal danke fpr den gelungenen Bot.

Wenn ich eine Funktion hinzufügen will die bei $command getriggert wird mache ich das mittels:
bot->add_privmsg_hook($c . "kommando", "php4youBot_tujenes");
Und dann die jewielige Funktion. Das funktioniert auch.

Nun aber meine Frage. Wie richte ich es ein, dass er nicht nur auf ein fest vorgegebenes Wort anspringt, sondern auch auf reguläre Ausdrücke z.B.

Als Beispiel, möchte ich wenn ein Link gepostet wird eine Funktion starten.

$bot->add_privmsg_hook(preg_match("#(http://[^ ]+)#is",$params), "php4youBot_test");

geht schonmal nicht. Ich weiß auch nicht auf welche Variable er eigentlich anspringt.

Hoffe ihr könnt mir da etwas helfen.

Danke schonmal :)
Avatar
Janek (Administrator) #2
User title: Admin
Member since Aug 2006 · 125 posts · Location: Potsdam
Group memberships: Administratoren, Cehmes-Entwickler, Mitglieder
Show profile · Link to this post
Hallo blaupause,

bitte entschuldige die Verspätung. Da ich im Abitur Prüfungsstress bin dauert es derzeit eine Weile bis ich antworten kann.

Nun zu deinem Problem. Die Methode "add_privmsg_hook" gibt die Eingaben an die Methode "do_hooks" weiter welche wiederum die angegebene Funktion ausführt. Als zweiter Parameter wird der erste Parameter von "add_privmsg_hook" übergeben. Das heißt wenn man folgendes angibt:

$bot->add_privmsg_hook("hallo", "php4youBot_test");

wird an die Funktion "php4youBot_test" folgendes übergeben:

function php4youBot_test($irc, $params, $prefix, $channel);

$params ist das, was als erster Parameter an add_privmsg_hook übergeben wurde also $params="hallo";

Was in deinem Fall funktionieret, allerdings unter Umständen relativ viel Last verursacht (da dein Hook auch dann aufgerufen wird, wenn es unter Umständen nicht erforderlich wär) ist, als ersten add_privmsg_hook Parameter einen leeren String anzugeben also "". Dann wird der Hook bei jeder PRIVMSG ausgeführt. Die Abfrage bei welchen Nachrichten der Hook dann etwas tut kann man dann in die Hook-Funktion verlegen. Das sieht in deinem Fall dann beispielsweise so aus:

$bot->add_privmsg_hook("", "php4youBot_http");

function php4youBot_http($irc, $params, $prefix, $channel) {
    if(preg_match("#(http://[^ ]+)#is",$params)) {
        $nick = IRC::get_nick($prefix);
        $irc->privmsg($channel, ":$nick hat eine URL geschrieben! Die URL war folgende: $params");
    }
}

Der Code führt bei jeder PRIVMSG die Funktion "php4youBot_http" aus. In dieser wird geschaut was für eine PRIVMSG gesendet wurde und ob diese deinen Ausdruck erfüllt. Wenn ja, wird ein netter Hinweis im Channel gepostet.

Aber wie gesagt: Bei jeder PRIVMSG wird die Funktion ausgeführt. Wie viel das geschwindigkeitsmäßig ausmacht kann ich dir nicht sagen.

Hoffe mal ich konnte dir noch rechtzeitig helfen ;)

Gruß
foxx
>> PHP4You
>> Against ICQ
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please note the verification code from the picture into the text field next to it.
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
This board is powered by the Unclassified NewsBoard software, 20090606-dev, © 2003-8 by Yves Goergen
Current time: 2012-02-05, 19:53:15 (UTC +01:00)