1

最近我将我的 ptokax 更新为 0.5.3,从那以后我的 votekick 脚本停止工作,因为我的脚本将其他在线用户的输入作为 1 或 2 接受或拒绝用户被踢或不被踢,但现在只要用户输入 1或 2 脚本已停止接受输入并将其插入表中,我怀疑它可能是由于某些语法更改。请看一下我的脚本并提出建议。

   data = " <Nick> 2" -- this is the way script takes input frm dc chat
                s,e,vote= string.find(data,"%b<>%s(.+)")

                if vote == "1" then
                    table.insert(votesPlus,user.sNick)
                    Core.SendToAll("*--"..user.sNick.." accepts--")
                    if #votesPlus == votes or # votesMinus == votes then
                        stop(nTimerId)
                    end
                return true
                elseif vote == "2" then
                    table.insert(votesMinus,user.sNick)
                    Core.SendToAll("*--"..user.sNick.." denies--")
                    if #votesPlus == votes or # votesMinus == votes then
                        stop(nTimerId)
                    end
                    return true
                else
                    -- the user is not voting even when poll active
                end
4

1 回答 1

0
  1. 请说明您使用的是发布用于 Lua 5.3.0 还是 5.1.5 的 PtokaX。
  2. NMDC 集线器协议定义聊天消息以以下格式发送:

    <Nick> the message|
    

    where|充当分隔符。

除此之外,我看不到您的脚本有任何问题。不过,您可以优化性能:

local vote = data:match "%b<>%s(%d)"
-- since you only want a single digit to be matched
-- also, use local variable whenever possible

if vote == "1" then
    table.insert(votesPlus, user.sNick)
    Core.SendToAll( "*--"..user.sNick.." accepts--" )
    if #votesPlus == votes or #votesMinus == votes then
        stop( nTimerId )
    end
    return true
elseif vote == "2" then
    table.insert(votesMinus, user.sNick)
    Core.SendToAll( "*--"..user.sNick.." denies--" )
    if #votesPlus == votes or #votesMinus == votes then
        stop( nTimerId )
    end
    return true
else
    -- the user is not voting even when poll active
    -- return false so that further scripts might be able to process it
    return false
end

PS:我认为您还应该检查同一用户是否投票两次!此外,您可以输入以下代码:

if #votesPlus == votes or #votesMinus == votes then
    stop( nTimerId )
end

OnTimer函数调用中。

于 2015-04-29T20:53:49.760 回答