001
2021-12-17
jrmu
#!/usr/bin/perl
002
2021-12-17
jrmu
use strict;
003
2021-12-17
jrmu
use warnings;
005
2021-12-17
jrmu
package ChatBot;
006
2021-12-17
jrmu
use base qw(Bot::BasicBot);
007
2021-12-17
jrmu
use Lingua::EN::Tagger;
009
2021-12-17
jrmu
my $logs;
011
2021-12-17
jrmu
sub chanjoin {
012
2021-12-17
jrmu
my $self = shift;
013
2021-12-17
jrmu
my $arguments = shift;
014
2021-12-17
jrmu
my $nick = $arguments->{who};
015
2021-12-17
jrmu
if ($nick eq $self->pocoirc->nick_name()) {
016
2021-12-17
jrmu
return;
018
2021-12-17
jrmu
my @greetings = ("Hey there, $nick!",
019
2021-12-17
jrmu
"$nick, welcome!",
020
2021-12-17
jrmu
"sup $nick!",
021
2021-12-17
jrmu
"$nick, it's good to see you.",
022
2021-12-17
jrmu
"How can I help you, $nick?",
023
2021-12-17
jrmu
"Hey $nick, do you hang out here too?",
024
2021-12-17
jrmu
"Hiya $nick.");
026
2021-12-17
jrmu
$self->say(
027
2021-12-17
jrmu
channel => $arguments->{channel},
028
2021-12-17
jrmu
body => $greetings[int(rand(scalar(@greetings)))],
032
2021-12-17
jrmu
sub chanpart {
033
2021-12-17
jrmu
my $self = shift;
034
2021-12-17
jrmu
my $arguments = shift;
035
2021-12-17
jrmu
my $nick = $arguments->{who};
036
2021-12-17
jrmu
my @farewells = ("I'm sad to see $nick go",
037
2021-12-17
jrmu
"Oh, $nick left, I was just about to send a message.",
038
2021-12-17
jrmu
"I always seem to return just as $nick leaves.",
039
2021-12-17
jrmu
"I hope $nick will rejoin later.",
040
2021-12-17
jrmu
"I'm going to take a break too, brb.",
041
2021-12-17
jrmu
"See you later $nick. Oops, I was too late.");
043
2021-12-17
jrmu
$self->say(
044
2021-12-17
jrmu
channel => $arguments->{channel},
045
2021-12-17
jrmu
body => $farewells[int(rand(scalar(@farewells)))],
049
2021-12-17
jrmu
sub emoted {
050
2021-12-17
jrmu
my $self = shift;
051
2021-12-17
jrmu
my $arguments = shift;
053
2021-12-17
jrmu
$self->emote(
054
2021-12-17
jrmu
channel => $arguments->{channel},
055
2021-12-17
jrmu
body => "$arguments->{body} too",
059
2021-12-17
jrmu
sub noticed {
060
2021-12-17
jrmu
my $self = shift;
061
2021-12-17
jrmu
my $arguments = shift;
063
2021-12-17
jrmu
my $nick = $arguments->{who};
065
2021-12-17
jrmu
my @notices = (
066
2021-12-17
jrmu
"$nick, please resend this in a normal message",
067
2021-12-17
jrmu
"I'm having a hard time reading your notice.",
068
2021-12-17
jrmu
"Good point, $nick.",
069
2021-12-17
jrmu
"Can you message on the public channel instead?",
072
2021-12-17
jrmu
$self->notice(
073
2021-12-17
jrmu
who => $nick,
074
2021-12-17
jrmu
channel => $arguments->{channel},
075
2021-12-17
jrmu
body => $notices[int(rand(scalar(@notices)))],
079
2021-12-17
jrmu
sub topic {
080
2021-12-17
jrmu
my $self = shift;
081
2021-12-17
jrmu
my $arguments = shift;
082
2021-12-17
jrmu
my @replies = ("Nice",
083
2021-12-17
jrmu
"Hm, I liked the old topic better.",
084
2021-12-17
jrmu
"Please don't change the topic.",
085
2021-12-17
jrmu
"Good thinking.",
086
2021-12-17
jrmu
"That makes more sense.");
088
2021-12-17
jrmu
$self->say(
089
2021-12-17
jrmu
channel => $arguments->{channel},
090
2021-12-17
jrmu
body => $replies[int(rand(scalar(@replies)))],
094
2021-12-17
jrmu
sub said {
095
2021-12-17
jrmu
my $self = shift;
096
2021-12-17
jrmu
my $arguments = shift;
098
2021-12-17
jrmu
$logs .= "$arguments->{body}\n";
099
2021-12-17
jrmu
my $p = new Lingua::EN::Tagger;
100
2021-12-17
jrmu
my %word_freqs = $p->get_words($logs);
101
2021-12-17
jrmu
my $keyword;
102
2021-12-17
jrmu
my $total = 0;
103
2021-12-17
jrmu
foreach my $freq (keys %word_freqs) {
104
2021-12-17
jrmu
$total += $word_freqs{$freq};
105
2021-12-17
jrmu
$keyword = $freq if rand($total) < $word_freqs{$freq};
107
2021-12-17
jrmu
my @replies = ("I think you have a valid point about $keyword.",
108
2021-12-17
jrmu
"Hm, what do others think about $keyword?",
109
2021-12-17
jrmu
ucfirst $keyword." is not something I'm familiar with",
110
2021-12-17
jrmu
"Are you sure about $keyword?",
111
2021-12-17
jrmu
"Tell me more about $keyword.",
112
2021-12-17
jrmu
"What about $keyword?",
113
2021-12-17
jrmu
"Let's talk about something else besides $keyword.");
114
2021-12-17
jrmu
return $replies[int(rand(scalar(@replies)))];
116
2021-12-17
jrmu
package main;
118
2021-12-17
jrmu
my $bot = ChatBot->new(
119
2021-12-17
jrmu
server => 'irc.example.com',
120
2021-12-17
jrmu
port => '6667',
121
2021-12-17
jrmu
channels => ['#perl102'],
122
2021-12-17
jrmu
nick => 'nickname',
123
2021-12-17
jrmu
name => 'username',
125
2021-12-17
jrmu
$bot->run();