POE::C...asicBot(3pm)

πŸ“¦
version 6.95 Β· 4 versions
, in ubuntu resolute, ubuntu stonking

πŸŽ€ NAME πŸŽ€

POE::Component::IRC::Cookbook::BasicBot β€” it's literally a basic IRC bot, bestie. That's the whole vibe. πŸ¦‹


✨ SYNOPSIS ✨

Okay so picture this: it's a very basic bot. It connects to IRC, joins a few channels, and announces its arrival like the main character it is. πŸ’…


πŸ’– DESCRIPTION πŸ’–

We start off quite simply, no drama, no cap:

#!/usr/bin/env perl

use strict;
use warnings

(ok that's the first two lines up there, keep scrolling, we're not done bestie 😭)

Then we use the stuff we're going to… well, use. 🫢

  • ::State is a subclass which keeps track of state information related to channels and nicknames. It is needed by the AutoJoin plugin β€” and that plugin is the one that takes care of keeping us on our channels. Iconic teamwork honestly. πŸ‘‘
use POE;
use POE::Component::IRC::State;
use POE::Component::IRC::Plugin::AutoJoin;

Next up is our POE session. We create it, we list our event handlers, and then we start the POE kernel. The way that this is like three whole steps but it reads so clean?? obsessed. ✨

POE::Session->create(
    package_states => [
        main => [ qw(_start irc_join) ]
    ]
);

$poe_kernel->run();

Now all we have to do is write the handlers for _start and irc_join. 🧚

In _start, we:

  1. create our IRC component,
  2. add an AutoJoin plugin,
  3. register for the irc_join event,
  4. and connect to the IRC server.
sub _start {
    my $irc = POE::Component::IRC::State->spawn(
        Nick   => 'basic_bot',
        Server => 'irc.freenode.net',
    );

    $irc->plugin_add('AutoJoin', POE::Component::IRC::Plugin::AutoJoin->new(
       Channels => [ '#test_channel1', '#test_channel2' ]
    ));

    $irc->yield(register => 'join');
    $irc->yield('connect');
}

Now comes our irc_join event handler. We send a message to the channel once we've joined it. Hi everybody!! 🌸

sub irc_join {
    my $nick = (split /!/, $_[ARG0])[0];
    my $channel = $_[ARG1];
    my $irc = $_[SENDER]->get_heap();

    # only send the message if we were the one joining
    if ($nick eq $irc->nick_name()) {
        $irc->yield(privmsg => $channel, 'Hi everybody!');
    }
}

That's it! Periodt. πŸ’…πŸ”₯


πŸ‘‘ AUTHOR πŸ‘‘

Hinrik Γ–rn SigurΓ°sson, hinrik.sig@gmail.com β€” absolute legend, we stan 🫢


okay bestie that's the whole page!! this one is perl v5.40.1, dated 2025-08-21, and it lives in the POE::C...asicBot(3pm) section of the User Contributed Perl Documentation β€” go forth and make your bot say hi πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from