PtokaX forum

Lua 5.3/5.2/5.1 Scripts (for PtokaX 0.4.0.0 and newer) => Conversion Requests => Topic started by: Spatz on 07 May, 2008, 05:42:25

Title: Link Bot to PtokaX 0.4.0.0
Post by: Spatz on 07 May, 2008, 05:42:25
http://board.ptokax.ath.cx/index.php?topic=6052.0
Need convert to new api.
Title: Re: Link Bot to PtokaX 0.4.0.0
Post by: Spatz on 02 June, 2008, 04:07:03
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:Описание?]&#124;");
end
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Все ссылки$<%[mynick]> "..tVar.sPrefix..tCmd.sShow.."&#124;");
                user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Показать ссылки по категории$<%[mynick]> "..tVar.sPrefix..tCmd.sShow.." %[line:Название категории?]&#124;");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Показать категории$<%[mynick]> "..tVar.sPrefix..tCmd.sCShow.."&#124;");
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Поиск$<%[mynick]> "..tVar.sPrefix..tCmd.sSearch.." %[line:cat/link?] %[line:Что ищем?]&#124;");
    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:Описание?]&#124;");
end
user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Добавить категорию$<%[mynick]> "..tVar.sPrefix..tCmd.sAddCat.." %[line:Название категории?]&#124;");
      user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Удалить ссылку$<%[mynick]> "..tVar.sPrefix..tCmd.sDel.." %[line:Введите ID. Можно ввести несколько через пробел]&#124;");
      user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Удалить категорию$<%[mynick]> "..tVar.sPrefix..tCmd.sDelCat.." %[line:Имя категории?]&#124;");
      user:SendData("$UserCommand 1 3 "..tVar.sMenu.."\\Админ\\Перенумеровать ID ссылок$<%[mynick]> "..tVar.sPrefix..tCmd.sFixID.."&#124;");
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
Title: Re: Link Bot to PtokaX 0.4.0.0
Post by: Genius on 02 June, 2008, 05:50:13
Hi

This script its for using in HubLink?