PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IRCBot + MySQL


staLin
17.02.2007, 17:56
Hallo miteinander!

Ich versuche mich an 'nem IRCBot in PERL mit einer MySQL-Anbindung.

Der Bot sollte folgende Aufgaben erfüllen:

Verbindung zur DB herstellen
Wert in "reg" suchen:

Wenn reg=0
/nick $nickname
/msg nickserv register $passwd $email

Sonst: nichts


Jede Minute soll der Befehl ausführen (Wert 0 suchen)

Datenbank: irc_test

CREATE TABLE `mitglieder` (
`id` int(11) NOT NULL auto_increment,
`nick` varchar(30),
`passwd` varchar(20),
`email` varchar(35),
`reg` varchar(1) default NULL,
PRIMARY KEY (`id`)
) TYPE=ISAM PACK_KEYS=1;



IRCBot:
#!/usr/bin/perl -w

use Net::IRC;
use strict;
use Data::Dumper;

my $irc = new Net::IRC;

my $conn = $irc->newconn(
Server => shift || '127.0.0.2',
Port => shift || '6668',
Nick => 'TestBot',
Ircname => 'IRC Services Management',
Username => 'management'
);

$conn->{opernickpw} = shift || 'S3rvBot';
$conn->{channel} = shift || '#irc_management';

sub on_connect {

my $conn = shift;

$conn->oper($conn->{opernickpw}, 'test');
$conn->join($conn->{channel});
$conn->privmsg($conn->{channel}, 'test');
}

sub on_notice {

my ($conn, $event) = @_;

if (
($event->{nick} eq 'NickServ') and
($event->{args}[0] eq 'This nickname is owned by someone else. You must select a different one.')
) {
# send an /msg to NickServ with the password
$conn->privmsg('NickServ', 'identify test');

on_connect($conn);
}
}

# add handlers for our standard events
$conn->add_handler('notice', \&on_notice);
$conn->add_handler('376', \&on_connect);


# start IRC
$irc->start;


Ich wäre Euch sehr dankbar für Eure Hilfe!


Gruss
staLin


butterkeks
18.02.2007, 11:15
kenne Net::IRC jetzt nicht, aber schedule() ist warsch. das, was du suchst:

my $conn = $irc->newconn(...);
# ...
sub blah {
print "bleh parameter: " . $_[0];

# ich kann der Doku jetzt nicht entnehmen, ob er den Timer
# selber wieder setzt, oder nicht... wenn nicht, aktiviere folgende Zeile:
#conn->schedule(60, \&blah, $_[0]);
}
#...
$conn->schedule(60, \&blah, "parameter");

in &blah muss natürlich dein normaler Datenbank-code stehen... dazu kannst du z.B. das mysql Interface Net::MySQL oder das Datenbanktreiberunabhängige DBI verwenden (letzteres wäre besser, wenn du später mal die DB wechseln willst).

staLin
19.02.2007, 00:09
Vielen Dank butterkeks!

Ich werde es gleich mal versuchen. Schönen Abend noch :)


Gruss
staLin