File: sping.pl

package info (click to toggle)
irssi-scripts 20201016
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 4,068 kB
  • sloc: perl: 71,842; sh: 193; makefile: 6
file content (41 lines) | stat: -rw-r--r-- 1,139 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use Irssi;
use Irssi::Irc;
use strict;

use vars qw($VERSION %IRSSI);
$VERSION = "1.0";
%IRSSI = (
        authors         => "Maciek \'fahren\' Freudenheim, David Leadbeater",
        contact         => "fahren\@bochnia.pl",
        name            => "Server Ping",
        description     => "/SPING [server] - checks latency between current server and [server]",
        license         => "GNU GPLv2 or later",
        changed         => "Sun 15 Jun 18:56:52 BST 2014",
);

# us. /SPING [server]

use Time::HiRes qw(gettimeofday);

my %askping;

sub cmd_sping {
	my ($target, $server, $winit) = @_;

	$target = $server->{address} unless $target;
	$askping{$target} = gettimeofday();
	# using nickname rather than server seems to work better here
	$server->send_raw("PING $server->{nick} $target");
}

sub event_pong {
	my ($server, $args, $sname) = @_;
	return unless exists $askping{$sname};

	Irssi::signal_stop();
	Irssi::print(">> $sname latency: " .  sprintf("%0.3f",gettimeofday() - $askping{$sname}) . "s");
	delete $askping{$sname};
}

Irssi::signal_add("event pong", "event_pong");
Irssi::command_bind("sping", "cmd_sping");