OSDN Git Service

delete -> remove
[mubot4fb/mubot4fb.git] / mubot4fb.pl
index 87528b2..d0e95c4 100755 (executable)
@@ -80,38 +80,31 @@ sub remove {
 }
 
 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});
@@ -121,7 +114,7 @@ sub _db_check_dup {
        return $ret;
 }
 
-sub _db_insert {
+sub add {
        my ($me, $db_args) = @_;
 
        my ($scheme, $path) = split(/:\/\//, $db_args->{uri});
@@ -140,7 +133,7 @@ sub _db_insert {
        return $rv;
 }
 
-sub _db_delete {
+sub remove {
        my ($me, $db_args) = @_;
        $db_args->{submitter_type} ||= 1;
 
@@ -157,7 +150,7 @@ sub _db_delete {
        return $ret;
 }
 
-sub _db_search {
+sub search_by_word {
        my ($me, $db_args) = @_;
 
        my $column = $db_args->{word} =~ /:\/\// ? 'uri' : 'path';
@@ -174,7 +167,7 @@ sub _db_search {
        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');
@@ -187,6 +180,33 @@ sub _db_search_lastpost {
        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) = @_;
 
@@ -210,7 +230,7 @@ sub _add {
                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 {
@@ -220,18 +240,18 @@ sub _add {
                        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';
@@ -242,26 +262,26 @@ sub _add {
        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;
@@ -282,7 +302,7 @@ sub _search_start {
 
        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);
        }
 }
@@ -316,9 +336,9 @@ sub said {
        } 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 =~ /つぎ/) {