2011-10-23 7 views
2

이 작업을 Irssi Perl 스크립트로 설정해야합니다. 내 채널이있어서 특정 시나리오에서 해당 채널에 직접 msg를 보내려고합니다.Perl Irssi 스크립팅 : msg를 특정 채널로 보내는 방법은 무엇입니까?

Perl에 대한 경험이 상당히 제한되어 있으므로이 문서가 없습니다. Irssi Perl 스크립팅에서 다른 chatnets 및 채널을 관리하는 방법을 혼동합니다. 그래서 예를 들어 채널 #[email protected]에 대한 메시지를 어떻게 보낼 수 있습니까?

시험 하나

server->command("^MSG $info{'#testchan'} $info{'Test message.'}"); 

시험이 (tuto about scripting) : 여기

sub away_describe_pub_channels { 
    my($net, $channel) = @_; 
    my ($text) = @_; 
    my $c = Irssi::server_find_chatnet("QuakeNet")->channel_find("testchan"); 
    $c->command("DESCRIBE $channel $text") 
} 
+0

@ user1009108 : 퀘스트 수정 ion을 사용하여 코드를 추가하고 작동하지 않는 것을 정확히 설명합니다. 포맷팅을 위해 코드 블록을 사용하십시오 (모든 코드를 선택하고 편집기의'{} '버튼을 누르십시오) – Mat

답변

1

는 예 봇 :

#==========================BEGINNING OF PARMS====================================== 
#name of the channels where this feature will be used 
my @channels = ("foo","bar"); 

#the public commands 
#help 
my $cmd_help = '!help'; 

#new ticket 
my $cmd_newticket = "!stack"; 
my %url_newticket = ('foo'=>{url=>"http://stackoverflow.com/questions/ask"}, 
        'bar'=>{url=>"http://https://github.com/repo/project/issues/new"} 


sub bootstrap { 
    my ($server, $msg, $nick, $address, $target) = @_; 
    #lowercase of the channel name in case this one will be registered in camelCase ;) 
    $target = lc $target; 

    foreach my $channel (@channels) { 
     if ($target eq "#".$channel) { 
      #split the line first peace the command second the rest 
      my ($cmd,$line) = split//,$msg,2; 
      if ($cmd =~ $cmd_help) { 
       $server->command("MSG ". $nick ." Here are the available commands : !stack"); 
      } elsif ($cmd eq $cmd_newticket) { 
       my $h = $url_newticket{$channel}; 
       $server->command("MSG $target submit an issue/a ticket $h->{'url'}"); 
      } 
     } 
    } 
} 

#let's add the sub as a signal and let's play 
Irssi::signal_add_last('message public', 'bootstrap'); 

희망이

을 도울 수에 사용됩니다