不完全确定您为什么要将所有内容放在一条线上,即使这可能是由于缺乏对该主题的了解。为了可读性,您可以将事件执行行替换为括号:
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 个,暂时没有必要进一步复杂化。