use v6.d;
use IRC::Client;
class Boha::TrackOps does IRC::Client::Plugin {
has %!is-op;
multi method is-op(
Str() $server, Str() $channel, Str() $nick --> Bool
) {
return %!is-op{$server}{$channel}{$nick}.so;
}
multi method is-op(IRC::Client::Message $e --> Bool) {
fail 'not a channel message' unless $e.?channel;
return self.is-op($e.server,$e.channel,$e.nick);
}
method !set-user-mode(
Str() $server, Str() $channel, Str() $nick, Bool $mode
) {
%!is-op{$server}{$channel}{$nick} = $mode;
}
method irc-n353(IRC::Client::Message $e) {
my $server = $e.server;
my ($my-nick,$equal,$channel,$names) = $e.args();
for $names.split(/\s+/) -> $name-str {
my $user = $name-str ~~ / ^ $<sigil> = [ '@' | '+' ]? $<nick> = [ .+ ] $ /;
self!set-user-mode(
$server, $channel,
$user<nick>,
$user<sigil> eq '@'
);
}
return $.NEXT;
}
method irc-mode-channel($e) {
my ($server, $channel) = $e.server, $e.channel;
my $new-mode = (
$e.mode eq '+o' ?? True !!
$e.mode eq '-o' ?? False !!
return $.NEXT
);
for $e.nicks() -> $nick {
self!set-user-mode($server,$channel,$nick,$new-mode);
}
return $.NEXT;
}
}