1use Irssi; 2use Irssi::Irc; 3use strict; 4 5use vars qw($VERSION %IRSSI); 6$VERSION = "1.0"; 7%IRSSI = ( 8 authors => "Maciek \'fahren\' Freudenheim, David Leadbeater", 9 contact => "fahren\@bochnia.pl", 10 name => "Server Ping", 11 description => "/SPING [server] - checks latency between current server and [server]", 12 license => "GNU GPLv2 or later", 13 changed => "Sun 15 Jun 18:56:52 BST 2014", 14); 15 16# us. /SPING [server] 17 18use Time::HiRes qw(gettimeofday); 19 20my %askping; 21 22sub cmd_sping { 23 my ($target, $server, $winit) = @_; 24 25 $target = $server->{address} unless $target; 26 $askping{$target} = gettimeofday(); 27 # using nickname rather than server seems to work better here 28 $server->send_raw("PING $server->{nick} $target"); 29} 30 31sub event_pong { 32 my ($server, $args, $sname) = @_; 33 return unless exists $askping{$sname}; 34 35 Irssi::signal_stop(); 36 Irssi::print(">> $sname latency: " . sprintf("%0.3f",gettimeofday() - $askping{$sname}) . "s"); 37 delete $askping{$sname}; 38} 39 40Irssi::signal_add("event pong", "event_pong"); 41Irssi::command_bind("sping", "cmd_sping"); 42