POE::Component::IRC::Cookbook::Translator man page on Fedora

Man page or keyword search:  
man Server   31170 pages
apropos Keyword Search (all sections)
Output format
Fedora logo
[printable version]

POE::Component::IRC::CUseroContribPOE::Component::IRC::Cookbook::Translator(3)

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 perl

	use strict;
	use warnings;
	use Encode qw(decode);
	use Encode::Guess;
	use POE;
	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;
	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 =>
		to_utf8($text),
		{
		    channel => $channel,
		    nick    => $nick,
		}
	    );
	    return;
	}

	# Some IRC users use CP1252, some use UTF-8. Let's decode it properly.
	sub to_utf8 {
	    my ($line) = @_;
	    my $utf8 = guess_encoding($line, 'utf8');
	    return ref $utf8 ? decode('utf8', $line) : decode('cp1252', $line);
	}

	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 Oern Sigur`sson, hinrik.sig@gmail.com

perl v5.14.1			  POE::Component::IRC::Cookbook::Translator(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]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net