はてなの場所

question:1206690838

いささか現実的ではありませんね。新しいオフィスの住所はまだ公開されていませんが、社長がべらべらと情報を公開しているのでビルが特定されるのも時間の問題でしょう。

↓ここのセブンイレブンのビルでしょ?(ぉ

大きな地図で見る

共有サーバにPlagger入れてみた。

入れ方は(略

なぜなら、入れたところでメモリが足らなくてエラーになるから

Out of memory during "large" request for 2101248 bytes, total sbrk() is 530610176 bytes at /home/XXXX/local/lib/perl5/Plagger/Thing.pm line 24.

そりゃあ共有サーバですもんね。

Net::MSN

Plagger (野良?)プラグインのソースを参考に msn メッセンジャーへ接続する bot プログラムを作成しました。
うしくんのメッセンジャー復活しました。( yomiusi あっと underdone.net です)
ウェブメッセンジャーから話しかけても応答が返ってくるのを確認しました。

use strict;
use warnings;

use Net::MSN;

## MODIFY THESE FOR YOUR BOT ##
my $email = 'ボットのメールアドレス';
my $password = 'ボットのパスワード';

# patch for Net::MSN
BEGIN {
    my $process_event = Net::MSN->can('process_event');
    undef *Net::MSN::process_event;
    *Net::MSN::process_event = sub {
        my ( $self, $this_self, $line, $fh ) = @_;
        print {*STDERR} ( substr $line, 0, 60 ) . "\n";

        my ( $cmd, @data ) = split /\s/msx, $line;

        if ( !$cmd ) {
            return;
        }

        if ( $cmd eq 'LST' ) {
            $self->buddyupdate( $data[0], $data[1], 'NLN' );
            return 1;
        }
        elsif ( $cmd eq 'QNG' ) {
            if ( $self->if_callback_exists('_on_QNG') ) {
                &{ $self->{Callback}->{_on_QNG} };
            }
        }
        goto &{$process_event};
    };
    return;
}

sub onmsg
{
    my ( $sb, $chandle, $friendly, $message ) = @_;

    # $chandle がメッセージを送った人のアカウント
    # $friendly がメッセージを送った人のニックネーム
    # $message がメッセージ内容
    $sb->sendmsg( "返事の内容" );
}

sub start
{
    my $is_alive = 1;
    my $is_join  = 0;

    local $SIG{INT} = local $SIG{HUP} = local $SIG{QUIT} = local $SIG{TERM} =
      sub { $is_alive = 0 };
    my $msn = Net::MSN->new;
    $msn->set_event(
        _on_QNG => sub {
            if ( $msn->is_buddy_online( $email ) ) {
                $msn->call( $email );
            }

        },
        on_message => sub {
            my ( $sb, $chandle, $friendly, $message ) = @_;
            onmsg( $sb, $chandle, $friendly, $message );
        },
        on_join => sub {
            $is_join = 1;
        },
        on_bye => sub {
            $is_alive = 0;
        },
    );
    $msn->connect( $email, $password )
      or $is_alive = 0;

    my $timeout  = 60;
    my $interval = 3;

    my $t = time;
    while (1) {
        last if !$is_alive;

        $msn->check_event;
    }
    $msn->disconnect;
    return;
}

start();