source: perl/modules/IRC/lib/BarnOwl/Module/IRC/Completion.pm @ dace02a

release-1.8release-1.9
Last change on this file since dace02a was dace02a, checked in by Nelson Elhage <nelhage@mit.edu>, 10 years ago
Use AnyEvent::IRC::Client's channel tracking, instead our own.
  • Property mode set to 100644
File size: 2.8 KB
Line 
1use strict;
2use warnings;
3
4package BarnOwl::Module::IRC::Completion;
5
6use BarnOwl::Completion::Util qw(complete_flags);
7
8our %users = ();
9our %servers = ();
10
11sub complete_networks { keys %BarnOwl::Module::IRC::ircnets }
12sub complete_dests    { keys %users, complete_channels() }
13sub complete_channels {
14    my %channels;
15    for my $conn (values %BarnOwl::Module::IRC::ircnets) {
16        for my $chan (keys %{$conn->conn->{channel_list}}) {
17            $channels{$chan} = 1;
18        }
19    }
20    return keys %channels;
21}
22sub complete_nicks    { keys %users }
23sub complete_servers  { keys %servers }
24
25sub complete_irc_connect {
26    my $ctx = shift;
27    return complete_flags($ctx,
28        [qw(-s)],
29        {
30            "-a" => \&complete_networks,
31            "-p" => sub {},
32            "-n" => sub {},
33        },
34        \&complete_servers
35       );
36}
37
38sub complete_irc_network {
39    my $ctx = shift;
40    return complete_flags($ctx,
41        [],
42        {
43            "-a" => \&complete_networks,
44        },
45       );
46}
47
48sub complete_irc_dest {
49    my $ctx = shift;
50    return complete_flags($ctx,
51        [],
52        {
53            "-a" => \&complete_networks,
54        },
55        \&complete_dests
56       );
57}
58
59sub complete_irc_channel {
60    my $ctx = shift;
61    return complete_flags($ctx,
62        [],
63        {
64            "-a" => \&complete_networks,
65        },
66        \&complete_channels
67       );
68}
69
70sub complete_irc_nick {
71    my $ctx = shift;
72    return complete_flags($ctx,
73        [],
74        {
75            "-a" => \&complete_networks,
76        },
77        \&complete_nicks
78       );
79}
80
81sub on_message {
82    my $m = shift;
83    return unless $m->type eq 'IRC';
84    if ($m->recipient && $m->recipient !~ m{^#}) {
85        $users{$m->recipient} = 1;
86    }
87    if ($m->sender && $m->sender !~ m{^#}) {
88        $users{$m->sender} = 1;
89    }
90    $servers{$m->server} = 1;
91}
92
93BarnOwl::Completion::register_completer('irc-connect'    => \&complete_irc_connect);
94BarnOwl::Completion::register_completer('irc-disconnect' => \&complete_irc_network);
95BarnOwl::Completion::register_completer('irc-msg'        => \&complete_irc_dest);
96BarnOwl::Completion::register_completer('irc-mode'       => \&complete_irc_dest);
97BarnOwl::Completion::register_completer('irc-join'       => \&complete_irc_channel);
98BarnOwl::Completion::register_completer('irc-part'       => \&complete_irc_channel);
99BarnOwl::Completion::register_completer('irc-names'      => \&complete_irc_channel);
100BarnOwl::Completion::register_completer('irc-whois'      => \&complete_irc_nick);
101BarnOwl::Completion::register_completer('irc-motd'       => \&complete_irc_network);
102BarnOwl::Completion::register_completer('irc-topic'      => \&complete_irc_channel);
103BarnOwl::Completion::register_completer('irc-quote'      => \&complete_irc_network);
104
105$BarnOwl::Hooks::newMessage->add("BarnOwl::Module::IRC::Completion::on_message");
106
1071;
Note: See TracBrowser for help on using the repository browser.