He estado mirando los ircbots que he visto por ahí y no es exactamente la filosofía que yo busco, yo no quiero tener un bot conectado en remoto, quiero que con mi cliente de IRC en marcha y con mi user, cuando yo u otro nick introduzca determinado texto en el canal se ejecute el comando de IRC que sea menester.
Los nicks que pueden hacer uso de estos comandos serían en un principio puestos "a mano".
Entonces buscando por ahí he encontrado un bot muy chorra que cuando introduces determinadas palabras dice que te da un helado o un café...
Su código es este:
Using perl Syntax Highlighting
- use Irssi;
- use vars qw($VERSION %IRSSI);
- $VERSION = "1.0";
- %IRSSI = (
- authors => 'PrincessLeia2',
- contact => 'lyz\@princessleia.com ',
- name => 'gimmie',
- description => 'a bot script, using ! followed by anything the script will say (as an action): gets nickname anything',
- license => 'GNU GPL v2 or later',
- url => 'http://www.princessleia.com/'
- );
- sub event_privmsg {
- my ($server, $data, $nick, $mask, $target) =@_;
- my ($target, $text) = $data =~ /^(\S*)\s:(.*)/;
- return if ( $text !~ /^!/i );
- if ( $text =~ /^!coffee$/i ) {
- $server->command ( "action $target hands $nick a steaming cup of coffee" );
- }
- elsif ($text =~ /^!chimay$/i ) {
- $server->command ( "action $target hands $nick a glass of Chimay" );
- }
- elsif ($text =~ /^!pepsi$/i ) {
- $server->command ( "action $target gives $nick a can of Star Wars Pepsi" );
- }
- elsif ($text =~ /^!ice cream$/i ) {
- $server->command ( "action $target gives $nick a chocolate ice cream with lots of cherries" );
- }
- elsif ($text =~ /^!$nick$/i ) {
- $server->command ( "msg $target get yourself?" );
- }
- else {
- my ($gimmie) = $text =~ /!(.*)/;
- $server->command ( "action $target Gets $nick $gimmie \0032<\%)");
- }
- }
- Irssi::signal_add('event privmsg', 'event_privmsg');
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
La verdad es que funciona, pero claro, funciona con todos los nicks y no es lo que quiero concretamente.
He revisado la documentación de irssi pero no he encontrado nada al respecto pero leyendo el código creo discernir que la subrutina event_privmsg() es la que le indica a irssi que actuará sobre el texto introducido y me imagino que el propio irssi ya define lo qué es $nick y lo qué es $text.
Bueno al quid de la cuestión.
Quisiera poner por ejemplo !op nick2 y que el script hiciese un:
if ($text =~ /^!op$/i )&&($nick == $admin ) { $server->command ( "op $target $2");
Siendo $2 por ejemplo el nick2.
(Ya sé que mi sintaxis no será muy adecuada pero vengo de mIRC scripting y aún no estoy muy iniciado en este lenguaje)
Pues eso, dejo este hilo abierto a ver quien me puede dar un poco de luz sobre el tema.
Muchas gracias.