1use strict; 2use vars qw($VERSION %IRSSI); 3 4use Irssi 20020120; 5$VERSION = "0.03"; 6%IRSSI = ( 7 authors => "c0ffee", 8 contact => "c0ffee\@penguin-breeder.org", 9 name => "mIRC pager", 10 description => "Adds the /PAGE command to page a nick (use /page nick <text>)... to ignore pages /set pager_mode off", 11 license => "Public Domain", 12 url => "http://www.penguin-breeder.org/?page=irssi", 13 changed => "2017-03-12", 14); 15 16use Irssi::Irc; 17 18Irssi::theme_register(['page_received','-({channick_hilight $0})- $1', 19 'page_sending','Paging {nick $0}...', 20 'page_pageroff','Page request ignored: {nick $0}\'s pager is {hilight OFF}', 21 'page_pagersilent','Page request to {nick $0} dispatched silently', 22 'page_pageron','Page request to {nick $0} dispatched']); 23 24sub signal_ctcpmsg_reply { 25 my ($server, $data, $nick, $addr, $target) = @_; 26 27 if ($data eq "0") { 28 29 Irssi::printformat(MSGLEVEL_CRAP,'page_pageroff',$nick); 30 31 } elsif ($data eq "1") { 32 33 Irssi::printformat(MSGLEVEL_CRAP,'page_pagersilent',$nick); 34 35 } elsif ($data eq "2") { 36 37 Irssi::printformat(MSGLEVEL_CRAP,'page_pageron',$nick); 38 39 } 40 41 Irssi::signal_stop(); 42} 43 44sub signal_ctcpmsg { 45 my ($server, $data, $nick, $addr, $target) = @_; 46 my $pm = Irssi::settings_get_bool('pager_mode'); 47 my $cmd = Irssi::settings_get_str('pager_cmd'); 48 my $answer = 0; 49 my $rnd = int(rand(65535)); 50 51 if ($pm) { 52 $data = "requesting your attention" if ($data eq ""); 53 Irssi::printformat(MSGLEVEL_CTCPS, 'page_received',$nick,$data); 54 $answer = 1; 55 56 $nick =~ s/\\/\\\\/g; 57 $nick =~ s/\$/\\\$/g; 58 $nick =~ s/;/\\;/g; 59 60 $data =~ s/\\/\\\\/g; 61 $data =~ s/\$/\\\$/g; 62 $data =~ s/;/\\;/g; 63 64 if ($cmd ne "") { 65 66 $answer = 2; 67 $cmd =~ s/\$r/$rnd/g; 68 $cmd =~ s/\$n/$nick/g; 69 $cmd =~ s/\$i/$server->{chatnet}/g; 70 $cmd =~ s/\$s/$server->{address}/g; 71 $cmd =~ s/\$t/scalar localtime/eg; 72 $cmd =~ s/\$m/$data/g; 73 74 Irssi::command("$cmd"); 75 76 } 77 } 78 79 $server->send_raw("NOTICE $nick :\001PAGE $answer\001"); 80 81 Irssi::signal_stop(); 82} 83 84sub cmd_page { 85 my ($data, $server, $channel) = @_; 86 my ($nick, $what); 87 88 $nick = $data; 89 $nick =~ s/\s(.+)//; 90 $what = $1; 91 $what = " $what" if ($what ne ""); 92 93 $server->send_raw("PRIVMSG $nick :\001PAGE$what\001"); 94 Irssi::printformat(MSGLEVEL_CRAP,'page_sending', $nick); 95 96} 97 98Irssi::signal_add('ctcp msg page', 'signal_ctcpmsg'); 99Irssi::signal_add('ctcp reply page', 'signal_ctcpmsg_reply'); 100Irssi::command_bind('page','cmd_page'); 101Irssi::settings_add_bool('misc','pager_mode',1); 102Irssi::settings_add_str('misc', 'pager_cmd', ""); 103# ok, here for the pager_cmd syntax: 104# "command [parameters]+" 105# where the following things will be replaced: 106# $n the nick who paged you 107# $m the message 108# $t timestamp (format depends on locale) 109# $i ircnet 110# $s server 111# $r a random number 112# 113# for example: 114# /set pager_cmd exec - play /usr/share/sounds/generic.wav 115# /set pager_cmd beep 116# /set pager_cmd eval exec -nosh -name wish$r wish - ; exec -in wish$r wm withdraw . ; exec -in wish$r tk_messageBox -message "$m" -icon info -type ok -title "$n paging..." ; exec -in wish$r destroy . 117