Changeset 7548

Show
Ignore:
Timestamp:
03/06/08 13:49:52 (5 years ago)
Author:
typester
Message:

グループチャットに一応対応

Location:
lang/perl/Skype4IRC/trunk/lib/Skype4IRC
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Skype4IRC/trunk/lib/Skype4IRC/IRCD.pm

    r2095 r7548  
    1515        object_states => [ 
    1616            $self => { 
    17                 map( { $_ => "poe_$_" } qw/_start _default update_contact privmsg/ ), 
     17                map( { $_ => "poe_$_" } qw/_start _default update_contact privmsg groupmsg/ ), 
    1818            }, 
    19             $self => [qw/ircd_daemon_nick ircd_daemon_privmsg/], 
     19            $self => [qw/ircd_daemon_nick ircd_daemon_privmsg ircd_daemon_public/], 
    2020        ], 
    2121    ); 
     
    5555} 
    5656 
     57sub poe_groupmsg { 
     58    my ($self, $kernel, $nick, $data) = @_[OBJECT, KERNEL, ARG0, ARG1]; 
     59 
     60    $self->ircd->_daemon_cmd_join( $self->{nick}, $data->{channel} ); 
     61    for my $member (@{ $data->{members} }) { 
     62        next if $member eq $self->{nick}; 
     63 
     64        $kernel->call( update_contact => [[$member, $member]] ); 
     65        $self->ircd->yield( daemon_cmd_join => $member => $data->{channel} ); 
     66    } 
     67 
     68    $self->ircd->yield( daemon_cmd_privmsg => $nick => $data->{channel} => $data->{message} ); 
     69} 
     70 
    5771sub ircd_daemon_privmsg { 
    5872    my ($self, $kernel, $who, $target, $what) = @_[OBJECT, KERNEL, ARG0..ARG2]; 
     
    6074    my $message = decode('utf-8', $what); 
    6175    $kernel->post( skype => send_message => $target => $message ); 
     76} 
     77 
     78sub ircd_daemon_public { 
     79    my ($self, $kernel, $who, $channel, $what) = @_[OBJECT, KERNEL, ARG0..$#_]; 
     80 
     81    my $message = decode('utf-8', $what); 
     82    $kernel->post( skype => send_group_message => $channel => $message ); 
    6283} 
    6384 
  • lang/perl/Skype4IRC/trunk/lib/Skype4IRC/SkypeBridge.pm

    r7547 r7548  
    2424        object_states => [ 
    2525            $self => { 
    26                 map { $_ => "poe_$_" } qw/_start attach send_message/ 
     26                map { $_ => "poe_$_" } qw/_start attach send_message send_group_message/ 
    2727            }, 
    2828        ], 
     
    5252 
    5353    $self->skype->SendMessage($target, encode('cp932', $message)); 
     54} 
     55 
     56sub poe_send_group_message { 
     57    my ($self, $kernel, $channel, $message) = @_[OBJECT, KERNEL, ARG0, ARG1]; 
     58 
     59    my $target; 
     60    forEach { $target = $_ if $channel eq $_->Name } $self->skype->Chats; 
     61    return unless $target; 
     62 
     63    $target->SendMessage( encode('cp932', $message) ); 
    5464} 
    5565 
     
    90100        warn $message->FromHandle . ' said: ' . $message->Body; 
    91101 
    92         if ($message->Chat->Type == 0) { # 1:1 
     102        my $chat_type = $message->Chat->Type; 
     103        if ($chat_type == 0) { # 1:1 
    93104            $kernel->post( ircd => privmsg => $message->FromHandle => decode('cp932', $message->Body) ); 
    94105        } 
    95         else { 
    96             # TODO: group chat 
     106        elsif ($chat_type == 3) { # group chat 
     107            my @members; 
     108            forEach { push @members, $_->Handle } $message->Chat->Members; 
     109 
     110            $kernel->post( ircd => groupmsg => $message->FromHandle, { 
     111                members => \@members, 
     112                message => decode('cp932', $message->Body), 
     113                channel => decode('cp932', $message->Chat->Name), 
     114                topic   => decode('cp932', $message->Chat->Topic || $message->Chat->FriendlyName), 
     115            } ); 
    97116        } 
    98117    }