NAME
POE::Component::IRC::Cookbook::Translator - A bot that can translate text
SYNOPSIS
This bot uses POE::Component::Lingua::Translate to translate text for channel members. It makes use of the "BotCommand" plugin to handle the translate command.
DESCRIPTION
#!/usr/bin/env perluse strict;use warnings;use Encode qw(decode);use Encode::Guess;use IRC::Utils qw(decode_irc parse_user);use POE;use POE::Component::IRC::State;use POE::Component::IRC::Plugin::AutoJoin;use POE::Component::IRC::Plugin::BotCommand;use POE::Component::Lingua::Translate;POE::Session->create(package_states => [main => [ qw(_start irc_botcmd_trans translated) ]],heap => {translators => { },});$poe_kernel->run();sub _start {my $heap = $_[HEAP];my $irc = POE::Component::IRC::State->spawn(Nick => 'translator_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 => {trans => 'Usage: trans <from>,<to> <text>'}));$irc->yield(register => 'botcmd_trans');$irc->yield('connect');return;}sub irc_botcmd_trans {my $heap = $_[HEAP];my $irc = $heap->{irc};my $nick = parse_user( $_[ARG0] );my $channel = $_[ARG1];my ($from, $to, $text) = split /,|\s+/, $_[ARG2], 3;if (!exists $heap->{translators}->{$from . $to}) {eval {$heap->{translators}->{$from . $to} = POE::Component::Lingua::Translate->new(alias => $from . $to,back_end => 'Babelfish',src => $from,dest => $to,);};if ($@) {$irc->yield(privmsg => $channel, "$nick: There was an error: $@");return;}}$poe_kernel->post($from . $to => translate =>decode_irc($text),{channel => $channel,nick => $nick,});return;}sub translated {my $irc = $_[HEAP]->{irc};my ($text, $context, $error) = @_[ARG0, ARG1, ARG2];if ($error) {$irc->yield('privmsg',$context->{channel},$context->{nick} . ": There was an error: $error",);return;}$irc->yield('privmsg',$context->{channel},$context->{nick} . ': ' . $text,);return;}
AUTHOR
Hinrik Örn Sigurðsson, [email protected]