eggheads / eggdrop

The Eggdrop IRC Bot
GNU General Public License v2.0
506 stars 84 forks source link

WHOx screwing up channels userlist #739

Closed key2peace closed 5 years ago

key2peace commented 6 years ago

Eggdrop does not distinguish between the by eggdrop issued WHOx and a scripted one, and simply parses the RAW 354 reply in both cases, screwing up the channels userlist. This is in the case of the reproduction test the i(ip) parameter messing stuff up, since the ip will shift the argument order eggdrop expects in the reply. Solution would be to count the amount of returned args of the 354, up to the : stating the start of the gecos field.

Reproduction test: .tcl putserv "WHO [anychanwithusers] %xcnihurf" .channel [anychanwithusers]

Will produce something like: NICKNAME HANDLE JOIN IDLE USER@HOST mx-ll-223.206.234-196.dynamic.3b * --- 2d ~nmrbkn@223.206.234.196

Blame: https://github.com/eggheads/eggdrop/blob/develop/src/mod/irc.mod/chan.c#L1103-L1125

michaelortmann commented 6 years ago

Hei key2peace,

i think you mean .channel instead of .chaninfo ?

.set use-354 ? .set net-type ? undernet?

i still can't reproduce [...]

key2peace commented 6 years ago

https://github.com/eggheads/eggdrop/blob/develop/src/mod/irc.mod/chan.c#L1103-L1125

eggdrop does not care about the amount of args it receives, it needs to count the number of args to see how many it receives without the gecos first to see WHICH style of whox it gets, for a 'normal' whox it would be 7 (with gecos), oh, and while at it, fix the typo, it's ircu, not iru ;)

michaelortmann commented 6 years ago

Thank you, now its repeatable and thus fixable.

key2peace commented 6 years ago

Yeah, please do, as this behaviour screws with a lot of stuff in eggdrop, like if eggdrop doesn't find itself in the WHO output because nick is on a different place, it reissues a JOIN thinking it ain't present (once).

michaelortmann commented 6 years ago

We better don't distinguish the new whox syntax via parameter count, but via 005 numeric WHOX. until then, disabling 354 in eggdrop.conf is possible via "set use-354 0".

However, i committed a workaround PR, because 005 support (#438) won't make it into 1.8.4 i guess.