如何在 *:CONNECT: mirc 脚本中使用 if 语句

How to use if statement with on *:CONNECT: mirc script

我想加入三个网络,对 nicksrv 进行身份验证并向机器人发送消息/或在启动 IRC 客户端时自动加入几个频道。我正在使用 mIRC 7.55。

客户端应该做什么取决于它是哪个网络。所以我有一个 if 语句,但它不能正常工作。

在一台服务器上,它运行完美,一旦我添加了多个服务器,我就会遇到问题。我的语法一定有问题,或者我可以使用 $server ?

on *:start: {
  /server irc.gazellegames.net:+7000
  /server -m irc.scratch-network.net:+7000
  /server -m irc.myanonamouse.net:+6697
}
on *:CONNECT: {
  if ($server = "horus.gazellegames.net" || "anubis.gazellegames.net") {
    /msg NickServ IDENTIFY password
    /msg Vertigo ENTER username password
  }
  if ($server = brooklyn.scratch-network.net) {
    /msg NickServ IDENTIFY password
    /msg Drone enter #channel1 username password
  }
  if ($server = "irc.myanonamouse.net" || "irc2.myanonamouse.net") {
    /msg NickServ IDENTIFY password
    /j #channel1,#channel2
  }
}

预期结果是加入网络并遵循 IF 语句并使用每个网络的正确凭据进行身份验证。脚本有效,但不可靠。

该脚本似乎将所有内容发送到它连接的第一台服务器,请参见此处的代码段:https://imgur.com/65bhhNn

并且无法加入irc.myanonamouse.net/irc2.myanonamouse.net.

的第二个频道

我想避免泄露我的凭据并将其自动化,因此我只需要启动客户端即可加入所有网络、进行身份验证、向机器人发送消息或加入几个频道。

我通过在每个服务器上输入 nickserv 身份验证来解决它,工具 -> 选项 -> 服务器 -> select 服务器并选择编辑 -> 登录方法 = nickserv (/msg nickserv) -> 输入你的密码并保存。

我也把$server换成了$network,好像比较靠谱。

on *:start: {
  /server irc.gazellegames.net:+7000
  /server -m irc.scratch-network.net:+7000
  /server -m irc.myanonamouse.net:+6697
}
on *:CONNECT: {

  if ($network = MYANONAMOUSE) {
    /j #channel1
    /j #channel2
  }
  if ($network = GGn) {
    /msg Vertigo ENTER username password
  }
  if ($network = Scratch-Network) {
    /msg Drone enter #channel username password
  }
}

我已将不同类型的活动拆分为特定的别名处理程序并将网络标识符传递给它。即:SpecificNetworkCommandsJoinNetworkChannels

我还从连接过程中删除了 NickServ 身份验证,并且不仅会在 NickServ 启动 ON NOTICE 事件触发时触发响应。这将帮助您在网络服务重新启动并要求您重新进行身份验证时始终通过身份验证。

注:

  1. 通过进一步为 AuthenticationsAutoJoins 创建存储机制,所有这些重复的 if $network == 都可以变得动态和清晰。
  2. 您还可以使用 Authentication\Identification、AutoJoin、执行命令 mSL 脚本,它会毫不费力地为您完成这一切的每一部分,而且大部分时间都是 UI。

代码:(未测试)

ON *:CONNECT: {
  SpecificNetworkCommands $network
  JoinNetworkChannels $network
}

; This will send network credentials whenever required.
ON *:NOTICE:This nickname is registered*:?: {
  if ($nick == NickServ) {
    var %username, %password
    if ($network == NetworkName1) {
      %username = MyNetworkName1Username
      %password = MyNetworkName1Password
    }
    elseif ($network == NetworkName2) {
      %username = MyNetworkName2Username
      %password = MyNetworkName2Password
    }
    elseif ($network == freenode) {
      %username = MyFreeNodeUsername
      %password = MyFreeNodePassword
    }

    if (%username && %password) {
      msg nickserv identify %username %password
    }
  }
}

; Contain network specific actions
;  means the passed $network parameter
alias SpecificNetworkCommands {
  if ( == GGn) {
    msg Vertigo ENTER username password
  }
  elseif ( == Scratch-Network) {
    msg Drone enter #channel username password
  }
}

; Joining the specific network channels
;  means the passed $network parameter
alias JoinNetworkChannels {
  if ( == MYANONAMOUSE) {
    join #channel1
    join #channel2
  }
  elseif ( == freenode) {
    join #channel1
    join #channel2
  }
}