ПОМОГИТЕ -= Perl-net::irc =-

Discussion in 'PHP' started by KENNY_McCORMICK, 18 Sep 2008.

  1. KENNY_McCORMICK

    KENNY_McCORMICK Elder - Старейшина

    Joined:
    9 Nov 2007
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Начал я писать 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 читай - НЕ ПРИНИМАЮТСЯ!
    З.Ы.Ы.Ы Зарание спасибо!
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    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');
    }
     
    _________________________
    1 person likes this.
  3. KENNY_McCORMICK

    KENNY_McCORMICK Elder - Старейшина

    Joined:
    9 Nov 2007
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    по 2) пункту:
    Надо не приват мессаги, а общий чат.
    Как сделать проверку по нику из общего чата.
    Суть такая:
    Есть список ников которым доступны команды управлением ботом (например команда !restart)
    Эти люди написали в чате !restart и бот ->exit(1)
    Если левый человек напишет(которого нет в adminliste), то ничего не произойдет.
     
  4. KENNY_McCORMICK

    KENNY_McCORMICK Elder - Старейшина

    Joined:
    9 Nov 2007
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    +

    и еще есть трабл...
    see it:
    [​IMG]
    скрипт работает, но ошибки летят...
    с чем это связано?
     
  5. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Ошибки хз, а какая разница в общем чате или нет? Проверяй просто ник того кто отправляет и выполняй в зависимости от этого действие
     
    _________________________
  6. KENNY_McCORMICK

    KENNY_McCORMICK Elder - Старейшина

    Joined:
    9 Nov 2007
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    разница есть....
    мне надо чтоб в общий чат работало)
    вот только хз как реализовать...
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    В чем проблема в функции on_public дописать строчку
    my $from = $event->{nick};

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

    KENNY_McCORMICK Elder - Старейшина

    Joined:
    9 Nov 2007
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    а точно) спс