Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Перл для IRC сетей


Автор: OutlawZ 19.10.2007, 07:41
Приветствую вас программисты, вот прочитал книгу "Освой перл за 24 часа", конечно мыло что еще понимаю, сижу с английской документацией пытаюсь понять что к чему. Но дело не в этом, вот написал irc бота на перле все проверил все работает, потом снова решил второй написать все делал точно так же, но бот не хотел запускаться, проверял его полностью все время орал что есть ошибка! Вот код бота может кто скажет в чем дело?
Код

#!/usr/bin/perl

$host="tcn.msk.solarnet.ru";
$port="6667";
$nick="Parasite";
$ident="Parasite6";
$chan="#555";

use Socket;
 socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'))
     or die "Couldn`t create socket : $!\n";
 $iaddr=inet_aton($host);
 $paddr=sockaddr_in($port,$iaddr);
 print "\n>> Connecting to $host:$port...\n";
 connect(SOCK, $paddr)
     or die "Couldn`t connect to $host:$port : $!\n";
 for($i=0; $i<4; $i++){
  $data=<SOCK>;
  print($data);
 }
print ">> Sending NICK and IDENT...\n";
 send (SOCK, "NICK $nick\n", 0);
 send (SOCK, "USER $ident localhost localhost :$nick\n", 0);
 for($i=0; $i<10; $i++){
  $data=<SOCK>;
  print($data);
 }
print ">> Join chanel $chan...\n";
 send (SOCK, "JOIN $chan\n", 0);
while($data=<SOCK>){
  print($data);
 }
@part=split(/:/,$data);
  if(@part[0] eq "PING "){
    print ">> PONG :@part[1]\n";
    send (SOCK, "PONG :@part[1]\n", 0);
}

Основная часть бота, обработчик событий писать пока не стал! можно еще вопросик..можно где нить найти русскую документацию по перлу а то я нет весь обсматрел и нечего не нашел! Зарание спасибо!

Автор: arto 19.10.2007, 07:50
perldoc strict;

Автор: under_sun 19.10.2007, 17:08
http://www.perl.org.ru
http://perldoc.narod.ru

Автор: korob2001 19.10.2007, 17:43
Здесь можешь скачать Е-книги, не только по Perl.
http://www.all-ebooks.com

Автор: OutlawZ 19.10.2007, 22:15
Спасибо большое!

Автор: nitr 19.10.2007, 22:36
Есть огромное количество ботов на CPAN, и даже рабочих ;)

Автор: dya 20.10.2007, 19:34
Код

#!c:/perl/bin/perl -w

use strict;
use IO::Socket;

my $server = 'localhost'; #хост
my $nick = 'botname'; #имя бота
my $port = '6667'; #порт
my $chl = '#main'; #канал

print "INFO: $nick bot is starting\n";

my $input;

while (1) {
    print "INFO: Open socket to $server:$port\n";
    my $sock = new IO::Socket::INET(PeerAddr => $server, PeerPort => $port, Proto => 'tcp') or print "WARNING: Can\'t open socket to $server:$port\n";
    unless ( $sock ) {
        print "INFO: Reconnect in 10sec.\n" and sleep(10);
    } else {
        print $sock "NICK $nick\r\n";
        print $sock "USER $nick * * :perl bot\r\n"; #индификация бота

        while ( $input = <$sock> ) {
            if ( $input =~ /^PING(.*)\r\n$/isg ) {
                print $sock "PONG $1\r\n";
            }
            elsif ( $input =~ /004/ ) {
                last;
            }
            elsif ( $input =~ /433/ ) {
            print "INFO: Nickname is already in use.\n";
            last;
            }
        }

        print $sock "JOIN $chl\r\n";

        while ( $input = <$sock> ) {
            if ( $input =~ /^PING(.*)\r\n$/isg ) {
                print $sock "PONG $1\r\n";
            }
            print win2dos( $input );
        }
    }
}

sub win2dos {
    my $i = shift;
    chop $i;
    $i =~ tr/\300-\377\250\270/\200-\257\340-\361/;
    return $i."\n"; 
}

http://www.networksorcery.com/enp/rfc/rfc2812.txt
Бот под win32

Автор: nitr 20.10.2007, 20:51
Практически все боты на CPAN'е реализовывают протокол IRC, так что советую не создавать "велосипедов", для изучение не то выбрано (имхо).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)