在使用MSL语言进行编程方面,我是一位专家,但是我不熟悉原始命令等等。
我正在开发一个新脚本。在这个脚本中,我想检查用户说的是否是4美元是否是注册昵称,但我不知道如何做到这一点。
非常感谢您提供的任何帮助和/或建议。
最诚挚的问候, 添
更新
raw 307:*:{ set $+(%,%chan,-,%CheckNick) Registered }
on *:TEXT:*:#:{
if ($1 == !regtest) {
set %chan $remove($chan,$chr(35))
set %CheckNick $4
whois $4
}
if ($($+(%,%chan,-,%CheckNick),$4),5) != $null) {
do this...
}
else {
else message...
}
}
我得到了这个来检查我的if语句来检查变量是否已被设置被忽略...
修改
我试过用这个:
checkNickReg $chan $2 $nick
......并回应这个:
echo -a Target: $1
echo -a Nick: $2
echo -a Status: $3
echo -a Chan: $3 - $chan
我试图回复频道,例如: $ nick $ +,$ 1未注册/注册/注册但未登录。
我上面发布的内容显然是错误的,因为它不起作用,但是我尝试了一些方法,而我实际上并不确定如何传出数据像标记或设置变量...
回复
[01:59:06]< ~MrTIMarshall> !isReged mr-dynomite
[01:59:08]<& TornHQ> :mr-dynomite状态是:NOTLOGGED
编辑: mr-dynomite目前不上,如果这不是=不存在或者即使他们没有开启也会检查,如果是这样,这是血腥的明亮!
[02:00:04]< ~MrTIMarshall> !isReged MrTIMarshall
[02:00:04]<& TornHQ> :MrTIMarshall的状态是:LOGGEDIN
$ 4似乎不起作用,'存在,未登录'之间有什么区别?并且'已识别,未登录'?
此外,如何在不设置变量或标记化的情况下传递数据?
(P.S。非常感谢您迄今为止所提供的帮助!)
另一个编辑:
我今天一直在深入研究,我是否正确认为用户是否在线或未注册(在评论中说0 =不存在/不在线) ,1 =未登录,而2也表示没有登录,但认识到我不确定哪些是公认的意思。否则,我非常感谢这个脚本的帮助,而我还不清楚数字......
答案 0 :(得分:0)
在大多数IRCD上,它仅在用户的WHOIS响应中公开,如果有的话。每次用户说出某些内容时都要运行WHOIS,尤其是因为服务器管理员每次都会收到通知。
答案 1 :(得分:0)
由于您没有指定任何特定的网络,我为一些常见的网络(实际上有用户身份验证系统)编写了大纲。您应该能够在模式之后添加许多其他网络。
基本上你执行/checkNickReg <target> <nick> [optional extra data]
,当服务器重播注册信息(如果适用)时,使用on isReged signal
事件来处理回复。其他一切都非常透明。
编辑:看起来您正在使用的指定网络(Torn)使用标准的anope服务。所以我更新了代码以支持该网络。
; triggers when you get nick registration info back
; $1 = Target
; $2 = Nick
; $3 = Status, can be: LOGGEDIN, RECOGNIZED, NOTLOGGED
; $4- = Everything else passed
on *:signal:isReged:{
echo -a Target: $1
echo -a Nick: $2
echo -a Status: $3
echo -a Else: $4-
}
; reg lookup routines
alias checkNickReg {
set %reg. $+ $network 1
set %reg.target. $+ $network $1
set %reg.nick. $+ $network $2
set %reg.other. $+ $network $3-
; Freenode uses: NickServ ACC <nick>
if ($network == Freenode) msg NickServ ACC $2
; Rizon/SwiftIRC/OFTC/Torn use: NickServ STATUS <nick>
elseif ($istok(Rizon SwiftIRC OFTC Torn, $network, 32)) msg NickServ STATUS $2
}
; listen for replays
on *:notice:*:*:{
if ($($+(%, reg., $network),2)) {
;
var %target = $($+(%, reg.target., $network),2)
var %nick = $($+(%, reg.nick., $network),2)
var %other = $($+(%, reg.other., $network),2)
;
unset %reg*. $+ $network
if (($network == FreeNode) && ($2 == ACC)) $&
|| (($istok(Rizon SwiftIRC OFTC Torn, $network, 32)) && ($1 == STATUS)) {
; FreeNode:
; 0 = does not exist
; 1 = exists, not logged in
; 2 = recognized, not logged in
; 3 = logged in
; Rizon/SwiftIRC/OFTC/Torn:
; 0 = does not exists / not online
; 1 = not logged in
; 2 = recognized, not logged in
; 3 = logged in
if ($3 < 2) var %status = NOTLOGGED
elseif ($3 == 2) var %status = RECOGNIZED
else var %status = LOGGEDIN
}
;send status signal
.signal isReged %target %nick %status %other
}
}
(额外注意:为安全起见,添加额外的检查以确保$ nick是AuthServ / NickServ可能很有用。)
一个简单的用法示例是:
; Just a basic example of how to call it.
on *:text:!isReged &:#:{
checkNickReg $chan $2 $nick
}
on *:signal:isReged:{
msg $1 $4: $2 status is: $3
}
输入!isReged <nick>
编辑:数据通过全局变量传递给on isReged事件。我将它们设置在checkNickReg
别名中,然后在on notice
事件中清除它们。所以你永远不会看到它们因为它们被清理干净了。它们以$ 1 - 。