… | |
… | |
20 | $CON->send_chan ($BOTCHAN, NOTICE => $msg, $BOTCHAN) |
20 | $CON->send_chan ($BOTCHAN, NOTICE => $msg, $BOTCHAN) |
21 | if $CON; |
21 | if $CON; |
22 | } |
22 | } |
23 | |
23 | |
24 | sub handle_fcmd { |
24 | sub handle_fcmd { |
25 | my ($msg) = @_; |
25 | my ($name, $me, $msg) = @_; |
26 | |
26 | |
27 | if ($msg eq "!who") { |
27 | if ($msg eq "!who") { |
28 | my ($numplayers, $numwiz, @plist) = (0, 0); |
28 | my ($numplayers, $numwiz, @plist) = (0, 0); |
29 | |
29 | |
30 | foreach my $pl (cf::player::list) { |
30 | foreach my $pl (cf::player::list) { |
… | |
… | |
41 | $CON->send_chan ($BOTCHAN, NOTICE => |
41 | $CON->send_chan ($BOTCHAN, NOTICE => |
42 | "* " . $pl->ob->name . "/" . $pl->ob->level . ($pl->ob->flag (cf::FLAG_WIZ) ? " [WIZ] " : "") |
42 | "* " . $pl->ob->name . "/" . $pl->ob->level . ($pl->ob->flag (cf::FLAG_WIZ) ? " [WIZ] " : "") |
43 | ." [" . ($pl->ob->map ? $pl->ob->map->path : "NULL") . "]", $BOTCHAN); |
43 | ." [" . ($pl->ob->map ? $pl->ob->map->path : "NULL") . "]", $BOTCHAN); |
44 | } |
44 | } |
45 | } |
45 | } |
|
|
46 | } elsif ($msg =~ /^\!tell/) { |
|
|
47 | my (undef, $target, $tmsg) = split / /, $msg, 3; |
|
|
48 | |
|
|
49 | if (my $other = cf::player::find $target) { |
|
|
50 | |
|
|
51 | if ($tmsg) { |
|
|
52 | if ($me eq $target) { |
|
|
53 | $CON->send_chan ($BOTCHAN, NOTICE => "$me: You are talking to yourself, you freak!", $BOTCHAN); |
|
|
54 | } elsif ($other->ob->{ext_ignore_tell}{$me} >= time) { |
|
|
55 | $CON->send_chan ($BOTCHAN, NOTICE => "$me: $target ignores what you say. Give up on it.", $BOTCHAN); |
|
|
56 | } else { |
|
|
57 | utf8::encode $tmsg; # ->message not yet utf8-ified |
|
|
58 | cf::LOG cf::llevDebug, sprintf "TELL [%s/%s>%s] %s\n", $name, $me, $target, $tmsg; |
|
|
59 | |
|
|
60 | $other->ob->message ("$name/$me tells you: $tmsg"); |
|
|
61 | $other->ob->{ext_last_tell} = "$name/$me"; |
|
|
62 | } |
|
|
63 | } else { |
|
|
64 | $CON->send_chan ($BOTCHAN, NOTICE => "$me: What do you want to tell $target?", cf::NDI_UNIQUE); |
|
|
65 | } |
|
|
66 | |
|
|
67 | } |
46 | } |
68 | } |
47 | } |
69 | } |
48 | |
70 | |
49 | sub check_connection { |
71 | sub check_connection { |
50 | return if $CON; |
72 | return if $CON; |
… | |
… | |
56 | $CON->reg_cb ( |
78 | $CON->reg_cb ( |
57 | #d# 'irc_*' => sub { warn "IRC $_[1]->{trailing}\n"; 1 }, |
79 | #d# 'irc_*' => sub { warn "IRC $_[1]->{trailing}\n"; 1 }, |
58 | irc_privmsg => sub { |
80 | irc_privmsg => sub { |
59 | my ($con, $msg) = @_; |
81 | my ($con, $msg) = @_; |
60 | my $name = 'irc'; |
82 | my $name = 'irc'; |
|
|
83 | my $nick = Net::IRC3::Util::prefix_nick ($msg); |
61 | my $NOW = Time::HiRes::time; |
84 | my $NOW = Time::HiRes::time; |
62 | my $tmsg = $msg->{trailing}; |
85 | my $tmsg = $msg->{trailing}; |
63 | $tmsg =~ s/\x01[^\x01]*\x01//g; |
86 | $tmsg =~ s/\x01[^\x01]*\x01//g; |
64 | if ($tmsg =~ /^\!/) { |
87 | if ($tmsg =~ /^\!/) { |
65 | handle_fcmd ($tmsg); |
88 | handle_fcmd ($name, $nick, $tmsg); |
66 | } elsif ($tmsg =~ m/\S/) { |
89 | } elsif ($tmsg =~ m/\S/) { |
67 | $_->ob->message ( |
90 | $_->ob->message ( |
68 | "$name/".Net::IRC3::Util::prefix_nick ($msg)." chats: $tmsg", cf::NDI_BLUE |
91 | "$name/".$nick." chats: $tmsg", cf::NDI_BLUE |
69 | ) for grep { $_->ob->{ext_ignore_shout}{$name} < $NOW && $_->listening >= 10 } cf::player::list; |
92 | ) for grep { $_->ob->{ext_ignore_shout}{$name} < $NOW && $_->listening >= 10 } cf::player::list; |
70 | } |
93 | } |
71 | 1; |
94 | 1; |
72 | }, |
95 | }, |
73 | # registered => sub { |
96 | # registered => sub { |