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