【问题标题】:How to use if statement with on *:CONNECT: mirc script如何在 *:CONNECT: mirc 脚本中使用 if 语句
【发布时间】:2019-10-08 17:20:26
【问题描述】:

我想加入三个网络,向 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 声明并使用每个网络的正确凭据进行身份验证。脚本有效,但不可靠。

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

并且无法加入 irc.myanonamouse.net/irc2.myanonamouse.net 的第二频道。

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

【问题讨论】:

    标签: if-statement irc mirc


    【解决方案1】:

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

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

    注意:

    1. 通过进一步为Authentications 或AutoJoins 创建存储机制,所有这些重复的if $network == 都可以变得动态和清晰。
    2. 您还可以使用 Authentication\Identification、AutoJoin、Perform commands 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
    ; $1 means the passed $network parameter
    alias SpecificNetworkCommands {
      if ($1 == GGn) {
        msg Vertigo ENTER username password
      }
      elseif ($1 == Scratch-Network) {
        msg Drone enter #channel username password
      }
    }
    
    ; Joining the specific network channels
    ; $1 means the passed $network parameter
    alias JoinNetworkChannels {
      if ($1 == MYANONAMOUSE) {
        join #channel1
        join #channel2
      }
      elseif ($1 == freenode) {
        join #channel1
        join #channel2
      }
    }
    

    【讨论】:

      【解决方案2】:

      我通过在每台服务器上输入 nickserv 身份验证来解决它,工具 -> 选项 -> 服务器 -> 选择服务器并选择编辑 -> 登录方法 = 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
        }
      }
      

      【讨论】:

      • 在NickServ 身份验证的情况下,我会采取不同的做法,如果您仍然想要其他解决方案,我会很乐意写成这样
      • 我创建了一个答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多