1 8f7f2f4a 2021-12-17 jrmu #!/usr/bin/perl
3 8f7f2f4a 2021-12-17 jrmu use warnings;
5 8f7f2f4a 2021-12-17 jrmu package MonopBot;
6 8f7f2f4a 2021-12-17 jrmu use base qw(Bot::BasicBot);
8 8f7f2f4a 2021-12-17 jrmu $Expect::Log_Stdout = 0;
9 8f7f2f4a 2021-12-17 jrmu $Expect::Multiline_Matching = 0;
10 8f7f2f4a 2021-12-17 jrmu my $command = 'monop';
11 8f7f2f4a 2021-12-17 jrmu my $timeout = 300;
12 8f7f2f4a 2021-12-17 jrmu my $exp = new Expect;
13 8f7f2f4a 2021-12-17 jrmu $exp->raw_pty(1);
14 8f7f2f4a 2021-12-17 jrmu $exp->spawn($command, ()) or die "Cannot spawn $command: $!\n";
19 8f7f2f4a 2021-12-17 jrmu # returns output from command
20 8f7f2f4a 2021-12-17 jrmu sub readcmd {
21 8f7f2f4a 2021-12-17 jrmu my @results = $exp->expect($timeout, -re => '^[\n\s[:print:]]+$');
22 8f7f2f4a 2021-12-17 jrmu my ($pos, $error, $match, $before, $after) = @results;
23 8f7f2f4a 2021-12-17 jrmu return $before.$match.$after;
26 8f7f2f4a 2021-12-17 jrmu sub got_names {
27 8f7f2f4a 2021-12-17 jrmu my $self = shift;
28 8f7f2f4a 2021-12-17 jrmu my $arguments = shift;
29 8f7f2f4a 2021-12-17 jrmu @nicks = keys(%{$arguments->{names}});
32 8f7f2f4a 2021-12-17 jrmu sub chanjoin {
33 8f7f2f4a 2021-12-17 jrmu my $self = shift;
34 8f7f2f4a 2021-12-17 jrmu my $arguments = shift;
35 8f7f2f4a 2021-12-17 jrmu my $nick = $arguments->{who};
36 8f7f2f4a 2021-12-17 jrmu if ($nick eq $self->pocoirc->nick_name()) { # bot itself joins
37 8f7f2f4a 2021-12-17 jrmu $output = readcmd();
38 8f7f2f4a 2021-12-17 jrmu return $output;
44 8f7f2f4a 2021-12-17 jrmu my $self = shift;
45 8f7f2f4a 2021-12-17 jrmu my $arguments = shift;
46 8f7f2f4a 2021-12-17 jrmu if (scalar(@nicks) && grep /^$arguments->{who}$/, @nicks) {
47 8f7f2f4a 2021-12-17 jrmu print $exp "$arguments->{body}\n";
48 8f7f2f4a 2021-12-17 jrmu $output = readcmd();
49 8f7f2f4a 2021-12-17 jrmu return $output;
54 8f7f2f4a 2021-12-17 jrmu package main;
56 8f7f2f4a 2021-12-17 jrmu my $bot = MonopBot->new(
57 8f7f2f4a 2021-12-17 jrmu server => 'irc.example.com',
58 8f7f2f4a 2021-12-17 jrmu port => '6667',
59 8f7f2f4a 2021-12-17 jrmu channels => ['#perl105'],
60 8f7f2f4a 2021-12-17 jrmu nick => 'nickname',
61 8f7f2f4a 2021-12-17 jrmu name => 'username',
64 8f7f2f4a 2021-12-17 jrmu local $SIG{INT} = sub {
65 8f7f2f4a 2021-12-17 jrmu $exp->hard_close();
66 8f7f2f4a 2021-12-17 jrmu print "Quitting program...\n";
67 8f7f2f4a 2021-12-17 jrmu $bot->shutdown("Quitting...");
69 8f7f2f4a 2021-12-17 jrmu $bot->run();