下面是我的mirc脚本的示例,该脚本在频道JOIN上触发...
on 1:JOIN:#:/timer 1 10 /msg $nick Welcome | /timer 1 20 If you like the game please vote on the main page | /timer 1 30 Thanks for visiting and enjoy your stay ignore $nick
我想随机化本地存储的文本文件中的回复,我该怎么做?我对mIRC并不陌生,只是在学习,并且已经使用$rand
进行了测试,但失败了。
我想对每个顺序答复说10个选项。因此,发送给用户的第一个消息有10个变化,第二个消息也是如此。为了提高效率,我希望在用户收到所有消息后永久忽略该用户。因此,他们下次每次上网并加入频道时,都不会再收到消息。我想也许这需要一个.ini来存储用户ID?
答案 0 :(得分:0)
不能完全确定为什么要将所有内容都放在一条线上,即使这可能是由于对该主题知识不足所致。为了便于阅读,您可以将事件执行行替换为括号:
on 1:JOIN:#: {
timer 1 10 msg $nick Welcome
timer 1 20 If you like the game please vote on the main page
timer 1 30 Thanks for visiting and enjoy your stay
ignore $nick
}
当然,上面的示例仍然存在一些问题。 /msg
未使用,因此下一个计时器不会执行任何操作,并且/ignore
也不会阻止事件触发。我会解决这个问题。
最重要的是,您不会忽略这个缺口,因为您的最后一行(如下所示:/timer 1 30 Thanks for visiting and enjoy your stay ignore $nick
)没有与执行行的其余部分分开ignore $nick
,因此它很简单将其视为句子的一部分。为此,您需要给它再加上一个竖线字符(如下所示:/timer 1 10 /msg $nick Welcome | /timer 1 20 If you like the game please vote on the main page | /timer 1 30 Thanks for visiting and enjoy your stay | ignore $nick
,或者像上面的括号示例一样)。
现在,进入主要问题本身;调用$read
标识符(仅包含文件名且没有其他参数)将导致其从该文件读取随机行。因此,考虑到这一点,您可以执行以下操作:
on 1:JOIN:#: {
timer 1 10 msg $nick $read(welcome.txt)
timer 1 20 msg $nick $read(vote.txt)
timer 1 30 msg $nick $read(closing.txt)
ignore $nick
}
请注意,调用任何文件的调用都位于mIRC应用程序数据文件夹的本地。意味着welcome.txt
应该存在于$mircdir
处。如果要从其他位置加载它,请指定绝对路径,或使用$scriptdir $+ filename.extension
,并确保脚本本身存在于特定目录中,例如scripts\script_name\script.mrc
。
为确保用户再也不会收到该消息,您需要跟踪用户。为此,我们可以再次使用$read
,因为当与某些参数一起使用时,如果$read
找不到我们想要的内容,它将返回$null
。忽略用户不会阻止用户触发 join 事件。
$read
的 s 参数搜索以第三个参数开头的行;如果该行存在,则返回该行。否则,它将返回$null
。
此后,我们只需/write
到文件。 /write
可以有多种选择,但是没有什么关系,因为我们只需要在文件(第一个参数)后面添加一行,在本例中为$nick
(第二个参数)。
on 1:JOIN:#: {
if ($read(ignored_nicks.txt, s, $nick) == $null) {
timer 1 10 msg $nick $read(welcome.txt)
timer 1 20 msg $nick $read(vote.txt)
timer 1 30 msg $nick $read(closing.txt)
write ignored_nicks.txt $nick
}
}
值得注意的是,当事件使用括号格式时,我们无需为每个命令提供正斜杠(/
)。仅当从mirc的输入框中执行命令时,才需要第一个斜杠。管道(|
不需要斜杠,尽管我是出于良好的实践自己添加的,但要使其明显成为命令(例如:/somecommand blah | /someothercommand blah
)。
最后,如果您要添加更多答复,那么我的答案会稍有变化,但是由于只有3个,因此暂时无需进一步复杂化。