代码: 全选
tlcr: 0 庚寅年八月十六日 07:07:53 ~
● ds ib-IrcBot.perl
#!/usr/bin/env perl
# vim : ft=perl
use 5.010;
use Net::IRC;
use LWP::UserAgent;
#use utf8;
#use encoding 'utf8';
use Encode;
#use URI::Title qw/title/;
$cnick = '__bot__';
$cserver = 'irc.freenode.net';
$cport = 8001;
$cname = 'It is a bot.';
$room = $ARGV[0] // '#ubuntu-cn';
# Irc 设置
sub on_connect
{
my $self = shift;
say "正在进入 $room...";
$self->join ($room);
say "Done.";
#$self->privmsg ($room, 'Hello World');
}
@botFunc = (
['-h', 'echo "-h 帮助 -w 天气"'],
['-w', '/home/tusooa/应用/脚本/wg-天气.perl'],
#['-g', ''],
);
sub getHtmlTitle
{
my $url = shift;
my $resp = LWP::UserAgent->new(max_size => 1024)->get($url);
return (encode ('utf-8', $resp->decoded_content) ) =~ m{<title[^>]*>(.+?)</title} ? $1 : undef;
}
sub on_msg
{
my ($self, $event) = @_;
my ($nick) = $event->nick; # Message Sender
my ($arg) = ($event->args); # Message Text
my $host=$event->host;
my ($cmd, $word) = split (/\s/, $arg);
if ($cmd =~ /^$mynick[:,]?$/)
{
(undef, $cmd, $word) = split (/\s/, $arg);
}
for (0 .. $#botFunc)
{
if ($botFunc[$_][0] eq $cmd)
{
my $ret = `$botFunc[$_][1] $word 2>&1`;
for $i (split /\n+/, $ret)
{
$self->privmsg ($nick, "$i\n");
}
}
}
}
sub on_public
{
my ($self, $event) = @_;
my @to = $event->to;
my ($nick , $mynick) = ($event->nick, $self->nick);
my $host = $event->host;
my ($arg) = ($event->args);
#sleep 5;
#return if $nick == 'gebjgd';
#=item 防止干坏事的。
#say $self->who('O_O00');
#if ($self->who('O_O00') == 11)
#{
for (split /\s/, $arg)
{
if (m@^https??://[a-z0-9\.]+@i)
{
#my $cmd = "w3m -dump_extra \"$_\" | head -c1024 | grep -i title | head -n1 | sed -e \"s/.*<title>//;s@</title>.*@@\"";
#say $cmd;
#my $ret = `$cmd`;
#my $title = (grep /<title>/i, $ret)[0];
#$title =~ s@.*<title>@@i;
#$title =~ s@</title>.*@@i;
#my $title = title $_;
#my $title = `$cmd`;
my $title = getHtmlTitle ($_);
$self->privmsg ($room, "● 标题:$title\n");
}
}
#}
#=cut
my ($cmd, $word) = split (/\s/, $arg);
if ($cmd =~ /^$mynick[:,]?$/)
{
(undef, $cmd, $word) = split (/\s/, $arg);
}
for (0 .. $#botFunc)
{
if ($botFunc[$_][0] eq $cmd)
{
my $ret = `$botFunc[$_][1] $word 2>&1`;
for $i (split /\n+/, $ret)
{
$self->privmsg ($room, "$nick: $i\n");
}
#$self->privmsg ($nick, "注意了,使用机器人要私聊。\n");
}
}
say $nick;
if ($nick eq 'tusooa')
{
given ($cmd)
{
# <restart> <quit>
when ('<restart>')
{
say "Now restart myself.";
exec $0, $room;
}
when ('<quit>')
{
die "用户中断。\n";
}
}
}
given ($arg)
{
when(/有人(不|吗|么|没)/) { $self->privmsg ($room, "$nick: 有\n");}
when(/(bot|机器人)/ and /(出来|干活)/) { $self->privmsg ($room, "$nick: 来了\n");}
}
say "<$nick> $arg";
}
$irc = new Net::IRC;
$connect = $irc->newconn(
Nick => $cnick,
Server => $cserver,
Port => int ($cport),
Username => 'ib-perl@pl',
Ircname => $cname
);
$connect->add_global_handler(376, \&on_connect);
$connect->add_handler('public', \&on_public);
$connect->add_handler('msg', \&on_msg);
$irc->start();
tlcr: 0 庚寅年八月十六日 07:14:38 ~
●