如何向用户发送随机文本行,然后在 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 事件。
$read
的 s 参数作为第二个参数提供,搜索以第三个参数开头的行;如果该行存在,则 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 个,所以暂时不需要进一步复杂化。
下面是在频道 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 事件。
$read
的 s 参数作为第二个参数提供,搜索以第三个参数开头的行;如果该行存在,则 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 个,所以暂时不需要进一步复杂化。