/join 0
/join 0
/part #
ってなるけど
これはバグではなくてircdの仕様
ちなみにplumではmaskされて
*Error(461) JOIN Not enough parameters
となる
sub scan_event { local($userno, $event, $no, $prefix, $cmd, @params) = @_; local($name, $sub, $label); print "scan_event($userno, $event, $no, $prefix, $cmd, @params)\n"; $name = '\'' . $event;
scan_event(0, cs_join, 6, , JOIN, )
scan_event(0, ss_461, 5, PIRCSERVER, 461, pirc JOIN Not enough parameters)
plumのバグがうまく行ってる感じ
一つはsub 'parseの
while ($line) {
ここの判定で、 $line == '0' の場合抜ける
while ('0') {
回避は
while ($line ne '') {
もう一つは sub 'buildの
if (@params) { $trailing = pop(@params) || '';
これは
pop失敗時には''代入だと言う意味だと解釈すると
$trailing = 0 || '';
の場合も '0' =>''
となってしまうので
とっぱらう。
そもそも、 if(@params) であるのに pop できないのは fatal(ぉ
アー ココハ、? ガヨイラスイーーー
$trailing = $trailing ? $trailing : '';
ッテエライヒトガイッテター
if (@params) { $trailing = pop(@params);
diff
% diff plum plum3 283c283,284 < while ($line) { --- > while ($line ne '') { > # while ($line) { 300c301,302 < $trailing = pop(@params) || ''; --- > # $trailing = pop(@params) || ''; > $trailing = pop(@params);
src
sub 'parse { local($line) = @_; local($arg, $rest, @params); @params = (); $line =~ s/^\s*//; if ($line =~ /^\:(.*)$/) { ($arg, $rest) = (split(/\s+/, $1, 2), ''); } else { ($arg, $rest) = ('', $line); } while ($line ne '') { # while ($line) { push(@params, $arg); if ($rest =~ /^\:(.*)$/) { push(@params, $1); last; } $line = $rest; ($arg, $rest) = (split(/\s+/, $line, 2), ''); } return @params; } sub 'build { local($prefix, $cmd, @params) = @_; local($trailing); return '' unless $cmd; if (@params) { # $trailing = pop(@params) || ''; $trailing = pop(@params); if (&'exist($NOTRAILING, "\L$cmd\E")) { push(@params, $trailing . ' '); } else { push(@params, ':' . $trailing); } } else { @params = (); } unshift(@params, $cmd); unshift(@params, ':' . $prefix) if $prefix; return join(' ', @params); }
上記適用で
/privmsg #channel 0 ができるようになる
ただ /join 0 はしたくないね(ぉ