POE::Component::IRC::Cookbook::Resolver man page on Fedora
[printable version]
POE::Component::IRC::CUseroContributPOE::Component::IRC::Cookbook::Resolver(3)
NAME
POE::Component::IRC::Cookbook::Resolver - A bot that can resolve DNS
records
SYNOPSIS
This bot uses POE::Component::Client::DNS to DNS records for channel
members.
DESCRIPTION
#!/usr/bin/env perl
use strict;
use warnings;
use POE;
use POE::Component::Client::DNS;
use POE::Component::IRC::Common qw(parse_user);
use POE::Component::IRC::State;
use POE::Component::IRC::Plugin::AutoJoin;
use POE::Component::IRC::Plugin::BotCommand;
POE::Session->create(
package_states => [
main => [ qw(_start irc_botcmd_resolve dns_response) ]
],
);
$poe_kernel->run();
sub _start {
my $heap = $_[HEAP];
my $irc = POE::Component::IRC::State->spawn(
Nick => 'resolver_bot',
Server => 'irc.freenode.net',
);
$heap->{irc} = $irc;
$irc->plugin_add('AutoJoin', POE::Component::IRC::Plugin::AutoJoin->new(
Channels => [ '#test_channel1', '#test_channel2' ]
));
$irc->plugin_add('BotCommand', POE::Component::IRC::Plugin::BotCommand->new(
Commands => {
resolve => 'Usage: resolve <host>'
}
));
$heap->{dns} = POE::Component::Client::DNS->spawn();
$irc->yield(register => 'botcmd_resolve');
$irc->yield('connect');
return;
}
sub irc_botcmd_resolve {
my $dns = $_[HEAP]->{dns};
my $nick = parse_user( $_[ARG0] );
my ($channel, $host) = @_[ARG1, ARG2];
my $res = $dns->resolve(
event => 'dns_response',
host => $host,
context => {
channel => $channel,
nick => $nick,
},
);
$poe_kernel->yield(dns_response => $res) if $res;
return;
}
sub dns_response {
my $irc = $_[HEAP]->{irc};
my $res = $_[ARG0];
my @answers = $res->{response}
? map { $_->rdatastr } $res->{response}->answer()
: ();
$irc->yield(
'privmsg',
$res->{context}->{channel},
$res->{context}->{nick} . (@answers
? ": @answers"
: ': no answers for "' . $res->{host} . '"')
);
return;
}
AUTHOR
Hinrik Oern Sigur`sson, hinrik.sig@gmail.com
perl v5.14.1 20POE::Component::IRC::Cookbook::Resolver(3)
[top]
List of man pages available for Fedora
Copyright (c) for man pages and the logo by the respective OS vendor.
For those who want to learn more, the polarhome community provides shell access and support.
[legal]
[privacy]
[GNU]
[policy]
[cookies]
[netiquette]
[sponsors]
[FAQ]
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
|
Vote for polarhome
|