【问题标题】:How to send a random line of text to a user followed by permanent ignore in mIRC如何向用户发送随机文本行,然后在 mIRC 中永久忽略
【发布时间】:2019-05-26 17:23:26
【问题描述】:

下面是我在频道 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?

【问题讨论】:

    标签: scripting mirc


    【解决方案1】:

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

    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 事件。

    $reads 参数,作为第二个参数提供,搜索从第三个参数开始的行;如果该行存在,则返回该行。否则返回$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 个,暂时没有必要进一步复杂化。

    【讨论】:

    • 非常感谢!从外观上看,这正是我所需要的,非常感谢您的回复。今晚我将对其进行测试,看看效果如何
    • @MircUser 欢迎;如果我的回答确实是你需要的,请考虑接受:stackoverflow.com/help/someone-answers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2015-07-26
    相关资源
    最近更新 更多