chiark / gitweb /
ubuntu-paste: convert to python3/argparse/requests
[bin.git] / irccat
1 #! /usr/bin/perl -w
2 use strict;
3
4 use Getopt::Long;
5 use Net::IRC;
6
7 sub usage ()
8 {
9         print <<"EOF";
10 Usage: $0 [options] command [arguments]
11 EOF
12         print <<'EOF';
13
14 Options are as follows, with defaults in brackets:
15
16   -n, --nick=[$IRCNICK]         IRC nickname.
17   -s, --server=[$IRCSERVER]     IRC server.
18
19 Available commands (with arguments) are:
20
21   who #channel                  List the visible users on a channel.
22   whois username ...            Query information about particular users.
23   list                          List channels.
24
25 EOF
26         exit 1;
27 }
28
29 my %options = (
30     nick    => $ENV{IRCNICK},
31     server  => $ENV{IRCSERVER},
32 );
33
34 GetOptions(\%options,
35     'help|h|?',
36     'nick|n=s',
37     'server|s=s',
38 );
39
40 usage if $options{help};
41 unless (defined $options{nick}) {
42     print STDERR "No nickname set; use --nick or IRCNICK.\n\n";
43     usage;
44 }
45 unless (defined $options{server}) {
46     print STDERR "No server set; use --server or IRCSERVER.\n\n";
47     usage;
48 }
49
50 my $command = shift or usage;
51 $command = lc $command;
52
53 my $irc = new Net::IRC;
54
55 # TODO
56 my $conn = $irc->newconn(Nick => $options{nick}, Server => $options{server})
57         or die "$0: can't connect to IRC server";
58
59 if ($command eq 'who')
60 {
61     scalar @ARGV == 1 or usage;
62     $conn->add_handler('376', sub {
63         my $self = shift;
64         $self->who($ARGV[1]);
65     });
66 }
67 elsif ($command eq 'whois')
68 {
69     scalar @ARGV > 0 or usage;
70 }
71 elsif ($command eq 'list')
72 {
73     scalar @ARGV == 0 or usage;
74     $conn->add_handler('376', sub {
75         my $self = shift;
76         $self->list('-yes');
77     });
78 }
79 else
80 {
81     usage;
82 }
83
84 sub on_whoreply
85 {
86         my ($self, $event) = @_;
87         my ($me, $channel, $user, $host,
88                 $server, $nick, $status, $realname) = $event->args;
89         printf "\%-12s  \%s\n", $nick, $realname;
90 }
91
92 sub on_endofwho
93 {
94         my $self = shift;
95         $self->quit;
96         exit;
97 }
98
99 sub on_list
100 {
101     my ($self, $event) = @_;
102     print $event->args, "\n";
103 }
104
105 $conn->add_handler('352', \&on_whoreply);
106 $conn->add_handler('315', \&on_endofwho);
107 $conn->add_handler('322', \&on_list);
108
109 $irc->start;