зеркало из https://github.com/mozilla/pjs.git
67 строки
2.8 KiB
Plaintext
67 строки
2.8 KiB
Plaintext
################################
|
|
# Parrot Module #
|
|
################################
|
|
|
|
package BotModules::Parrot;
|
|
use vars qw(@ISA);
|
|
@ISA = qw(BotModules);
|
|
1;
|
|
|
|
sub Help {
|
|
my $self = shift;
|
|
my ($event) = @_;
|
|
if ($self->isAdmin($event)) {
|
|
return {
|
|
'' => 'This module allows you to make the bot do stuff.',
|
|
'say' => 'Makes the bot say something. The <target> can be a person or channel. Syntax: say <target> <text>',
|
|
'do' => 'Makes the bot do (/me) something. The <target> can be a person or channel. Syntax: do <target> <text>',
|
|
'invite' => 'Makes the bot invite (/invite) somebody to a channel. Syntax: invite <who> <channel>',
|
|
'announce' => 'Makes the bot announce something to every channel in which this module is enabled. Syntax: announce <text>',
|
|
};
|
|
} else {
|
|
return $self->SUPER::Help($event);
|
|
}
|
|
}
|
|
|
|
sub Told {
|
|
my $self = shift;
|
|
my ($event, $message) = @_;
|
|
if ((($event->{'level'} == 1) and ($self->isAdmin($event))) or
|
|
(($event->{'level'} == 3) and ($event->{'God_channel_rights'}) and ($event->{'Parrot_channel'} eq $event->{'God_channel'}))) {
|
|
if ($message =~ /^\s*say\s+(\S+)\s+(.*)$/osi) {
|
|
local $event->{'target'} = $1;
|
|
$self->say($event, $2);
|
|
} elsif ($message =~ /^\s*do\s+(\S+)\s+(.*)$/osi) {
|
|
local $event->{'target'} = $1;
|
|
$self->emote($event, $2);
|
|
} elsif ($message =~ /^\s*announce\s+(.*)$/osi) {
|
|
$self->announce($event, $1);
|
|
} elsif ($message =~ /^\s* invite \s+
|
|
(\S+) \s+
|
|
(?: (?:in|to|into) \s+
|
|
(?:channel \s+)? )?
|
|
(\S+) \s*$/osix) {
|
|
$self->invite($event, $1, $2);
|
|
} else {
|
|
return $self->SUPER::Told(@_);
|
|
}
|
|
} else {
|
|
if (($event->{'level'} == 1) and (($message =~ /^\s*say\s+(\S+)\s+(.*)$/osi) or ($message =~ /^\s*do\s+(\S+)\s+(.*)$/osi))) {
|
|
$event->{'God_channel'} = lc($1);
|
|
$event->{'Parrot_channel'} = lc($1);
|
|
}
|
|
my $result = $self->SUPER::Told(@_);
|
|
return $result < (3 * defined($event->{'Parrot_channel'})) ? 3 : $result;
|
|
|
|
# Note: We go through some contortions here because if the parent
|
|
# returns 3 or more, some other module sets God_channel, and
|
|
# the command is either not 'say' or 'do' (or the God_channel happens
|
|
# to be different to the channel we are looking at) then it is theoretically
|
|
# possible that God_channel_rights could be set, but not for the channel
|
|
# we care about. Or something..... ;-)
|
|
|
|
}
|
|
return 0; # we've dealt with it, no need to do anything else.
|
|
}
|
|
|