Начал я писать IRC бота на PERL.... use PERLDOC and GOOGLE. вот что получилось: Code: #!/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 читай - НЕ ПРИНИМАЮТСЯ! З.Ы.Ы.Ы Зарание спасибо!
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'); }
по 2) пункту: Надо не приват мессаги, а общий чат. Как сделать проверку по нику из общего чата. Суть такая: Есть список ников которым доступны команды управлением ботом (например команда !restart) Эти люди написали в чате !restart и бот ->exit(1) Если левый человек напишет(которого нет в adminliste), то ничего не произойдет.
Ошибки хз, а какая разница в общем чате или нет? Проверяй просто ник того кто отправляет и выполняй в зависимости от этого действие
В чем проблема в функции on_public дописать строчку my $from = $event->{nick}; И в зависимости от содержимого по-разному обрабатывать?