ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/perl/schmorp-irc.ext
Revision: 1.14
Committed: Thu Sep 21 14:49:36 2006 UTC (17 years, 8 months ago) by pippijn
Branch: MAIN
Changes since 1.13: +1 -1 lines
Log Message:
Now we show the title a player gave him/herself if such exists, otherwise
show the race.

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 pippijn 1.12 my ($name, $me, $msg) = @_;
26 pippijn 1.9
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.14 "* " . $pl->ob->name . "/" . $pl->ob->level . " " . ( length $pl->own_title ? $pl->own_title : "the " . $pl->title ) . " "
43 pippijn 1.13 .($pl->ob->flag (cf::FLAG_WIZ) ? " [WIZ] " : "")
44 pippijn 1.9 ." [" . ($pl->ob->map ? $pl->ob->map->path : "NULL") . "]", $BOTCHAN);
45     }
46     }
47 pippijn 1.12 } elsif ($msg =~ /^\!tell/) {
48     my (undef, $target, $tmsg) = split / /, $msg, 3;
49    
50     if (my $other = cf::player::find $target) {
51    
52     if ($tmsg) {
53     if ($me eq $target) {
54     $CON->send_chan ($BOTCHAN, NOTICE => "$me: You are talking to yourself, you freak!", $BOTCHAN);
55     } elsif ($other->ob->{ext_ignore_tell}{$me} >= time) {
56     $CON->send_chan ($BOTCHAN, NOTICE => "$me: $target ignores what you say. Give up on it.", $BOTCHAN);
57     } else {
58     utf8::encode $tmsg; # ->message not yet utf8-ified
59     cf::LOG cf::llevDebug, sprintf "TELL [%s/%s>%s] %s\n", $name, $me, $target, $tmsg;
60    
61     $other->ob->message ("$name/$me tells you: $tmsg");
62     $other->ob->{ext_last_tell} = "$name/$me";
63     }
64     } else {
65     $CON->send_chan ($BOTCHAN, NOTICE => "$me: What do you want to tell $target?", cf::NDI_UNIQUE);
66     }
67    
68     }
69 pippijn 1.9 }
70     }
71    
72 elmex 1.1 sub check_connection {
73     return if $CON;
74 root 1.4
75 elmex 1.1 $CON = Net::IRC3::Client::Connection->new;
76     $CON->connect ($BOTSERVER, $BOTPORT);
77     $CON->send_srv (JOIN => undef, $BOTCHAN);
78     $CON->register ($BOTNAME, $BOTNAME, 'crossfire connection');
79     $CON->reg_cb (
80     #d# 'irc_*' => sub { warn "IRC $_[1]->{trailing}\n"; 1 },
81     irc_privmsg => sub {
82     my ($con, $msg) = @_;
83     my $name = 'irc';
84 pippijn 1.12 my $nick = Net::IRC3::Util::prefix_nick ($msg);
85 elmex 1.1 my $NOW = Time::HiRes::time;
86 elmex 1.3 my $tmsg = $msg->{trailing};
87     $tmsg =~ s/\x01[^\x01]*\x01//g;
88 pippijn 1.9 if ($tmsg =~ /^\!/) {
89 pippijn 1.12 handle_fcmd ($name, $nick, $tmsg);
90 pippijn 1.9 } elsif ($tmsg =~ m/\S/) {
91 elmex 1.3 $_->ob->message (
92 pippijn 1.12 "$name/".$nick." chats: $tmsg", cf::NDI_BLUE
93 elmex 1.3 ) for grep { $_->ob->{ext_ignore_shout}{$name} < $NOW && $_->listening >= 10 } cf::player::list;
94     }
95 elmex 1.1 1;
96     },
97 elmex 1.2 # registered => sub {
98     # 1;
99     # },
100 elmex 1.1 disconnect => sub {
101     undef $CON;
102     0;
103     }
104     );
105     }
106    
107     my $timer;
108    
109     sub new_timer {
110     $timer = AnyEvent->timer (after => 10, cb => sub {
111     check_connection ();
112     &new_timer; # and restart the time
113     });
114     }
115    
116     new_timer; # create first timer
117     check_connection ();