http://board.ptokax.ath.cx/index.php?topic=6052.0
Need convert to new api.
on Russian
-- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |
--||\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|| |
--|| | |[ Перевод: by NRJ ]|| |
--|| | ]N& || |
--|| | 0Q M! ]D1 gNO9MM, R& || |
--|| | MK _gg,u ymw_,, "Bg ,p, M# 06 ,pag ,q0&_,s || |
--|| | ## ``"0& =MQ``TAz j&$ ]#& 0N &0 =qA``#pc ^MA^^` || |
--|| | M& &f ]09 i&2 =NA q#t l30Ng& jZp #E5 0Q || |
--|| | #M 4#6 ]MX lN9 *&D00 &B &0 ]06 4NH 0@ || |
--|| | MB ]#8 ]0! 4Q8 WNT ~0L NN ## ]0! 420 #8 || |
--|| | &M&gppg pqjW&pg ]M& ]0F ]0[ *NS ##gyx0~ ^"&pg#!" ~#ggp || |
--|| | `` _ _ `` _ _ ` _ _ ```_ _ __ _ _ || |
--|| | "N@M@0N#**FF+479*~M#O"9#0M!*7M8N0**N*MMNN#*78MFM8"*#0@@N~*M!7*7!M**#4F***F0@MF*! || |
--|| | ________________|| |
--|| | |[ By. St0ne db ]|| |
--||//////////////////////////////////////////////////////////////////////////////////////////////////////////////|| |
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/
--
----[v1.01 Что же интересненького? ]---------------------------------------------
--
-- by NRJ:
-- • Поддержка LUA 5.x
-- • Русский интерфейс
-- • Исправление ошибки с доступом к командам
--
-- • Добавление ссылок на веб-сайты, с возможностью просмотра юзерами.
-- • Контроль доступа по профилям.
-- • Команда поиска по базе.
-- • Возможность показывать ссылки по таймеру.
-- • 2 вида визуального оформления бота уже включено
--
----[FAQ]-----------------------------------------------------------------------
--
-- • Как создать свой собсвенный стиль?
--
-- Собственный стиль состоит из 6 переменных, названных sSep0 - sSep5.
-- Каждая переменная для удобства подписана.
--
-- В тексте можно использовать некоторые "волшебные" знаки:
-- \t - табуляция
-- \n - новая линия
--
-- Вот так выглядит стиль по умолчанию:
--
-- << Стиль A >>
-- sSep0 = " -=- ", ---/ Заголовок
-- sSep1 = "\t", --/ То, что между ID и описанием ссылки
-- sSep2 = " -=> ", -- То, что между описанием и самой ссылкой
-- sSep3 = "\r\n\t\t Добавил: ", -- То, что между ссылкой и информацией о том, кто ее добавил
-- sSep4 = " - Добавлено: ", --\ То, что между ником того, кто добавил ссылку и датой добавления [Расширенная информация]
-- sSep5 = "\r\n", ---\ Окончание
--
-- Как же это будет выглядеть в Птоке:
-- sSep2
-- |
-- |
-- \|/
-- -=- ID: 5 UK LUA Language Board -=> http://lua.uknnet.com
-- /T\ /T\ Добавил: st0ne_db - Добавлено: 30/05/06
-- | | /T\ /T\ /T\
-- | | | | |
-- | | | | |
-- sSep0 sSep1 sSep3 sSep4 sSep5
--
--
-- • Как показать нужную категорию по таймеру?
--
-- Данный скрипт позволяет Вам выводить информацию с веб-ссылками в выбранное Вами время.
-- Время обязательно должно быть в 24-часовом формате! Можно выводить все ссылки в случайном порядке
-- или же в заданное время выводить нужные вам линки.
--
-- например: ["04:20"] = "Выводим случайным образом не важно что",
--
-- Также по названиям категорий можно организовать поиск. Здесь можно задавать поиск, как все слово, так и его часть
--
-- например: ["04:20"] = "PtokaX",
-- ["16:20"] = "toka", <-- часть слова
--
-- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\
--|• Credit •||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/
--
-- - Serialize и SaveToFile функции из: 'Entry Bot v1.1e' (от jiten)
-- - Функция pairsByKeys из: http://www.lua.org/pil/19.3.html
-- - Бета-тестинг: Спасибо Stormbringer
-- - Весь остальной код написал St0ne db
-- -[ Обновления, Сообщения о багах..и другие LUA скрипты для PtokaX.. http://the-westside.no-ip.info ]-
--
-- - Поддержите сообщество LUA-
-- Х LUA Language Board: http://forum.ptokax.org
-- Х UK LUA Language Board : http://lua.uknnet.com
-- Х PtokaX Resources' Site: http://ptxscriptdb.psycho-chihuahua.net
-- Х PtokaX Wiki: http://ptxwiki.psycho-chihuahua.net/doku.php
--
--
-- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\
--|• Script Variables •||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/
tVar = {
--*************************************************************************************************************
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Конфигурация !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--*************************************************************************************************************
sPrefix = "!", ---- Префикс команд
------------------------------------------------------------------------------------------
sBot = "Ссылки", ---/ Имя бота
sBotD = "Архив ссылок хаба", --/ Описание бота
sBotE = "linkbot@ptokax.net", --\ Email адрес бота
sIsOP = 1, ---\ Бот ОП? (1=да,0=нет)
sResp = "main", ---- Куда будет отвечать бот? <main=общий чат, pm=личка>
------------------------------------------------------------------------------------------
sFolder = "LinkBot", ---/ Папка скрипта
sFile = "links.tbl", ---\ База данных скрипта
sSendRC = "on", ---/ Посылать менюшку? <on=да, off=нет>
sMenu = "Ссылки", ---\ Название меню
sUser = "off", ---- Только админ может добавлять ссылки
sNew = "main", ---- Сообщать о добавлении новых ссылок <main=в главный чат/pm=в личку/off=отключить>
sSpam = "off", ---- Показывать базу данных линков при входе <main=в главный чат/pm=в личку/off=отключить>
--*************************************************************************************************************
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Оформление !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--*************************************************************************************************************
sHdStr = "-- ", ---/ Заголовок
iHdSize = 55, ---\ Сколько раз будет повторяться
sExtNfo = "on", ---/ Показывать дополнительную информацию (кто и когда добавил ссылку) <on=показывать, off=не показывать>
sETime = "dmy", ---\ Формат даты (d=день, m=месяц, y=год)
----<<[ Стиль A ]>>-----------------------------------------------------------------------
sSep0 = " -=- ", ---/ Заголовок
sSep1 = "\t", --/ То, что между ID и описанием ссылки
sSep2 = " -=> ", -- То, что между описанием и самой ссылкой
sSep3 = "\r\n\t\t Добавил: ", -- То, что между ссылкой и информацией о том, кто ее добавил
sSep4 = " - Добавлено: ", --\ То, что между ником того, кто добавил ссылку и датой добавления [Расширенная информация]
sSep5 = "\r\n", ---\ Окончание
----<<[ Стиль B ]>>-----------------------------------------------------------------------
--sSep0 = "", ---/ Заголовок
--sSep1 = " -=+=- ", --/ То, что между ID и описанием ссылки
--sSep2 = " -=+=- ", -- То, что между описанием и самой ссылкой
--sSep3 = " -=+=- Добавил: ", -- То, что между ссылкой и информацией о том, кто ее добавил
--sSep4 = " Добавлено: ", --\ То, что между ником того, кто добавил ссылку и датой добавления [Расширенная информация]
--sSep5 = " -=+=-", ---\ Окончание
--*************************************************************************************************************
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Таймер !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--*************************************************************************************************************
sTimedShow = "on", ---- Показывать категории по таймеру <on=да, off=нет>
sTimed = "pm", ---- Показывать <main/pm>
iTime = 50, ---- Интервал таймера (в секундах)
sRTime = "off", ---- Показ случайных категорий <on=включить, off=выключить>
tTime = { ---- Время и название категории для показа (если не используется случайный показ)
["04:20"] = "PtokaX",
["16:20"] = "PtokaX",
},
}
-- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\
--|• Команды •|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/
tCmd = {
sAddCat = "addlcat", -- Добавить новую категорию [Админ]
sDel = "dellink", -- Удалить линк [Админ]
sDelCat = "dellcat", -- Удалить категорию [Админ]
sFixID = "fixids", -- Перенумеровать ID ссылок [Админ]
sAdd = "addlink", -- Добавить новую ссылку [Юзер/Админ]
sShow = "lshow", -- Показать категории и ссылки [Юзер]
sCShow = "lshowcat", -- Показать категории [Юзер]
sSearch = "searchl", -- Поиск по базе [Юзер]
}
-- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\
--|• Профили •|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/
-- Доступ для юзера [Показывать и добавлять ссылки] (1=доступ/0=запрет) -- **Дополнительные профили 1 и 2 созданы для поддержки Robocop'ом**
pUser = {
[0] = 1, -- =[Master]=
[1] = 1, -- =[OP]=
[2] = 1, -- =[ViP]=
[3] = 1, -- =[Reg]=
[4] = 1, -- =[Custom Profile 1]=
[5] = 1, -- =[Custom Profile 2]=
[-1] = 1, -- =[UnReg]=
}
-- Админ-доступ [Удаление категорий и линков, добавление категорий] (1=доступ/0=запрет)
pAdmin = {
[0] = 1, -- =[Master]=
[1] = 0, -- =[OP]=
[2] = 0, -- =[ViP]=
[3] = 0, -- =[Reg]=
[4] = 0, -- =[Custom Profile 1]=
[5] = 0, -- =[Custom Profile 2]=
[-1] = 0, -- =[UnReg]=
}
-- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\
--|• Основной код •||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/
function Main()
-- ПОДДЕРЖКА LUA 5.X
if (_VERSION == "Lua 5.1.1") or (_VERSION == "Lua 5.1") then
TableMaxSize = table.maxn
StringMatch = string.gmatch
elseif (_VERSION == "Lua 5.0.2") then
TableMaxSize = table.getn
StringMatch = string.gfind
end
local tempt = "";
for t in StringMatch(tVar.sETime,"%S") do
tempt = tempt.."\%"..t.."/";
end
tempt = string.sub(tempt,1,string.len(tempt)-1);
tVar.sETime = tempt;
frmHub:RegBot(tVar.sBot,tVar.sIsOP,tVar.sBotD,tVar.sBotE);
if tVar.sTimedShow == "on" then
SetTimer(tVar.iTime*1000);
StartTimer();
end
doLoadData();
end
function ChatArrival(user,data)
local data = string.sub(data,1,-2)
local s,e,sTrig,sCmd = string.find(data,"%b<>%s*(%S)(%S+)")
if sTrig == tVar.sPrefix then
local tScriptCmds = {
[tCmd.sAdd] = function(user,data)
if tVar.sUser == "on" then
if pAdmin[user.iProfile] ~= 1 then SendCmdErr(user); return 1; end
else
if not pUser[user.iProfile] == 1 then return 1; end
end
local _,_,sCatName,sURL,sDesc = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(%S+)%s+(.*)");
if sCatName and sURL and sDesc then
local found = false;
for catname in pairs(LinkData) do
if string.find(string.lower(catname),string.lower(sCatName)) then
found = catname;
for cats,v in pairsByKeys(LinkData[catname]) do
if string.lower(cats) == string.lower(sDesc) then
toUser(user,"*** Ошибка: Повторный ввод, "..sDesc)
return 1;
end
end
local IDNum = doIDNum("set",1); local current = os.date(tVar.sETime)
LinkData[catname][sDesc] = {}; LinkData[catname][sDesc]["URL"] = sURL; LinkData[catname][sDesc]["ID"] = IDNum;
LinkData[catname][sDesc]["User"] = user.sName; LinkData[catname][sDesc]["Date"] = current;
doSaveData();
end
end
if found == false then
toUser(user,"*** Ошибка: Категория "..sCatName.." не существует.");
else
toUser(user,"*** Ссылка добавлена: "..found..", ID: "..LinkData[found][sDesc]["ID"].." - "..sDesc.." - "..sURL);
if tVar.sNew == "main" then
SendToAll(tVar.sBot,"*** Ссылка добавлена: "..found..", - "..sDesc.." - "..sURL);
elseif tVar.sNew == "pm" then
SendPmToAll(tVar.sBot,"*** Ссылка добавлена: "..found..", - "..sDesc.." - "..sURL);
end
end
else
toUser(user,"\r\n"..showCatInfo().."\r\n*** Ошибка: Попробуйте - "..tVar.sPrefix..tCmd.sAdd.." <категория> <URL> <описание>");
end
return 1;
end,
[tCmd.sAddCat] = function(user,data)
if pAdmin[user.iProfile] ~= 1 then SendCmdErr(user); return 1; end
local _,_,sCatName = string.find(data,"%b<>%s+%S+%s+(%S+)");
if sCatName then
if not LinkData[sCatName] then
LinkData[sCatName] = {};
doSaveData();
toUser(user,"*** Категория: "..sCatName.." добавлена.");
else
toUser(user,"*** Ошибка! Категория "..sCatName.." уже существует!");
end
else
toUser(user,"\r\n"..showCatInfo().."*** Ошибка: Попробуйте - "..tVar.sPrefix..tCmd.sAddCat.." <категория>");
end
return 1;
end,
[tCmd.sDel] = function(user,data)
if pAdmin[user.iProfile] ~= 1 then SendCmdErr(user); return 1; end
local _,_,sIDNum = string.find(data,"%b<>%s+%S+%s+(.*)");
if sIDNum then
local sMsg = "\r\n"; local idChk = 0;
for ID in StringMatch(sIDNum, "%S+") do
idChk = doIDNum("check",ID);
if idChk == 0 then
sMsg = sMsg.."*** ID: "..tostring(ID).." удален.\r\n"
else
sMsg = sMsg.."*** ID: "..tostring(ID).." не найден.\r\n"
end
end
toUser(user,sMsg);
else
toUser(user,"*** Error: Enter ID to delete, Multiple ID's may be entered on one line.");
end
return 1;
end,
[tCmd.sDelCat] = function(user,data)
if pAdmin[user.iProfile] ~= 1 then SendCmdErr(user); return 1; end
local _,_,sCatName = string.find(data,"%b<>%s+%S+%s+(%S+)");
if LinkData[sCatName] then
LinkData[sCatName] = nil;
doSaveData();
toUser(user,"*** Категория: "..sCatName.." и все ссылки внутри нее были удалены");
else
toUser(user,"\r\n"..showCatInfo().."\r\n*** Ошибка: Введите название категории, которая подлежит удалению (все ссылки внутри категории будут удалены)");
end
return 1;
end,
[tCmd.sShow] = function(user,data)
if not pUser[user.iProfile] == 1 then return 1; end
local _,_,sCatName = string.find(data,"%b<>%s+%S+%s+(%S+)");
local sMsg = "";
if sCatName then -- show by cat
local found = false;
for cats in pairs(LinkData) do
if string.find(string.lower(cats),string.lower(sCatName)) then
found = true;
sMsg = sMsg.."\r\n\r\n"
.."\r\n\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n\t\t\t\t• "..cats.." •\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n";
for desc,v in pairsByKeys(LinkData[cats]) do
sMsg = sMsg..tVar.sSep0.."ID: "..LinkData[cats][desc]["ID"]..tVar.sSep1..desc..tVar.sSep2..LinkData[cats][desc]["URL"].." ";
if string.lower(tVar.sExtNfo) == "on" and LinkData[cats][desc]["User"] then
sMsg = sMsg..tVar.sSep3..LinkData[cats][desc]["User"]..tVar.sSep4..LinkData[cats][desc]["Date"]..tVar.sSep5.."\r\n";
elseif string.lower(tVar.sExtNfo) == "on" then
sMsg = sMsg..tVar.sSep3.."Неизвестно"..tVar.sSep4.."Неизвестно"..tVar.sSep5.."\r\n";
else
sMsg = sMsg..tVar.sSep5.."\r\n";
end
end
end
end
if found == true then
toUser(user,"Displaying by category.... "..sMsg);
else
toUser(user,"*** Error: Category "..sCatName.." does not exist.");
end
else -- show all
sMsg = sMsg.."Все ссылки.... \r\n\r\n"
for cats,v in pairsByKeys(LinkData) do
sMsg = sMsg.."\r\n\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n\t\t\t\t• "..cats.." •\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n";
if LinkData[cats] then
for desc,v in pairsByKeys(LinkData[cats]) do
sMsg = sMsg..tVar.sSep0.."ID: "..LinkData[cats][desc]["ID"]..tVar.sSep1..desc..tVar.sSep2..LinkData[cats][desc]["URL"].." ";
if string.lower(tVar.sExtNfo) == "on" and LinkData[cats][desc]["User"] then
sMsg = sMsg..tVar.sSep3..LinkData[cats][desc]["User"]..tVar.sSep4..LinkData[cats][desc]["Date"]..tVar.sSep5.."\r\n";
elseif string.lower(tVar.sExtNfo) == "on" then
sMsg = sMsg..tVar.sSep3.."Неизвестно"..tVar.sSep4.."Неизвестно"..tVar.sSep5.."\r\n";
else
sMsg = sMsg..tVar.sSep5.."\r\n";
end
end
end
end
toUser(user,sMsg);
end
return 1;
end,
[tCmd.sFixID] = function(user,data)
if pAdmin[user.iProfile] ~= 1 then SendCmdErr(user); return 1; end
doIDNum("fix",1)
toUser(user,"*** ID ссылок перенумерованы.");
return 1;
end,
[tCmd.sSearch] = function(user,data)
if not pUser[user.iProfile] == 1 then return 1; end
local _,_,sType,sTxt = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(.*)");
local sMsg = ""
if sType and sTxt then
if string.lower(sType) == "cat" then
for cats in pairs(LinkData) do
if string.find(string.lower(cats),string.lower(sTxt)) then
sMsg = sMsg.."- "..cats.."\r\n"
end
end
toUser(user,"*** Результат поиска: по категории\r\n\r\n"..sMsg)
elseif sType == "link" then
for cats in pairs(LinkData) do
for desc in pairs(LinkData[cats]) do
local url = LinkData[cats][desc]["URL"];
if string.find(string.lower(desc),string.lower(sTxt)) or string.find(string.lower(url),string.lower(sTxt)) then
sMsg = sMsg.."- "..cats.." : "..desc.." [ "..url.." ]\r\n"
end
end
end
toUser(user,"*** Результат поиска: по ссылке\r\n\r\n"..sMsg)
else
toUser(user,"*** Ошибка: Используйте - "..tVar.sPrefix..tCmd.sSearch.." <cat/link> <текст_который_ищем>");
end
else
toUser(user,"*** Ошибка: Используйте - "..tVar.sPrefix..tCmd.sSearch.." <cat/link> <текст_который_ищем>");
end
return 1;
end,
[tCmd.sCShow] = function(user,data)
if not pUser[user.iProfile] == 1 then return 1; end
toUser(user,"*** Лист категорий: \r\n\r\n"..showCatInfo());
return 1;
end,
}
if tScriptCmds[sCmd] then
return tScriptCmds[sCmd](user,data);
end
end
end
function NewUserConnected(user)
if string.lower(tVar.sSendRC) == "on" then
if user.bUserCommand then
if (pUser[user.iProfile] == 1) then
if (tVar.sUser ~= "on") then
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Добавить ссылку$<%[mynick]> "..tVar.sPrefix..tCmd.sAdd.." %[line:Название категории?] %[line:URL?] %[line:Описание?]|");
end
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Все ссылки$<%[mynick]> "..tVar.sPrefix..tCmd.sShow.."|");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Показать ссылки по категории$<%[mynick]> "..tVar.sPrefix..tCmd.sShow.." %[line:Название категории?]|");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Показать категории$<%[mynick]> "..tVar.sPrefix..tCmd.sCShow.."|");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Поиск$<%[mynick]> "..tVar.sPrefix..tCmd.sSearch.." %[line:cat/link?] %[line:Что ищем?]|");
end
if (pAdmin[user.iProfile] == 1) then
if (tVar.sUser == "on") then
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Добавить ссылку$<%[mynick]> "..tVar.sPrefix..tCmd.sAdd.." %[line:Название категории?] %[line:URL?] %[line:Описание?]|");
end
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Добавить категорию$<%[mynick]> "..tVar.sPrefix..tCmd.sAddCat.." %[line:Название категории?]|");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Удалить ссылку$<%[mynick]> "..tVar.sPrefix..tCmd.sDel.." %[line:Введите ID. Можно ввести несколько через пробел]|");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Удалить категорию$<%[mynick]> "..tVar.sPrefix..tCmd.sDelCat.." %[line:Имя категории?]|");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Перенумеровать ID ссылок$<%[mynick]> "..tVar.sPrefix..tCmd.sFixID.."|");
end
end
end
if tVar.sSpam ~= "off" then
local sMsg = "\r\n";
for cats,v in pairsByKeys(LinkData) do
sMsg = sMsg.."\r\n\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n\t\t\t\t• "..cats.." •\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n";
for desc,v in pairsByKeys(LinkData[cats]) do
sMsg = sMsg..tVar.sSep0.."ID: "..LinkData[cats][desc]["ID"]..tVar.sSep1..desc..tVar.sSep2..LinkData[cats][desc]["URL"].." ";
if string.lower(tVar.sExtNfo) == "on" and LinkData[cats][desc]["User"] then
sMsg = sMsg..tVar.sSep3..LinkData[cats][desc]["User"]..tVar.sSep4..LinkData[cats][desc]["Date"]..tVar.sSep5.."\r\n";
elseif string.lower(tVar.sExtNfo) == "on" then
sMsg = sMsg..tVar.sSep3.."Неизвестно"..tVar.sSep4.."Неизвестно"..tVar.sSep5.."\r\n";
else
sMsg = sMsg..tVar.sSep5.."\r\n";
end
end
end
if tVar.sSpam == "main" then
user:SendData(tVar.sBot, sMsg);
elseif tVar.sSpam == "pm" then
user:SendPM(tVar.sBot, sMsg);
end
end
end
function OnTimer()
local current = os.date("%H:%M");
local sMsg = "";
local found = false;
if tVar.tTime[current] then
if tVar.sRTime == "on" then
math.randomseed(os.clock());
found = true;
local tRandCat = { };
for cats in pairs(LinkData) do
table.insert(tRandCat, cats);
end
local rand = math.random(1,TableMaxSize(tRandCat));
local cats = tRandCat[rand];
sMsg = sMsg.."\r\n\r\n"
.."\r\n\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n\t\t\t\t• "..cats.." •\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n";
for desc,v in pairsByKeys(LinkData[cats]) do
sMsg = sMsg..tVar.sSep0.."ID: "..LinkData[cats][desc]["ID"]..tVar.sSep1..desc..tVar.sSep2..LinkData[cats][desc]["URL"].." ";
if string.lower(tVar.sExtNfo) == "on" and LinkData[cats][desc]["User"] then
sMsg = sMsg..tVar.sSep3..LinkData[cats][desc]["User"]..tVar.sSep4..LinkData[cats][desc]["Date"]..tVar.sSep5.."\r\n";
elseif string.lower(tVar.sExtNfo) == "on" then
sMsg = sMsg..tVar.sSep3.."Неизвестно"..tVar.sSep4.."Неизвестно"..tVar.sSep5.."\r\n";
else
sMsg = sMsg..tVar.sSep5.."\r\n";
end
end
else
for cats in pairs(LinkData) do
if string.find(string.lower(cats),string.lower(tVar.tTime[current])) then
found = true;
sMsg = sMsg.."\r\n\r\n"
.."\r\n\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n\t\t\t\t• "..cats.." •\r\n "..string.rep(tVar.sHdStr,tVar.iHdSize).."\r\n";
for desc,v in pairsByKeys(LinkData[cats]) do
sMsg = sMsg..tVar.sSep0.."ID: "..LinkData[cats][desc]["ID"]..tVar.sSep1..desc..tVar.sSep2..LinkData[cats][desc]["URL"].." ";
if string.lower(tVar.sExtNfo) == "on" and LinkData[cats][desc]["User"] then
sMsg = sMsg..tVar.sSep3..LinkData[cats][desc]["User"]..tVar.sSep4..LinkData[cats][desc]["Date"]..tVar.sSep5.."\r\n";
elseif string.lower(tVar.sExtNfo) == "on" then
sMsg = sMsg..tVar.sSep3.."Неизвестно"..tVar.sSep4.."Неизвестно"..tVar.sSep5.."\r\n";
else
sMsg = sMsg..tVar.sSep5.."\r\n";
end
end
end
end
end
if found == true then
if tVar.sTimed == "main" then
SendToAll(tVar.sBot,"["..current.."] Категория: "..tVar.tTime[current].."\r\n"..sMsg);
elseif tVar.sTimed =="pm" then
SendPmToAll(tVar.sBot,"["..current.."] Категория: "..tVar.tTime[current].."\r\n"..sMsg);
end
else
SendToOps(tVar.sBot,"*** Ошибка: Категория "..tVar.tTime[current].." не существует.");
end
end
end
-- Misc Functions
function toUser(curUser,sMsg)
if tVar.sResp == "pm" then
curUser:SendPM(tVar.sBot,sMsg);
else
curUser:SendData(tVar.sBot,sMsg);
end
end
function showCatInfo()
local sMsg = string.rep("-",20).."\r\n Категории:\r\n"..string.rep("-",20).."\r\n\r\n";
for cats,v in pairsByKeys(LinkData) do
local lNum = function(cat) local cnt = 0; for c in pairs(LinkData[cat]) do cnt=cnt+1; end return tostring(cnt); end
sMsg = sMsg.." Название категории: "..cats.."\r\n Кол-во ссылок: "..lNum(cats).."\r\n\r\n"
end
return sMsg;
end
function doIDNum(sType,IDNum)
if sType == "fix" then
local curNum = 1
if LinkData ~= nil then
for cats,v in pairsByKeys(LinkData) do
if LinkData[cats] ~= nil then
for desc,v in pairsByKeys(LinkData[cats]) do
LinkData[cats][desc]["ID"] = curNum;
curNum = curNum + 1;
end
end
end
end
doSaveData();
else
if LinkData ~= nil then
for cats,v in pairsByKeys(LinkData) do
if LinkData[cats] ~= nil then
for desc,v in pairsByKeys(LinkData[cats]) do
if sType == "set" then --set
local curNum = tonumber(LinkData[cats][desc]["ID"])
if curNum >= IDNum then
IDNum = curNum + 1;
end
else --check & delete
if tonumber(LinkData[cats][desc]["ID"]) == tonumber(IDNum) then
LinkData[cats][desc] = nil; -- deleted
return 0;
end
end
end
end
end
end
end
return IDNum;
end
-- File Functions
function doLoadData()
if loadfile(tVar.sFolder.."/"..tVar.sFile) then
dofile(tVar.sFolder.."/"..tVar.sFile);
else
local file = io.open(tVar.sFolder.."/"..tVar.sFile , "a" );
local data = "LinkData = {\r\n}";
io.output(tVar.sFolder.."/"..tVar.sFile);
file:write( data );
file:close();
dofile(tVar.sFolder.."/"..tVar.sFile);
end
end
function doSaveData()
SaveToFile(tVar.sFolder.."/"..tVar.sFile,LinkData,"LinkData")
doLoadData()
end
function SendCmdErr(user)
user:SendData(tVar.sBot, "*** Ошибка: У Вас нет доступа к данной команде!");
end
-- Function from: http://www.lua.org/pil/19.3.html --
function pairsByKeys (t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0
local iter = function ()
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
-- Functions from: Entry Bot 1.1e (by jiten) --
Serialize = function(tTable,sTableName,hFile,sTab)
sTab = sTab or "";
hFile:write(sTab..sTableName.." = {\n");
for key,value in pairs(tTable) do
if (type(value) ~= "function") then
local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
if(type(value) == "table") then
Serialize(value,sKey,hFile,sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
hFile:write(sTab.."\t"..sKey.." = "..sValue);
end
hFile:write(",\n");
end
end
hFile:write(sTab.."}");
end
SaveToFile = function(file,table,tablename)
local hFile = io.open(file,"w+") Serialize(table,tablename,hFile); hFile:close()
end
OpDisconnected=UserDisconnected
OpConnected=NewUserConnected
Hi
This script its for using in HubLink?