/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 はしたくないね(ぉ

http://d.hatena.ne.jp/ore_de_work/20061217#1166409872