如何在mIRC

时间:2019-05-16 19:44:23

标签: scripting mirc

下面是我的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?

1 个答案:

答案 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个,因此暂时无需进一步复杂化。