Provided by: libpoe-component-irc-perl_6.93+dfsg-1_all bug

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 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, hinrik.sig@gmail.com

perl v5.32.1                                2021-09POE::Component::IRC::Cookbook::Translator(3pm)