3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-06 03:59:31 +01:00
pbot/lib/PBot/Core/Handlers/Chat.pm

103 lines
2.8 KiB
Perl
Raw Normal View History

# File: Chat.pm
#
# Purpose: IRC handlers for chat/message events.
2023-02-21 06:31:52 +01:00
# SPDX-FileCopyrightText: 2001-2023 Pragmatic Software <pragma78@gmail.com>
# SPDX-License-Identifier: MIT
2021-07-24 01:57:33 +02:00
package PBot::Core::Handlers::Chat;
use PBot::Imports;
use parent 'PBot::Core::Class';
sub initialize {
my ($self, %conf) = @_;
$self->{pbot}->{event_dispatcher}->register_handler('irc.notice', sub { $self->on_notice (@_) });
$self->{pbot}->{event_dispatcher}->register_handler('irc.public', sub { $self->on_public (@_) });
$self->{pbot}->{event_dispatcher}->register_handler('irc.caction', sub { $self->on_action (@_) });
$self->{pbot}->{event_dispatcher}->register_handler('irc.msg', sub { $self->on_msg (@_) });
}
sub on_notice {
my ($self, $event_type, $event) = @_;
my ($nick, $user, $host, $to, $text) = (
2023-01-31 14:44:34 +01:00
$event->nick,
$event->user,
$event->host,
$event->to,
$event->{args}[0],
);
# don't handle non-chat NOTICE
return undef if $to eq '*';
# log notice
$self->{pbot}->{logger}->log("NOTICE from $nick!$user\@$host to $to: $text\n");
# if NOTICE is sent to the bot then replace the `to` field with the
# sender's nick instead so when we pass it on to on_public ...
if ($to eq $self->{pbot}->{registry}->get_value('irc', 'botnick')) {
2023-01-31 14:44:34 +01:00
$event->{to}[0] = $nick;
}
# handle this NOTICE as a public message
# (check for bot commands, anti-flooding, etc)
$self->on_public($event_type, $event);
return 1;
}
sub on_public {
my ($self, $event_type, $event) = @_;
my ($from, $nick, $user, $host, $text, $tags) = (
2023-01-31 14:44:34 +01:00
$event->{to}[0],
$event->nick,
$event->user,
$event->host,
$event->{args}[0],
$event->{args}[1],
);
($nick, $user, $host) = $self->{pbot}->{irchandlers}->normalize_hostmask($nick, $user, $host);
# send text to be processed for bot commands, anti-flood enforcement, etc
$event->{interpreted} = $self->{pbot}->{interpreter}->process_line($from, $nick, $user, $host, $text, $tags);
return 1;
}
sub on_action {
my ($self, $event_type, $event) = @_;
# prepend "/me " to the message text
2023-01-31 14:44:34 +01:00
$event->{args}[0] = "/me " . $event->{args}[0];
# pass this along to on_public
$self->on_public($event_type, $event);
return 1;
}
sub on_msg {
my ($self, $event_type, $event) = @_;
my ($nick, $user, $host, $text, $tags) = (
2023-01-31 14:44:34 +01:00
$event->nick,
$event->user,
$event->host,
$event->{args}[0],
$event->{args}[1],
);
($nick, $user, $host) = $self->{pbot}->{irchandlers}->normalize_hostmask($nick, $user, $host);
# send text to be processed as a bot command, in "channel" $nick
$event->{interpreted} = $self->{pbot}->{interpreter}->process_line($nick, $nick, $user, $host, $text, $tags, 1);
return 1;
}
1;