Simple Perl Bot/ru

From SHellium Wiki
Jump to: navigation, search
Geographylogo.png In other languages: English | Afrikaans | Albanian | Arabic | Brazilian | Bulgarian | Catalan | Chinese | Croatian | Czech | Danish | Dutch | Esperanto | Estonian | Filipino | Finnish | Flemish | French | German | Greek | Hebrew | Hindi | Hungarian | Indonesian | Italian | Japanese | Latvian | Lithuanian | Macedonian | Malay | Malayalam | Norwegian (Bokmål) | Norwegian (Nynorsk) | Persian | Polish | Portuguese | Romanian | Russian | Serbian | Slovak | Slovenian | Spanish | Swedish | Turkish | Ukrainian | Urdu

Как создать простого бота на Perl

Это очень простой бот, написанный на языке Perl; может Заходить на каналы и Отправлять сообщения.

#!/usr/local/bin/perl -w
# irc.pl
# Простой IRC робот.
# Usage: perl irc.pl

use strict;

Мы будем использовать tcp-сокет, чтобы соединиться с IRC-сервером.

use IO::Socket;

Сервер, для подключения и другие необходимые нам детали.

my $server = "irc.freenode.net";
my $nick = "simpleB0t";
my $login = "simpleb0t";

Канал, на который бот будет заходить.

my $channel = "#RabbitHole";

Соединяемся с IRC-сервером.

my $sock = new IO::Socket::INET(PeerAddr => $server,
                                PeerPort => 6667,
                                Proto => 'tcp') or
                                    die "Can't connect\n";

Авторизуемся на сервере.

print $sock "NICK $nick\r\n";
print $sock "USER $login 8 * :Cool Master you made it!\r\n";

Чтение строк от сервера за всё время соединения.

while (my $input = <$sock>) {

Проверяем ответы от сервера, которые состоят из целых чисел.

    if ($input =~ /004/) {
        # We are now logged in.
        last;
    }
    elsif ($input =~ /433/) {
        die "Nickname is already in use.";
    }
}

Заходим на канал.

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

Читаем в цикле строки от сервера. (вы можете записывать их в файл для лога)

while (my $input = <$sock>) {
    chop $input;
    if ($input =~ /^PING(.*)$/i) {
        # Мы должны отвечать на запросы "PING", чтобы предотвратить отключение от сервера.
        print $sock "PONG $1\r\n";       
    }
    else {
        # Выводим строку, полученную ботом от сервера.
        print "$input\n";
    }
}

Отправляем сообщение на канал (#ChanelName).

print $sock "PRIVMSG #ChanelName :Greetings people \r\n";

Отправляем сообщение кому-то (Nick).

print $sock "PRIVMSG Nick :Yo man \r\n";


Весь код:

#!/usr/local/bin/perl -w
# irc.pl
# A simple IRC robot.
# Usage: perl irc.pl

use strict;
use IO::Socket;

# Сервер, для подключения и другие необходимые нам детали.
my $server = "irc.freenode.net";
my $nick = "st3v0_b0t";
my $login = "st3v0_b0t";
my $channel = "#bshellz";
my $sock = new IO::Socket::INET(PeerAddr => $server,PeerPort => 6667,Proto => 'tcp') or die "Can't connect\n";


print $sock "NICK $nick\r\n";
print $sock "USER $login 8 * :Cool st3v0 you made it!\r\n";


while (my $input = <$sock>) {   
    if ($input =~ /004/) {       
        last;
    }
    elsif ($input =~ /433/) {
        die "Nickname is already in use.";
    }
}

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

my $ping_counter = 0;

while (my $input = <$sock>) {
    chop $input;
    if ($input =~ /^PING(.*)$/i) {
        print $sock "PONG $1\r\n";
        $ping_counter = $ping_counter + 1        
        if($ping_counter == 100) {    
            print $sock "PRIVMSG BeschBot :!keep st3v0\r\n";
            $ping_counter = 0;
        }
    }
    else {
        print "$input\n";
    }
}
Personal tools
Namespaces

Variants
Actions
Navigation
Indexes
SHellium Sites
Toolbox