如何在 *: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】:我已将不同类型的活动拆分为特定的别名处理程序,并将网络标识符传递给它。即:SpecificNetworkCommands,JoinNetworkChannels
我还从连接过程中删除了 NickServ 身份验证,并且不仅会在 NickServ 启动 ON NOTICE 事件触发时触发响应。这将有助于在网络服务重新启动并要求您重新进行身份验证时始终对您进行身份验证。
注意:
-
通过进一步为
Authentications
或AutoJoins
创建存储机制,所有这些重复的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 语句的主要内容,如果未能解决你的问题,请参考以下文章