发声脚本错误

Voicing Script Bug

我正在为一个 mIRC 机器人开发一个自动 voice/devoice 脚本片段,当昵称是小写时它会读出昵称。然后,当昵称更改为大写时,它应该让人们发声,或者如果有一个大写的昵称到小写的昵称,它就会发出声音。我的问题是它无法识别语音的细微变化或用户的声音。

#lowercheck on
alias -l _c return #
alias startwithlower { 
  if (  ) {
    return $islower($left($regsubex($,/\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
  }
}

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  && $islower($left($regsubex($,/\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
        }
    }
}