如何向用户发送随机文本行,然后在 mIRC 中永久忽略

How to send a random line of text to a user followed by permanent ignore in mIRC

下面是在频道 JOIN 上触发的我的 mirc 脚本示例...

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?

不完全确定为什么要将所有内容都放在一行中,即使这可能是由于对该主题缺乏了解。为了可读性,可以用括号替换事件执行行:

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 没有找到我们要查找的内容,它将 return $null.忽略用户不会阻止用户触发 join 事件。

$reads 参数作为第二个参数提供,搜索以第三个参数开头的行;如果该行存在,则 return 就是该行。否则,它 returns $null.

之后,我们只需/write到文件。 /write 可以采用多种选项,但 none 是相关的,因为我们只需要向文件追加一行(第一个参数),在这种情况下是 $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 个,所以暂时不需要进一步复杂化。