aanoaa / p5-hubot

hubot perl port
15 stars 3 forks source link

About Extend Userip.. #43

Closed newbcode closed 10 years ago

newbcode commented 10 years ago

IRC 접속자들의 IP를 확장합니다.

IRC의 접속자들의 IP를 받아서 만들수 있는 여러가 봇들을 생각하고 있습니다. 그렇지만 현재는 IP를 저장하지 못해서 아래 방법을 생각해 봤습니다.

lib/Hubot/Adapter/Irc.pm의 sub parse_msg에서 아래와 같이 userip를 따로 변수화 하였습니다.

sub parse_msg {
    my ( $self, $irc_msg ) = @_;

    my ($nickname) = $irc_msg->{prefix} =~ m/^([^!]+)/;
    my ($userip) = $irc_msg->{prefix} =~ /\b((?:[0-9]{1,3}\.){3}[0-9]{1,3})\b/;
    my $message = decode_utf8( $irc_msg->{params}[1] );
    return ( $nickname, $message, $userip );
}

저기서 만들어진 $userip는 실제로 "(~newbcode@7.7.7.7): newbcode" 접속 메세지에서 Ip만을 가져와서 저장합니다.

그다음은 객체를 확장하여(말씀하신대로) $msg->message->userip->{ip}와 같이 사용해야 합니다. 하지만 현재 Hubot::*Message에 확장이 되지않아 사용이 어렵습니다. 이에 Message에 확장할수 있는 방법이 필요 합니다.

aanoaa commented 10 years ago

IRC adapter 의 parse_msg 에서 $irc_msg->{prefix}hshong!~user@myrouter.local 또는 hshong!~user@182.221.131.176 입니다.

$msg->message->userip->{ip} 에 오타가 잇네요. $msg->message->user->{ip} 가 의도하신 것 같습니다.

사용자를 만들때 혹은 만들고 나서 추가로 ipaddr|ip 를 key 로 해서 넣어두면 재활용 할 수 잇겠습니다.

하지만 반드시 ip 데이터가 잇다고 보장할 수 없으므로, 확장 스크립트에서는 유무를 확인한뒤에 사용해야 오류를 줄일 수 있겠습니다.