1

我正在为一个 mIRC 机器人编写一个自动语音/devoice 脚本片段,当一个昵称是小写时,它会发出这个昵称。然后,当昵称更改并且它是大写时,它应该使人们变声,或者如果有一个大写的刻痕到小写的刻痕,它会发声。我的问题是它无法识别用户对语音或取消语音的昵称更改。

#lowercheck on
alias -l _c return #
alias startwithlower { 
  if ( $1 ) {
    return $islower($left($regsubex($$1,/\W+/g,$null),1))
  }
  else return $false
}
on @*:JOIN:#Tristram_Halls:{
  if ( $startwithlower($nick) == $true ) {
    mode $_c +v $nick
  }
}
on @*:NICK:{
  if ( ( $startwithlower($newnick) == $false ) && ( $newnick !isvoice $_c ) )  {
    mode $_c -v $newnick
  }
  elseif ( ( $startwithlower($newnick) == $true ) && ( $newnick isvoice $_c ) ) {
    mode $_c +v $newnick
  }
}
4

1 回答 1

1

ON NICK是在 nick 上发生并为每个频道执行的操作,而不是如果您的机器人应该处理许多频道,它应该改变您在每个频道中为用户发声的方式,您想授予他发言权。

如果机器人在 1 个通道中仅具有 OP+ 控制,则以下内容将解决您的问题(您在isvoice两种情况之间切换):

on @*:NICK:{
  if ( ( $startwithlower($newnick) == $false ) && ( $newnick isvoice $_c ) )  {
    mode $_c -v $newnick
  }
  elseif ( ( $startwithlower($newnick) == $true ) && ( $newnick !isvoice $_c ) ) {
    mode $_c +v $newnick
  }
}

一个更好的实现将是:

#lowercheck on
alias -l _c return #
alias startwithlower { 
    return $1 && $islower($left($regsubex($$1,/\W+/g,$null),1))
}

on @*:JOIN:#Tristram_Halls:{
  if ($startwithlower($nick)) {
    mode $_c +v $nick
  }
}

on @*:NICK:{
    if ($startwithlower($newnick)) {
        if ($newnick !isvoice $_c) {
            mode $_c +v $newnick
        }
    }
    else
    {
        if ($newnick isvoice $_c) {
            mode $_c -v $newnick
        }
    }
}
于 2015-10-05T01:29:00.327 回答