Simple Perl Bot/ru
From SHellium Wiki
Как создать простого бота на 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";
}
}