PDA

Просмотр полной версии : ПОМОГИТЕ -= Perl-net::irc =-


KENNY_McCORMICK
18.09.2008, 13:55
Начал я писать IRC бота на PERL....
use PERLDOC and GOOGLE.

вот что получилось:
#!/usr/bin/perl -w
use Net::IRC;

$kanal = '#r2';
$admin = 'qbbr1';
$password = 'qwe123';


$irc = new Net::IRC;

$conn = $irc->newconn(Nick=>'qbbr_bot',Server=>'irc.antichat.net',Port=>7771);

$conn->add_global_handler('376', \&on_connect);
$conn->add_global_handler('disconnect', \&on_disconnect);
$conn->add_global_handler('kick', \&on_kick);
$conn->add_handler('msg', \&on_msg);
$conn->add_handler('public', \&on_public);

$irc->start;

sub on_connect {
$self = shift;
$self->privmsg('nickserv', "identify $password");
$self->join($kanal);
$self->privmsg($kanal, "HIHO ALL xD");
}

sub on_disconnect {
$self = shift;
$self->connect();
}

sub on_kick {
$self = shift;
$self->join($kanal);
$self->privmsg($kanal, "SLIW...nah kick?");
}

sub on_msg {
$self = shift;
$self->privmsg($admin, "private msg");
}

sub on_public {
$self = shift;
$self->privmsg($kanal, "Im bot");
}

ВЗЫВАЮ ВАС НА ПОМОЩ
Помогите разобраться)
а теперь вопросы:
1) как сделать чтоб он, не на все -msg public- отвечал "Im bot", а чтоб на определенные команды.
2) (1) + команды принимались только от человека $admin
3) чтобы бот отвечал человеку, который написал в приват.
4) и как использовать CTCP requests
5) в чём разница между [$conn->add_global_handler] и
[$conn->add_handler]

Конечно таких ботов куча... но я не осилил исходники(( уж сильно большие и непонятные для меня письмена.

З.Ы Я нович0к в Пёрле, сильно не грузить xD
З.Ы.Ы Ответы GOOGLE вам помощ и PERLDOC читай - НЕ ПРИНИМАЮТСЯ!
З.Ы.Ы.Ы Зарание спасибо!

Kaimi
18.09.2008, 14:53
1) как сделать чтоб он, не на все -msg public- отвечал "Im bot", а чтоб на определенные команды.
2) (1) + команды принимались только от человека $admin
3) чтобы бот отвечал человеку, который написал в приват.
4) и как использовать CTCP requests
5) в чём разница между [$conn->add_global_handler] и
[$conn->add_handler]


1.
sub on_public {
my ($self, $event) = @_;
my $text = $event->{args}[0];
if($text eq 'test') {$self->privmsg($kanal, "Im bot");}
}
2.
sub on_msg {
my ($self, $event) = @_;
my $from = $event->{nick};
if($from eq $admin){ $self->privmsg($admin, "private msg");}
}
3.
sub on_msg {
my ($self, $event) = @_;
my $from = $event->{nick};
$self->privmsg($from, "private msg");
}
5.
# This sub will assign a user's custom function to a particular event which
# might be received by any Connection object.
# Takes 3 args: the event to modify, as either a string or numeric code
# If passed an arrayref, the array is assumed to contain
# all event names which you want to set this handler for.
# a reference to the code to be executed for the event
# (optional) A value indicating whether the user's code should replace
# the built-in handler, or be called with it. Possible values:
# 0 - Replace the built-in handlers entirely. (the default)
# 1 - Call this handler right before the default handler.
# 2 - Call this handler right after the default handler.
# These can also be referred to by the #define-like strings in %define.
sub add_global_handler {
my ($self, $event, $ref, $rp) = @_;
return $self->_add_generic_handler($event, $ref, $rp, \%_udef, 'add_global_handler');
}

# This sub will assign a user's custom function to a particular event which
# this connection might receive. Same args as above.
sub add_handler {
my ($self, $event, $ref, $rp) = @_;
return $self->_add_generic_handler($event, $ref, $rp, $self->{_handler}, 'add_handler');
}

KENNY_McCORMICK
18.09.2008, 15:05
по 2) пункту:
Надо не приват мессаги, а общий чат.
Как сделать проверку по нику из общего чата.
Суть такая:
Есть список ников которым доступны команды управлением ботом (например команда !restart)
Эти люди написали в чате !restart и бот ->exit(1)
Если левый человек напишет(которого нет в adminliste), то ничего не произойдет.

KENNY_McCORMICK
18.09.2008, 15:16
и еще есть трабл...
see it:
http://img230.imageshack.us/img230/7837/perlerrorhu0.th.jpg (http://img230.imageshack.us/my.php?image=perlerrorhu0.jpg)
скрипт работает, но ошибки летят...
с чем это связано?

Kaimi
18.09.2008, 15:26
Ошибки хз, а какая разница в общем чате или нет? Проверяй просто ник того кто отправляет и выполняй в зависимости от этого действие

KENNY_McCORMICK
18.09.2008, 15:51
разница есть....
мне надо чтоб в общий чат работало)
вот только хз как реализовать...

Kaimi
18.09.2008, 16:30
В чем проблема в функции on_public дописать строчку
my $from = $event->{nick};

И в зависимости от содержимого по-разному обрабатывать?

KENNY_McCORMICK
18.09.2008, 17:04
а точно) спс