ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/perl/schmorp-irc.ext
Revision: 1.11
Committed: Sun Sep 17 22:56:52 2006 UTC (17 years, 8 months ago) by pippijn
Branch: MAIN
Changes since 1.10: +1 -1 lines
Log Message:
Added the WIZ flag to !who

File Contents

# User Rev Content
1 elmex 1.1 #! perl
2 root 1.4
3 elmex 1.1 use Time::HiRes;
4     use Net::IRC3::Client::Connection;
5    
6 root 1.6 my $BOTSERVER = 'localhost';
7 elmex 1.1 my $BOTPORT = '6667';
8 pippijn 1.10 my $BOTNAME = 'cfbot';
9 elmex 1.1 my $BOTCHAN = '#cf';
10    
11     my $CON; # the connection
12    
13 root 1.8 sub unload {
14 elmex 1.5 $CON->disconnect if $CON;
15 elmex 1.1 undef $CON;
16     }
17    
18     sub do_notice {
19     my ($msg) = @_;
20 elmex 1.7 $CON->send_chan ($BOTCHAN, NOTICE => $msg, $BOTCHAN)
21     if $CON;
22 elmex 1.1 }
23    
24 pippijn 1.9 sub handle_fcmd {
25     my ($msg) = @_;
26    
27     if ($msg eq "!who") {
28     my ($numplayers, $numwiz, @plist) = (0, 0);
29    
30     foreach my $pl (cf::player::list) {
31     $numplayers++;
32     $numwiz++
33     if ($pl->ob->flag (cf::FLAG_WIZ));
34     push (@plist, $pl);
35     }
36    
37     $CON->send_chan ($BOTCHAN, NOTICE => "Total Players in The World. ($numplayers) -- WIZ($numwiz)", $BOTCHAN);
38    
39     if ($numplayers > 0) {
40     foreach my $pl (@plist) {
41     $CON->send_chan ($BOTCHAN, NOTICE =>
42 pippijn 1.11 "* " . $pl->ob->name . "/" . $pl->ob->level . ($pl->ob->flag (cf::FLAG_WIZ) ? " [WIZ] " : "")
43 pippijn 1.9 ." [" . ($pl->ob->map ? $pl->ob->map->path : "NULL") . "]", $BOTCHAN);
44     }
45     }
46     }
47     }
48    
49 elmex 1.1 sub check_connection {
50     return if $CON;
51 root 1.4
52 elmex 1.1 $CON = Net::IRC3::Client::Connection->new;
53     $CON->connect ($BOTSERVER, $BOTPORT);
54     $CON->send_srv (JOIN => undef, $BOTCHAN);
55     $CON->register ($BOTNAME, $BOTNAME, 'crossfire connection');
56     $CON->reg_cb (
57     #d# 'irc_*' => sub { warn "IRC $_[1]->{trailing}\n"; 1 },
58     irc_privmsg => sub {
59     my ($con, $msg) = @_;
60     my $name = 'irc';
61     my $NOW = Time::HiRes::time;
62 elmex 1.3 my $tmsg = $msg->{trailing};
63     $tmsg =~ s/\x01[^\x01]*\x01//g;
64 pippijn 1.9 if ($tmsg =~ /^\!/) {
65     handle_fcmd ($tmsg);
66     } elsif ($tmsg =~ m/\S/) {
67 elmex 1.3 $_->ob->message (
68 pippijn 1.9 "$name/".Net::IRC3::Util::prefix_nick ($msg)." chats: $tmsg", cf::NDI_BLUE
69 elmex 1.3 ) for grep { $_->ob->{ext_ignore_shout}{$name} < $NOW && $_->listening >= 10 } cf::player::list;
70     }
71 elmex 1.1 1;
72     },
73 elmex 1.2 # registered => sub {
74     # 1;
75     # },
76 elmex 1.1 disconnect => sub {
77     undef $CON;
78     0;
79     }
80     );
81     }
82    
83     my $timer;
84    
85     sub new_timer {
86     $timer = AnyEvent->timer (after => 10, cb => sub {
87     check_connection ();
88     &new_timer; # and restart the time
89     });
90     }
91    
92     new_timer; # create first timer
93     check_connection ();