sub remove {
my ($me, $post_id) = @_;
- my $uri = $me->{fbo}->query->find($post_id)->uri_as_string;
+ my $uri = $me->{fbo}->query->find($me->{cfg}->{fb_page_id}.'_'.$post_id)->uri_as_string;
my $req = HTTP::Request::Common::DELETE($uri);
warn Dumper($req) if ($me->{cfg}->{debug});
my $resp;
}
1;
-package Mubot4FB;
+package Mubot4FB::FB;
use strict;
use utf8;
-use base 'Bot::BasicBot';
use DBI qw/:sql_types/;
-use POSIX 'strftime';
use Data::Dumper;
-my $mu_re = qr/^([^\s]+)\s+((?:https?|ftps?):\/\/[^\s]+)\s+(.+)$/i;
-my $irc_type = 1;
-
-sub db_init {
- my ($me) = @_;
- $me->{dbh} = DBI->connect('DBI:mysql:'.$me->{cfg}->{database}, $me->{cfg}->{db_user}, $me->{cfg}->{db_pass},{mysql_enable_utf8 => 1}) || die $DBI::errstr;
-}
-
-sub misc_init {
- my ($me) = @_;
+sub new {
+ my $proto = shift;
+ my $class = ref $proto || $proto;
+ my $self = {cfg => shift};
+ bless $self, $class;
- $me->{last_search} = {};
+ $self->init();
+ return $self;
}
sub init {
my ($me) = @_;
- $me->{fb} = Mubot4FB::FB->new($me->{cfg});
- $me->db_init();
+ return $me->{dbh} = DBI->connect('DBI:mysql:'.$me->{cfg}->{database}, $me->{cfg}->{db_user}, $me->{cfg}->{db_pass},{mysql_enable_utf8 => 1}) || die $DBI::errstr;
}
-sub _db_check_dup {
+sub check_dup {
my ($me, $db_args) = @_;
my $sth = $me->{dbh}->prepare('select * from posts where uri = ? order by post_time desc limit 1');
my $rv = $sth->execute($db_args->{uri});
return $ret;
}
-sub _db_insert {
+sub add {
my ($me, $db_args) = @_;
my ($scheme, $path) = split(/:\/\//, $db_args->{uri});
return $rv;
}
-sub _db_delete {
+sub remove {
my ($me, $db_args) = @_;
$db_args->{submitter_type} ||= 1;
return $ret;
}
-sub _db_search {
+sub search_by_word {
my ($me, $db_args) = @_;
my $column = $db_args->{word} =~ /:\/\// ? 'uri' : 'path';
return $ret;
}
-sub _db_search_lastpost {
+sub search_lastpost_by_submitter {
my ($me, $db_args) = @_;
my $sth = $me->{dbh}->prepare('select * from posts where submitter = ? order by post_time desc limit 1');
return $ret;
}
+1;
+package Mubot4FB;
+
+use strict;
+use utf8;
+
+use base 'Bot::BasicBot';
+use DBI qw/:sql_types/;
+use POSIX 'strftime';
+
+use Data::Dumper;
+
+my $mu_re = qr/^([^\s]+)\s+((?:https?|ftps?):\/\/[^\s]+)\s+(.+)$/i;
+my $irc_type = 1;
+
+sub misc_init {
+ my ($me) = @_;
+
+ $me->{last_search} = {};
+}
+
+sub init {
+ my ($me) = @_;
+ $me->{fb} = Mubot4FB::FB->new($me->{cfg});
+ $me->{db} = Mubot4FB::DB->new($me->{cfg});
+}
+
sub _format_submit {
my ($me, $e) = @_;
my $comment = $3;
my $text = $args->{who} . '曰く、'.$prefix.' '.$comment;
- if (my $res = $me->_db_check_dup({uri =>$uri})) {
+ if (my $res = $me->{db}->check_dup({uri =>$uri})) {
if ($res->{post_time} < time() - 7 * 24 * 60 * 60) {
$resp_msg = 'だいぶ前 '.$me->_format_submit($res).'にいってたにゃー '.$me->{fb}->post_uri($res->{fb_post_id});
} else {
my $post_ok = 1;
eval{$resp = $me->{fb}->publish($text, $uri)};
if ($@) {
- $me->fb_init();
+ $me->{fb}->init();
eval{$resp = $me->{fb}->publish($text, $uri)};
$post_ok = 0 if ($@);
}
if ($post_ok) {
my (undef, $post_id) = split(/_/, $resp->{id});
- $me->_db_insert({submitter => $args->{who},
- fb_post_id => $post_id,
- uri => $uri,
- prefix => $prefix,
- comment => $comment});
+ $me->{db}->add({submitter => $args->{who},
+ fb_post_id => $post_id,
+ uri => $uri,
+ prefix => $prefix,
+ comment => $comment});
$resp_msg = $args->{who} . ': うい '.$me->{fb}->post_uri($post_id).' で登録';
} else {
$resp_msg = 'can not post to facebook';
return 0;
}
-sub _delete_prev {
+sub _remove_prev {
my ($me, $args) = @_;
- my $last_post = $me->_db_search_lastpost({who => $args->{who}});
+ my $last_post = $me->{db}->search_lastpost_by_submitter({who => $args->{who}});
if (!defined $last_post) {
return $args->{who}.': いまのっていつの? というか ないし';
} elsif ($last_post->{post_time} < time() - 3600) {
return $args->{who}.': いまのっていつの? 最後のはこれだけど古いんだにゃ ' . $me->{fb}->post_uri($last_post->{fb_post_id});
} else {
- return $me->_delete($args, $last_post->{'fb_post_id'});
+ return $me->_remove($args, $last_post->{'fb_post_id'});
}
}
-sub _delete {
+sub _remove {
my ($me, $args, $post_id) =@_;
my ($resp_msg, $resp);
$me->{dbh}->begin_work;
- if ($resp = $me->_db_delete({fb_post_id => $post_id, submitter => $args->{who}})) {
+ if ($resp = $me->{db}->remove({fb_post_id => $post_id, submitter => $args->{who}})) {
# fb 側のエントリを削除しないといけない
if ($me->{fb}->remove($post_id)) {
$me->{dbh}->commit;
if ($args->{body} =~ /^ふみくん\s+(.+)\?\s*$/) {
$me->{last_search}->{$args->{who}} = undef;
- $me->{last_search}->{$args->{who}} = $me->_db_search({word => $1});
+ $me->{last_search}->{$args->{who}} = $me->{db}->search_by_word({word => $1});
return $me->_search_next($args);
}
}
} elsif ($args->{body} =~ /^ふみくん\s+(.+)\s*$/) {
my $cmd = $1;
if ($cmd eq 'いまのなし') {
- $resp_msg = $me->_delete_prev($args);
+ $resp_msg = $me->_remove_prev($args);
} elsif ($cmd =~ /削除\s+(?:$me->{cfg}->{fb_page_url}posts\/)?([0-9]+)$/) {
- $resp_msg = $me->_delete($args, $1);
+ $resp_msg = $me->_remove($args, $1);
} elsif ($cmd =~ /\?$/) {
$resp_msg = $me->_search_start($args);
} elsif ($cmd =~ /つぎ/) {