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

Posted

技术标签:

【中文标题】如何在 *:CONNECT: mirc 脚本中使用 if 语句【英文标题】:How to use if statement with on *:CONNECT: mirc script 【发布时间】: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 = ***lyn.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 的第二频道。

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

【问题讨论】:

【参考方案1】:

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

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

注意:

    通过进一步为AuthenticationsAutoJoins 创建存储机制,所有这些重复的if $network == 都可以变得动态和清晰。 您还可以使用 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 身份验证的情况下,我会采取不同的做法,如果您仍然想要其他解决方案,我会很乐意写成这样 我创建了一个答案

以上是关于如何在 *:CONNECT: mirc 脚本中使用 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

如何去除 mIRC 用户使用的颜色代码?

在文本 $date mirc

mIRC 如果定时器 X 正在运行

mIRC 套接字从 url 读取文本

在私人查询中使用文本?

mIRC 聊天机器人不承认命令