全新的mSL,只是想玩机器人。 因此,我试图制作一些内容,当用户说出某个单词时,他们会根据他们的名字获得+1计数。然而,他们不能再说出这个词,无限次地进一步增加他们的数量,他们必须找到一个新词。
为了确保单词不能多次使用我将单词写入文件,然后我需要加载这些单词并检查是否已经说过用户刚刚说过的内容,并采取相应的行动
on *:TEXT:&:#:{
var %msg
if ($1 == text1) { %msg = msg1 }
elseif ($1 == text2) { %msg = msg2 }
elseif ($1 == text3) { %msg = msg3 }
else { return }
msg # %msg
var %keyword = $readini(keyword.ini,#,$nick)
if (%keyword == $1) {
msg # you already have this keyword! :(
}
else {
var %count = $readini(cookies.ini,#,$nick)
inc %count
writeini cookies.ini # $nick %count
writeini keyword.ini # $nick %keyword $+ , $+ $1
}
}
keyword.ini文件如下所示:
nickname=text1,text2
无论如何在mSL中我可以获取列表(已经在上面的代码中完成),然后使用类似于.split(,)的东西来划分单词以运行for / next?
提前致谢
修改 我尝试了以下,虽然它确实有效!然后,我删除了文件以测试它,尽管使用了writeini,它仍然没有重新生成文件。我甚至在脚本开头添加了一个writeini keyword.ini,以确保在写入任何文本之前文件存在,但仍然没有。
on *:TEXT:&:#:{
var %msg
if ($1 == text1) { %msg = msg1 }
elseif ($1 == text2) { %msg = msg2 }
elseif ($1 == text3) { %msg = msg3 }
else { return }
msg # %msg
var %i = 1, %keyword = $readini(keyword.ini,n,$chan,$nick), %cookie = $readini(cookies.ini,n,#,$nick)
while (%i <= $numtok(%keyword, 44)) {
if ($istok(%keyword, $1, 44)) {
msg # you already have this keyword! :(
}
else {
inc %cookie
writeini cookies.ini $chan $nick %cookie
msg # congrats! you found a keywords
writeini keyword.ini $chan $nick $addtok(%keyword, $1, 44)
}
inc %i
}
答案 0 :(得分:1)
您正在寻找mIRC的令牌标识符。我建议阅读帮助文件(/ help token identifiers)以阅读更多相关信息。
使用$istok()
检查该行是否包含该关键字:
if ($istok(%keyword, $1, 44)) // Keyword exists
使用$addtok()
向该行添加新关键字,然后将其写入该文件:
writeini keyword.ini # $nick $addtok(%keyword, $1, 44)
使用$numtok()
和$gettok()
创建一个循环来读取所有值:
var %i = 1, %keywords = $readini(cookies.ini, n, channel, nick)
while (%i <= $numtok(%keywords, 44)) {
echo -a Keyword %i $+ : $gettok(%keywords, %i, 44)
inc %i
}
重要说明:始终在阅读数据时使用n
开关$readini()
(就像我上面所做的那样),尤其< / em>当用户可以输入的数据时。没有它,$readini()
将评估内容(例如,$ me将被评估为您当前的昵称)。用户可以通过这种方式注入恶意代码。
编辑插入的问题:您正在使用while循环检查它们是否拥有Cookie - 它将为每个Cookie循环一次(0循环表示没有Cookie)。您根本不需要这个while循环,因为$istok(%keywords $1, 44)
将所有关键字,如果$true
位于该令牌列表中,则返回$1
。< / p>
以下就足够了:
var %keywords = $readini(keyword.ini,n,$chan,$nick), %cookie = $readini(cookies.ini,n,#,$nick)
if ($istok(%keywords, $1, 44)) {
; the token $1 is in the list of tokens %keywords
msg # you already have this cookie! :(
}
else {
; the token $1 did not appear in the list of tokens %keywords
inc %cookie
writeini cookies.ini $chan $nick %cookie
writeini keyword.ini $chan $nick $addtok(%keywords, $1, 44)
}