mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-23 12:29:27 +01:00
Converted Channels.pm (and all modules using channels object) to use HashObject -- can now add/remove channels and set/unset channel meta-data as user commands
This commit is contained in:
parent
e0c9c73acc
commit
f29202c99c
@ -103,7 +103,7 @@ sub check_flood {
|
|||||||
$length--;
|
$length--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return if ($channel =~ /^#/) and (not exists ${ $self->{pbot}->channels->channels }{$channel} or ${ $self->{pbot}->channels->channels }{$channel}{is_op} == 0);
|
return if ($channel =~ /^#/) and (not exists $self->{pbot}->channels->channels->hash->{$channel} or $self->{pbot}->channels->channels->hash->{$channel}{chanop} == 0);
|
||||||
|
|
||||||
if($mode == $self->{FLOOD_JOIN}) {
|
if($mode == $self->{FLOOD_JOIN}) {
|
||||||
if($text =~ /^JOIN/) {
|
if($text =~ /^JOIN/) {
|
||||||
@ -114,7 +114,7 @@ sub check_flood {
|
|||||||
|
|
||||||
# if QUIT, then assume they existed on any channel the bot exists on
|
# if QUIT, then assume they existed on any channel the bot exists on
|
||||||
# this makes it possible to deal with ping timeout quits
|
# this makes it possible to deal with ping timeout quits
|
||||||
foreach my $chan (keys %{ $self->{pbot}->channels->channels }) {
|
foreach my $chan (keys %{ $self->{pbot}->channels->channels->hash }) {
|
||||||
if(not exists ${ $self->message_history }{$account}{$chan}) {
|
if(not exists ${ $self->message_history }{$account}{$chan}) {
|
||||||
${ $self->message_history }{$account}{$chan}{offenses} = 0;
|
${ $self->message_history }{$account}{$chan}{offenses} = 0;
|
||||||
${ $self->message_history }{$account}{$chan}{join_watch} = 0;
|
${ $self->message_history }{$account}{$chan}{join_watch} = 0;
|
||||||
|
100
PBot/Channels.pm
100
PBot/Channels.pm
@ -12,6 +12,7 @@ use vars qw($VERSION);
|
|||||||
$VERSION = $PBot::PBot::VERSION;
|
$VERSION = $PBot::PBot::VERSION;
|
||||||
|
|
||||||
use Carp ();
|
use Carp ();
|
||||||
|
use PBot::HashObject;
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
if(ref($_[1]) eq 'HASH') {
|
if(ref($_[1]) eq 'HASH') {
|
||||||
@ -33,60 +34,77 @@ sub initialize {
|
|||||||
Carp::croak ("Missing pbot reference to Channels");
|
Carp::croak ("Missing pbot reference to Channels");
|
||||||
}
|
}
|
||||||
|
|
||||||
my $channels_file = delete $conf{filename};
|
my $filename = delete $conf{filename};
|
||||||
|
|
||||||
$self->{pbot} = $pbot;
|
$self->{pbot} = $pbot;
|
||||||
$self->{filename} = $channels_file;
|
$self->{channels} = PBot::HashObject->new(pbot => $pbot, name => 'Channels', index_key => 'channel', filename => $filename);
|
||||||
$self->{channels} = {};
|
|
||||||
|
$pbot->commands->register(sub { $self->set(@_) }, "chanset", 40);
|
||||||
|
$pbot->commands->register(sub { $self->unset(@_) }, "chanunset", 40);
|
||||||
|
$pbot->commands->register(sub { $self->add(@_) }, "chanadd", 40);
|
||||||
|
$pbot->commands->register(sub { $self->remove(@_) }, "chanrem", 40);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub set {
|
||||||
|
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||||
|
my ($channel, $key, $value) = split / /, $arguments, 3;
|
||||||
|
|
||||||
|
if(not defined $channel or not defined $key) {
|
||||||
|
return "/msg $nick Usage: chanset <channel> <key> <value>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "/msg $nick " . $self->channels->set($channel, $key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub unset {
|
||||||
|
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||||
|
my ($channel, $key) = split / /, $arguments;
|
||||||
|
|
||||||
|
if(not defined $channel or not defined $key) {
|
||||||
|
return "/msg $nick Usage: chanunset <channel> <key>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "/msg $nick " . $self->channels->unset($channel, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub add {
|
||||||
|
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||||
|
|
||||||
|
if(not defined $arguments) {
|
||||||
|
return "/msg $nick Usage: chanadd <channel>";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $hash = {};
|
||||||
|
$hash->{channel} = $arguments;
|
||||||
|
$hash->{enabled} = 1;
|
||||||
|
$hash->{chanop} = 0;
|
||||||
|
|
||||||
|
return "/msg $nick " . $self->channels->add($hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub remove {
|
||||||
|
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||||
|
|
||||||
|
if(not defined $arguments) {
|
||||||
|
return "/msg $nick Usage: chanrem <channel>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "/msg $nick " . $self->channels->remove($arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub load_channels {
|
sub load_channels {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
open(FILE, "< $self->{filename}") or Carp::croak "Couldn't open $self->{filename}: $!\n";
|
$self->channels->load_hash();
|
||||||
my @contents = <FILE>;
|
|
||||||
close(FILE);
|
|
||||||
|
|
||||||
$self->{pbot}->logger->log("Loading channels from $self->{filename} ...\n");
|
|
||||||
|
|
||||||
my $i = 0;
|
|
||||||
foreach my $line (@contents) {
|
|
||||||
$i++;
|
|
||||||
chomp $line;
|
|
||||||
|
|
||||||
my ($channel, $enabled, $is_op, $showall) = split(/\s+/, $line);
|
|
||||||
if(not defined $channel || not defined $is_op || not defined $enabled) {
|
|
||||||
Carp::croak "Syntax error around line $i of $self->{filename}\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$channel = lc $channel;
|
|
||||||
|
|
||||||
if(defined ${ $self->channels }{$channel}) {
|
|
||||||
Carp::croak "Duplicate channel $channel found in $self->{filename} around line $i\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
${ $self->channels }{$channel}{enabled} = $enabled;
|
|
||||||
${ $self->channels }{$channel}{is_op} = $is_op;
|
|
||||||
${ $self->channels }{$channel}{showall} = $showall;
|
|
||||||
|
|
||||||
$self->{pbot}->logger->log(" Adding channel $channel (enabled: $enabled, op: $is_op, showall: $showall) ...\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
$self->{pbot}->logger->log("Done.\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub save_channels {
|
sub save_channels {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
open(FILE, "> $self->{filename}") or Carp::croak "Couldn't open $self->{filename}: $!\n";
|
|
||||||
foreach my $channel (keys %{ $self->channels }) {
|
$self->channels->save_hash();
|
||||||
$channel = lc $channel;
|
|
||||||
print FILE "$channel ${ $self->channels }{$channel}{enabled} ${ $self->channels }{$channel}{is_op} ${ $self->channels }{$channel}{showall}\n";
|
|
||||||
}
|
|
||||||
close(FILE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub PBot::Channels::channels {
|
sub channels {
|
||||||
# Carp::cluck "PBot::Channels::channels";
|
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->{channels};
|
return $self->{channels};
|
||||||
}
|
}
|
||||||
|
@ -93,8 +93,8 @@ sub on_notice {
|
|||||||
$self->{pbot}->logger->log("Received NOTICE from $nick $host '$text'\n");
|
$self->{pbot}->logger->log("Received NOTICE from $nick $host '$text'\n");
|
||||||
|
|
||||||
if($nick eq "NickServ" && $text =~ m/You are now identified/i) {
|
if($nick eq "NickServ" && $text =~ m/You are now identified/i) {
|
||||||
foreach my $chan (keys %{ $self->{pbot}->channels->channels }) {
|
foreach my $chan (keys %{ $self->{pbot}->channels->channels->hash }) {
|
||||||
if(${ $self->{pbot}->channels->channels }{$chan}{enabled} != 0) {
|
if($self->{pbot}->channels->channels->hash->{$chan}{enabled}) {
|
||||||
$self->{pbot}->logger->log("Joining channel: $chan\n");
|
$self->{pbot}->logger->log("Joining channel: $chan\n");
|
||||||
$conn->join($chan);
|
$conn->join($chan);
|
||||||
}
|
}
|
||||||
@ -140,8 +140,8 @@ sub on_mode {
|
|||||||
$self->{pbot}->chanops->{unban_timeout}->{$target}{channel} = $channel;
|
$self->{pbot}->chanops->{unban_timeout}->{$target}{channel} = $channel;
|
||||||
}
|
}
|
||||||
} elsif($mode eq "+e" && $channel eq $self->{pbot}->botnick) {
|
} elsif($mode eq "+e" && $channel eq $self->{pbot}->botnick) {
|
||||||
foreach my $chan (keys %{ $self->{pbot}->channels->channels }) {
|
foreach my $chan (keys %{ $self->{pbot}->channels->channels->hash }) {
|
||||||
if($self->channels->{channels}->{$chan}{enabled} != 0) {
|
if($self->channels->channels->hash->{$chan}{enabled}) {
|
||||||
$self->{pbot}->logger->log("Joining channel: $chan\n");
|
$self->{pbot}->logger->log("Joining channel: $chan\n");
|
||||||
$self->{pbot}->conn->join($chan);
|
$self->{pbot}->conn->join($chan);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ use warnings;
|
|||||||
# These are set automatically by the build/commit script
|
# These are set automatically by the build/commit script
|
||||||
use constant {
|
use constant {
|
||||||
BUILD_NAME => "PBot",
|
BUILD_NAME => "PBot",
|
||||||
BUILD_REVISION => 169,
|
BUILD_REVISION => 171,
|
||||||
BUILD_DATE => "2010-06-17",
|
BUILD_DATE => "2010-06-17",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1 +1,5 @@
|
|||||||
#pbot2 1 1 0
|
-
|
||||||
|
channel: #pbot2
|
||||||
|
chanop: 1
|
||||||
|
enabled: 1
|
||||||
|
-
|
||||||
|
Loading…
Reference in New Issue
Block a user