Код
-- Скрипт показа общего числа сообщений чата в топике.
-- Автор: Ksan (aka Trans)
-- Дата: 06-03-2011
-- Где: г.Томск
-- Скрипт показа общего числа сообщений чата в топике.
-- При необходимости освободить топик для иных сообщений оператор может через меню отменить показ числа сообщений в топике. Потом сможет так же через то же меню восстановить.
-- Папка "MessCount" должна быть создана заранее.
local sBot = SetMan.GetString(21)
local bTopic = true
local sCountFile = Core.GetPtokaXPath().."scripts/MessCount/MessCount.txt"
tProfiles = { -- Кто может ставить/отменять показ в топике
[0] = 1, -- Мастер
[1] = 1, -- ОПератор
[2] = 0, -- VIP
}
function OnStartup()
dofile(sCountFile)
if tMessCount == nil then
tMessCount = { }
tMessCount["MessCount"] = 0
end
end
function OpConnected(tUser)
Core.SendToUser(tUser, "$UserCommand 1 3 << АДМИНКА >>\\Число сообщений в топик$<%[mynick]> !messcount&#*124;") -- тут звёздочку в конце удалить
end
function ChatArrival(tUser, sData)
-- Core.GetUserAllData(tUser)
local sData = sData:sub(1,-2)
local sCmd = sData:match("^%b<>%s+(%S+)")
if tProfiles[tUser.iProfile] == 1 and sCmd == "!messcount" then
bTopic = not bTopic
if bTopic == true then
Core.SendToUser(tUser, "<"..sBot.."> Число сообщений будет показываться в топике.")
else
Core.SendToUser(tUser, "<"..sBot.."> Число сообщений не будет показываться в топике.")
end
return true
end
tMessCount["MessCount"] = tMessCount["MessCount"] + 1
if bTopic == true then
SetMan.SetString(10, "В чате написано "..tMessCount["MessCount"].." сообщений") -- сам текст можете править как вам угодно
end
SaveToFile(sCountFile, tMessCount, "tMessCount")
collectgarbage()
-- return true
end
function OnExit()
SaveToFile(sCountFile, tMessCount, "tMessCount")
end
function SaveToFile(file , table , tablename)
local handle = io.open(file,"w+")
handle:write(Serialize(table, tablename))
handle:flush()
handle:close()
end
function Serialize(tTable, sTableName, sTab)
assert(tTable, "tTable equals nil");
assert(sTableName, "sTableName equals nil");
assert(type(tTable) == "table", "tTable must be a table!");
assert(type(sTableName) == "string", "sTableName must be a string!");
sTab = sTab or "";
sTmp = ""
sTmp = sTmp..sTab..sTableName.." = {\n"
for key, value in pairs(tTable) do
local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
if(type(value) == "table") then
sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
end
sTmp = sTmp..",\n"
end
sTmp = sTmp..sTab.."}"
collectgarbage()
return sTmp
end