目前我有一个irc bot,当用户说出一个关键词例如test1时,他们会将+1添加到他们的计数中,并将其存储在一个文件中。但是我想知道谁算得最多(谁赢了)。我觉得像while循环这样的东西会起作用,不幸的是,虽然我的伪代码是正确的,但理论代码并没有那么多。
这是我到目前为止所做的。
on *:TEXT:!winning:#:{
var %i = 1, %highest = 0, %mycookie = $readini(cookies.ini,n,#,$nick)
while (%i < $lines(cookies.ini)) {
if (%mycookie > %highest) {
%highest = %mycookie
if (%highest == 1) {
msg $chan $nick is winning with %highest count. }
elseif (%highest > 1) {
msg $chan $nick is winning with %highest counts. }
else {
msg $chan No one has any count! Must try harder! }
}
else { return }
inc %i
}
}
我希望循环浏览文件,每当它找到高于%的最高数字(从0开始)时,将其放入变量中,然后移到下一个名称。 同样地,我知道使用$ nick是错误的,因为它会显示我的昵称,而不是从文件中获取昵称...我可以从文件中获取昵称吗?
由于
同样,在完全不相关的说明上。 mIRC中是否有一种方法可以为每个通道使用不同的脚本文件? 类似的东西:
if ($chan == #mychan) {
$remote == script1.ini }
else { }
答案 0 :(得分:1)
您可以使用$ini()
标识符遍历INI文件的内容。 $ini(cookies.ini, $chan, 0)
将返回在该频道上有记录的人的总数,而$ini(cookies.ini, $chan, N)
将返回第N个人的名字(然后可以作为$readini()
中的最后一个参数传递)。
此外,不要在while循环中包含if / elseif / else结构的消息;在找到最高记录后,您可能想要将结果通知一次:
on *:TEXT:!winning:#:{
var %i = 1, %highestCookies = 0, %highestUser
; This will run as long as %i is smaller than or equal to the number of lines in the ini section $chan
while (%i <= $ini(cookies.ini, $chan, 0)) {
; As we loop through the file, store the item name (the nickname) and the cookies (the value)
var %user = $ini(cookies.ini, $chan, %i), %cookies = $readini(cookies.ini, n, $chan, %user)
; Is this the highest found so far?
if (%cookies > %highestCookies) {
var %highestCookies = %cookies
var %highestUser = %user
}
inc %i
}
; Now that we have the correct values in our variables, display the message once
if (%highestCookies == 1) {
msg $chan %highestUser is winning with %highestCookies count.
}
elseif (%highestCookies > 1) {
msg $chan %highestUser is winning with %highestCookies counts.
}
else {
msg $chan No one has any count! Must try harder!
}
}
编辑:修复了导致找不到更高值的问题,因为%highestCookies被分配了$ null值而不是0。
至于你的第二个问题,不可能为不同的频道提供不同的脚本文件。但是,您可以修改事件捕获器中的位置参数,以便它只捕获特定通道上的事件。例如,这就是on TEXT
的样子:
; This event will only listen to the word "hello" in #directpixel and #stackoverflow
on *:TEXT:hello:#directpixel,#stackoverflow:{
msg $chan Hello $nick $+ !
}