77 lines
2.3 KiB
Lua
77 lines
2.3 KiB
Lua
local inspect = require("inspect")
|
|
|
|
DB:exec([[DROP TABLE channel_members]])
|
|
DB:exec([[CREATE TABLE IF NOT EXISTS channel_members (
|
|
nick VARCHAR(100) NOT NULL,
|
|
channel VARCHAR(100) NOT NULL,
|
|
PRIMARY KEY (nick, channel))]])
|
|
|
|
local function update (channel, from, action)
|
|
local stmt = DB:prepare("INSERT OR REPLACE INTO channel_members VALUES (?, ?)")
|
|
stmt:bind_values(from, channel)
|
|
stmt:step()
|
|
stmt:finalize()
|
|
end
|
|
|
|
local function remove (channel, from, action)
|
|
local stmt = DB:prepare("DELETE FROM channel_members WHERE nick = ? AND channel = ?")
|
|
stmt:bind_values(from, channel)
|
|
stmt:step()
|
|
stmt:finalize()
|
|
end
|
|
|
|
local function botcheck (name)
|
|
local bots = {"botmeat", "11bot", "arduinobot", "commanderroot"}
|
|
for _,bot in pairs(bots) do
|
|
if name == bot then return true else return false end
|
|
end
|
|
end
|
|
|
|
local function chanusers (chan)
|
|
local stmt = DB:prepare("SELECT nick FROM channel_members WHERE channel = ? ORDER BY NICK")
|
|
local status = stmt:bind_values(chan:lower())
|
|
local result = {}
|
|
if status == sqlite3.OK then
|
|
for row in stmt:nrows() do
|
|
if "#"..row.nick ~= chan and not botcheck(row.nick) then
|
|
table.insert(result, row.nick)
|
|
end
|
|
end
|
|
end
|
|
stmt:finalize()
|
|
return result
|
|
end
|
|
|
|
on_join.give = function(target, from)
|
|
update(target, from)
|
|
end
|
|
|
|
callback.give = function(target, from)
|
|
update(target, from)
|
|
end
|
|
|
|
on_part.give = function (target, from, msg)
|
|
remove(target, from)
|
|
end
|
|
|
|
plugin.gacount = function (target, from, arg)
|
|
if arg ~= nil and arg ~= "" then chan = arg else chan = target end
|
|
local players = chanusers(chan)
|
|
irc.say(target, "I found " .. #players .. " eligible users in channel " .. chan .. "." )
|
|
end
|
|
|
|
plugin.gausers = function (target, from, arg)
|
|
if arg ~= nil and arg ~= "" then chan = arg else chan = target end
|
|
local players = chanusers(chan)
|
|
if #players > 0 then irc.say(target, inspect(players)) else irc.say(target, "No users found!") end
|
|
end
|
|
|
|
plugin.giveaway = function (target, from, arg)
|
|
if arg ~= nil and arg ~= "" then chan = arg else chan = target end
|
|
local players = chanusers(chan)
|
|
if #players < 5 then
|
|
irc.say(target, "I found less than 5 eligible users in channel " .. chan .. ", get some more players in there!")
|
|
else
|
|
irc.say(target, "I chose >>> " .. players[math.random(#players)] .. " <<< out of " .. #players .. " eligible users!")
|
|
end
|
|
end
|