1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut synced 2025-06-07 17:05:43 -04:00

Merge branch 'master' of github.com:perlbot/perlbuut

This commit is contained in:
Ryan Voots 2022-06-22 19:35:02 -04:00
commit eb5528851d
9 changed files with 132 additions and 85 deletions

View file

@ -13,8 +13,6 @@ This is the source code for perlbot, the resident infobot on Freenodes
=over 4 =over 4
=item * L<http://perl-begin.org/FAQs/freenode-perl/>
=item * L<https://github.com/simcop2387/perlbuut> =item * L<https://github.com/simcop2387/perlbuut>
=back =back

View file

@ -37,46 +37,11 @@ http_plugin_port 1092
</plugin_manager> </plugin_manager>
<bot perlbot> <bot perlbot>
channel \#buubot channel \#\#perl
channel \#\#turtles
channel \#perlcafe
channel \#webgui
channel \#citadel
channel \#modperl
channel \#perl
channel \#ipv6
channel \#perlbot
channel \#mrtg
channel \#ipv6-fr
channel \#freebsd-fr
channel \#botpark
channel \#css
channel \#modus
channel \#perl-cats
channel \#cout.dev
channel \#web-locals
channel \#regex
channel \#regexen
ignore buubot
ignore avarbot
ignore jeval
ignore gumbybrain
ignore perlbot
ignore buubot3
ignore loudbot
ignore serfbot
ignore farnsworth
ignore frogbot
ignore EvanCarroll
ignore EvanCarrol
ignore EvanCaroll
ignore EvanCarol
ignore EC
server 192.168.32.1 server 192.168.32.1
username perlbot username perlbot
password sindarin password UjecyickehumBevGixrejparpheyndoc
port 65432 port 65432
root_mask p3m/member/simcop2387 root_mask p3m/member/simcop2387
</bot> </bot>
@ -84,6 +49,8 @@ http_plugin_port 1092
<bot perlbot-magnet> <bot perlbot-magnet>
channel \#freenode-perl-cabal channel \#freenode-perl-cabal
channel \#perl-help channel \#perl-help
channel \#perl
channel \#pdl
ignore purl ignore purl
ignore perlbot ignore perlbot
@ -119,3 +86,20 @@ http_plugin_port 1092
port 65432 port 65432
root_mask ~simcop238@simcop2387.info root_mask ~simcop238@simcop2387.info
</bot> </bot>
<bot perlbot-libera>
channel \#buubot
channel \#perl
channel \#perlbot
channel \#botpark
channel \#perl-cats
server 192.168.32.1
username perlbot-libera
password AtlyeSlognakjabDatCujatyijFeach9
port 65432
root_mask perlbot/patrician/simcop2387
ignore lambdabot
ignore lambdabot2
</bot>

View file

@ -1,7 +1,7 @@
server "*" { server "*" {
channel "*" { channel "*" {
plugin "*" { addressed: true } plugin "*" { addressed: true }
plugin "join" { access: op; addressed: true } plugin "join" { access: root; addressed: true }
plugin "allowpaste" { access: op; addressed: true } plugin "allowpaste" { access: op; addressed: true }
plugin "pastebinadmin" { access: op; addressed: true } plugin "pastebinadmin" { access: op; addressed: true }
plugin "part" { access: op } plugin "part" { access: op }
@ -13,6 +13,20 @@ server "*" {
plugin "karma_modify" { addressed: false; } plugin "karma_modify" { addressed: false; }
plugin "seen" {addressed: false; } plugin "seen" {addressed: false; }
} }
channel "##perl" {
plugin "factoids" {
addressed: false;
}
plugin "eval" {addressed: true; }
plugin "deparse" {addressed: true; }
plugin "perldoc" {addressed: true; }
plugin "corelist" {addressed: true; }
plugin "default" {plugin: "factoids";}
}
channel "#pdl" {
plugin "eval" {addressed: false; }
plugin "deparse" {addressed: false; }
}
channel "#perl" { channel "#perl" {
plugin "eval" {addressed: false; } plugin "eval" {addressed: false; }
plugin "deparse" {addressed: false; } plugin "deparse" {addressed: false; }
@ -50,6 +64,24 @@ server "*" {
plugin "eval" {addressed: false; } plugin "eval" {addressed: false; }
plugin "deparse" {addressed: false; } plugin "deparse" {addressed: false; }
} }
channel "#regex" {
plugin "factoids" {
addressed: false;
}
plugin "default" {plugin: "factoids"; }
}
channel "#regexen" {
plugin "factoids" {
addressed: false;
}
plugin "default" {plugin: "factoids"; }
}
channel "#reg3x" {
plugin "factoids" {
addressed: false;
}
plugin "default" {plugin: "factoids"; }
}
} }
server "discord.gg" { server "discord.gg" {
channel "*" { channel "*" {
@ -65,12 +97,34 @@ server "matrix.org" {
} }
} }
server "*.freenode.net" { server "*.freenode.net" {
channel {
plugin "*" { addressed: true }
plugin "join" { access: root; addressed: true }
plugin "allowpaste" { access: op; addressed: true }
plugin "pastebinadmin" { access: op; addressed: true }
plugin "part" { access: op }
plugin "reload_plugins" { access: root }
plugin "restart" { access: root }
plugin "conf_dump" { access: root; }
plugin "save_config" { access: root; }
plugin "conf" { access: root; }
plugin "karma_modify" { addressed: false; }
plugin "seen" {addressed: false; }
}
channel "##perl" {
plugin "factoids" {
addressed: false;
}
plugin "default" {plugin: "factoids";}
plugin "eval" {addressed: true; }
plugin "deparse" {addressed: true; }
plugin "perldoc" {addressed: true; }
plugin "corelist" {addressed: true; }
}
}
server "*.libera.chat" {
channel "#perlbot" { channel "#perlbot" {
plugin "factoids" { plugin "factoids" {
namespaced: true;
prefix_command: "!";
chanspace: "#perlbot";
serverspace: "freenode.net";
filtersep: true; filtersep: true;
addressed: false; addressed: false;
} }
@ -79,31 +133,19 @@ server "*.freenode.net" {
channel "#regex" { channel "#regex" {
plugin "factoids" { plugin "factoids" {
addressed: false; addressed: false;
namespaced: true;
chanspace: "#regex";
serverspace: "freenode.net";
prefix_command: "!";
filtersep: true;
} }
plugin "default" {plugin: "factoids"; } plugin "default" {plugin: "factoids"; }
} }
channel "#regexen" { channel "#regexen" {
plugin "factoids" { plugin "factoids" {
addressed: false; addressed: false;
namespaced: true;
chanspace: "#regex";
serverspace: "freenode.net";
prefix_command: "!";
filtersep: true;
} }
plugin "default" {plugin: "factoids"; } plugin "default" {plugin: "factoids"; }
} }
channel "#lpmc" { channel "#reg3x" {
plugin "eval" {addressed: false; } plugin "factoids" {
plugin "deparse" {addressed: false; } addressed: false;
} }
channel "#learnprogramming" { plugin "default" {plugin: "factoids"; }
plugin "eval" {addressed: false; }
plugin "deparse" {addressed: false; }
} }
} }

View file

@ -7,6 +7,7 @@ use Data::Dumper;
use Text::Glob qw/match_glob/; use Text::Glob qw/match_glob/;
use Memoize; use Memoize;
use Regexp::Assemble; use Regexp::Assemble;
use Scalar::Util qw/blessed/;
use strict; use strict;
sub new { sub new {
@ -453,6 +454,13 @@ sub _execute_plugin_chain {
for my $command ( @$commands ) { for my $command ( @$commands ) {
local $@; local $@;
unless (blessed($command)) {
use Data::Dumper;
warn "Unblessed command! ".Dumper($command);
next;
};
my( $return, $output ) = eval { $command->command( $said, $self ) }; my( $return, $output ) = eval { $command->command( $said, $self ) };
use Data::Dumper; use Data::Dumper;

View file

@ -50,7 +50,7 @@ sub _start {
# TODO setup TCP server. # TODO setup TCP server.
$self->{server} = POE::Component::Server::TCP->new( $self->{server} = POE::Component::Server::TCP->new(
Port => 1784, Port => 1784,
Address =>'192.168.32.1', Address =>'192.168.196.2',
ClientFilter => "POE::Filter::Line", ClientFilter => "POE::Filter::Line",
ClientInput => \&receive_paste, ClientInput => \&receive_paste,
); );

View file

@ -224,7 +224,10 @@ sub handle ($self, $said, $pm) {
$said->{body} =~ s/^\s*(what|who|where|how|when|why)\s+($COPULA_RE)\s+(?<fact>.*?)\??\s*$/$+{fact}/i; $said->{body} =~ s/^\s*(what|who|where|how|when|why)\s+($COPULA_RE)\s+(?<fact>.*?)\??\s*$/$+{fact}/i;
my $prefix = $conf->{command_prefix}; my $prefix = $conf->{command_prefix};
warn "Checking for prefix: $prefix in ".Dumper($conf);
return unless $prefix; return unless $prefix;
$said->{nosuggest} = 1; $said->{nosuggest} = 1;

View file

@ -22,11 +22,12 @@ sub dbh {
return $self->{$env . "dbh"}; return $self->{$env . "dbh"};
} }
if ($env =~ /^www|dev$/) { my $dbnames = {
$self->{$env . "dbh"} = DBI->connect( "dbi:SQLite:dbname=/var/www/domains/perl.bot/".$env."/pastes.db", "", "", { PrintError => 0, RaiseError => 1 } ); www => "perlbot_pastes",
} elsif ($env eq 'asn') { dev => "perlbot_pastes_dev",
$self->{$env . "dbh"} = DBI->connect( "dbi:SQLite:dbname=var/asn.db", "", "", { PrintError => 0, RaiseError => 1 } ); };
}
$self->{$env . "dbh"} = DBI->connect( "dbi:Pg:dbname=".$dbnames->{$env}, "perlbot_pastebin", "ignored", { PrintError => 2, RaiseError => 1 } );
return $self->{$env."dbh"}; return $self->{$env."dbh"};
} }
@ -35,7 +36,6 @@ sub postload {
delete $self->{wwwdbh}; # UGLY HAX GO. delete $self->{wwwdbh}; # UGLY HAX GO.
delete $self->{devdbh}; delete $self->{devdbh};
delete $self->{asndbh};
# Basically we delete the dbh we cached so we don't fork # Basically we delete the dbh we cached so we don't fork
# with one active # with one active
} }
@ -43,13 +43,13 @@ sub postload {
sub add_ban_word { sub add_ban_word {
my ($self, $env, $who, $where, $word) = @_; my ($self, $env, $who, $where, $word) = @_;
$self->dbh($env)->do("INSERT INTO banned_words (word, who, 'where') VALUES (?, ?, ?)", {}, $word, $who, $where); $self->dbh($env)->do(q{INSERT INTO banned_words (word, who, "where") VALUES (?, ?, ?)}, {}, $word, $who, $where);
} }
sub get_ip_for_paste { sub get_ip_for_paste {
my ($self, $env, $id) = @_; my ($self, $env, $id) = @_;
my ($ip) = @{$self->dbh($env)->selectrow_arrayref("SELECT ip FROM posts p JOIN slugs s ON s.post_id = p.id WHERE s.slug = ? or p.id = ?", {}, $id, $id) || ['0.0.0.0']}; my ($ip) = @{$self->dbh($env)->selectrow_arrayref("SELECT ip FROM posts p JOIN slugs s ON s.post_id = p.id WHERE s.slug = ?", {}, $id) || ['0.0.0.0']};
return sprintf("%03d.%03d.%03d.%03d", split(/\./,$ip)); return sprintf("%03d.%03d.%03d.%03d", split(/\./,$ip));
} }
@ -59,7 +59,7 @@ sub get_asn_for_paste {
my $ip = $self->get_ip_for_paste($env, $id); my $ip = $self->get_ip_for_paste($env, $id);
my ($asn) = @{$self->dbh('asn')->selectrow_arrayref("SELECT asn FROM asn WHERE ? >= start AND ? <= end", {}, $ip, $ip) || []}[0]; my ($asn) = @{$self->dbh('www')->selectrow_arrayref('SELECT asn FROM asn WHERE ? >= start AND ? <= "end"', {}, $ip, $ip) || []}[0];
return $asn; return $asn;
} }
@ -69,7 +69,7 @@ sub ban_user_paste {
my $ip = $self->get_ip_for_paste($env, $id); my $ip = $self->get_ip_for_paste($env, $id);
if ($ip) { if ($ip) {
$self->dbh($env)->do("INSERT INTO banned_ips (ip, who, 'where') VALUES (?, ?, ?);", {}, $ip, $who, $where); $self->dbh($env)->do(q{INSERT INTO banned_ips (ip, who, "where") VALUES (?, ?, ?);}, {}, $ip, $who, $where);
return "USER WAS BANNED FOR THIS POST"; return "USER WAS BANNED FOR THIS POST";
} else { } else {
return "Failed to find IP for paste in db"; return "Failed to find IP for paste in db";
@ -83,7 +83,7 @@ sub ban_asn_paste {
my $asn = $self->get_asn_for_paste($env, $id); my $asn = $self->get_asn_for_paste($env, $id);
if ($asn) { if ($asn) {
$self->dbh($env)->do("INSERT INTO banned_asns (asn, who, 'where') VALUES (?, ?, ?);", {}, $asn, $who, $where); $self->dbh($env)->do(q{INSERT INTO banned_asns (asn, who, "where") VALUES (?, ?, ?);}, {}, $asn, $who, $where);
return "ISP WAS BANNED FOR THIS POST"; return "ISP WAS BANNED FOR THIS POST";
} else { } else {
return "Failed to find ISP for paste in db. yell at simcop2387; ".encrypt("[$id][$ip][$asn]"); return "Failed to find ISP for paste in db. yell at simcop2387; ".encrypt("[$id][$ip][$asn]");

View file

@ -171,6 +171,11 @@ sub command {
$type = "perl6" $type = "perl6"
} }
# we were addressed, but not nested, in #perl6. Switch to perl6, otherwise use perl5
if ($said->{channel} eq "#pdl" && !$said->{nested} && $orig_type =~ /^[ws]*$/) {
$type = "perl5.34"
}
if ($command eq 'r' && (!$said->{addressed} && !$said->{nested} && ($said->{channel} ne "#perl6" && $said->{channel} eq '#raku'))) { if ($command eq 'r' && (!$said->{addressed} && !$said->{nested} && ($said->{channel} ne "#perl6" && $said->{channel} eq '#raku'))) {
return ("handled", ""); return ("handled", "");
} }
@ -264,7 +269,7 @@ sub command {
"Columbus Day" => {prob => 0.00, chars => []}, "Columbus Day" => {prob => 0.00, chars => []},
"Confederate Memorial Day" => {prob => 0.00, chars => []}, "Confederate Memorial Day" => {prob => 0.00, chars => []},
"Earth Day" => {prob => 0.50, chars => ["\x{1F30E}", "\x{1F30D}", "\x{1F30F}"]}, "Earth Day" => {prob => 0.50, chars => ["\x{1F30E}", "\x{1F30D}", "\x{1F30F}"]},
"Election Day" => {prob => 1.00, chars => ["\x{1F5F3}"]}, "Election Day" => {prob => 1.00, chars => ["\x{1F5F3}\x{FE0F}"]},
"Emancipation Day" => {prob => 0.00, chars => []}, "Emancipation Day" => {prob => 0.00, chars => []},
"Fathers Day" => {prob => 0.00, chars => []}, "Fathers Day" => {prob => 0.00, chars => []},
"Flag Day" => {prob => 0.00, chars => []}, # TODO all country flags "Flag Day" => {prob => 0.00, chars => []}, # TODO all country flags

View file

@ -1,23 +1,30 @@
use strict; use strict;
use warnings; use warnings;
#use Bing::Translate; use LWP::UserAgent;
use JSON::MaybeXS qw/decode_json encode_json/;
use Data::Dumper;
my $ua = LWP::UserAgent->new();
return sub { return sub {
my( $said ) = @_; my( $said ) = @_;
open(my $fh, "<etc/bing_secret.txt") or die "Couldn't read $!";
my $cid = "Perlbot";
my $secret = <$fh>;
chomp $secret;
close($fh);
my $tro = Bing::Translate->new($cid, $secret);
if ($said->{body} =~ /^\s*(?<from>\S+)\s+(?<to>\S+)\s+(?<text>.*)$/) { if ($said->{body} =~ /^\s*(?<from>\S+)\s+(?<to>\S+)\s+(?<text>.*)$/) {
# print $secret; my $json = {
print $tro->translate($+{text}, $+{from}, $+{to}); source_language => $+{from},
target_language => $+{to},
text => $+{text}
};
my $resp = $ua->post("http://192.168.1.229:10000/translate_text", Content => encode_json($json));
my $cont = $resp->decoded_content();
my $output = decode_json($cont);
print Dumper $output;
} else { } else {
print "help text"; print "help text";
} }