Ok, basically what happens is A WHO reply is meant to
return with a channel. As i understand it many servers
return the last one you joined. Some servers however
always return *. Gennerally * only should be returned
when the user IS NOT in a channel.
The bug is this, if a user has OP in a channel, and
then the bot recives a WHO reply with * for the
channels, the WHO reply will only show H (and possibly
o for IRCOP) in the WHO reply. The Bot will then take
this * and its Mode String and apply it to ALL the
channels the user is in, thus the bot will belive the
user no longer has OP. The affecting code is in
messagehandler.php around line 321. I have coded my way
around this, not in the nicest way, however if it helps.
if ($ircdata->channel == '*') {
// we got who info without channel
info, so we need to search the user
// on all channels and update him
foreach ($this->_channels as $channel) {
if ($this->isJoined($channel->name,
$nick)) {
$ircdata->channel = $channel->name;
// if we do this, it means we
dont have WHO info (on ops and such)
// for the channel so set the
$noChannelSpecificInfo
// flag to true
$this->_event_rpl_whoreply($ircdata, TRUE);
}
}
}
then slightly lower
if(!$noChannelSpecificInfo)
{
$user->op = false;
$user->voice = false;
}
and also
function _event_rpl_whoreply(&$ircdata,
$noChannelSpecificInfo = FALSE)
in the function definition.
Logged In: YES
user_id=598557
indeed this is a bug, problem though your code doesnt fix
the situation if something is an op on channel a but not on
b and then the WHO reply with * tells he is op, it would set
the op to true also on channel b. I will work on this.
thanks for your bugreport