/* СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ ССТИЛИ */

[#DCBEELINEKZ] БИЛАЙН ХАБЫ КАЗАХСТАН

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



СКРИПТЫ

Сообщений 11 страница 20 из 23

1

11

Скрипт для конвертирования бинарной базы обратно в XML

Скрипт предназначен для конвертирования бинарной базы пользователей,
введенной в PtokaX 0.5.0.0, обратно в файл XML.

ВНИМАНИЕ!
Скрипт не умеет парсить бинарную базу, он получает данные о зарегистрированных
юзерах из памяти PtokaX при помощи API Lua. Следовательно, необходимо запускать
его непосредственно на хабе с бинарной базой.

Скрипт

--[[##################################################################################

Скрипт предназначен для конвертирования бинарной базы пользователей,
введенной в PtokaX 0.5.0.0, обратно в файл XML.

ВНИМАНИЕ!
Скрипт не умеет парсить бинарную базу, он получает данные о зарегистрированных
юзерах из памяти PtokaX при помощи API Lua. Следовательно, необходимо запускать
его непосредственно на хабе с бинарной базой.

###################################################################################]]

function OnStartup()
function XMLEscape(str)
    str=str:gsub("&","&")
    for i,v in pairs({["'"] = "&apos;", ["\""] = "&quot;", ["<"] = "&lt;", [">"] = "&gt;", }) do
    str=str:gsub(i,v)
    end
    return str
end
local f = io.open(Core.GetPtokaXPath().."cfg/RegisteredUsers.xml","w")
f:write("<?xml version=\"1.0\" encoding=\"windows-1252\" standalone=\"yes\" ?>\n<RegisteredUsers>")
for _,v in ipairs(RegMan.GetRegs()) do
    f:write("\n    <RegisteredUser>\n        <Nick>",XMLEscape(v.sNick),
        "</Nick>\n        <Password>",XMLEscape(v.sPassword),
        "</Password>\n        <Profile>",v.iProfile,
        "</Profile>\n    </RegisteredUser>")
end
f:write("\n</RegisteredUsers>\n")
f:close()
end

RegisteredUsers.xml

<?xml version="1.0" encoding="WINDOWS-1252" standalone="true"?>

-<RegisteredUsers>

-<RegisteredUser>

<Nick>Example_Nick</Nick>

<Password>Example_Password</Password>

<Profile>3</Profile>

<!-- 0 for master, 1 for operator, 2 for vip, 3 for reg -->

</RegisteredUser>

</RegisteredUsers>

12

БОТ ПОЧТАЛЬОН
Prontor

Код:
bot = "Почтальон"
botDesc = "Бот рассылает сообщения."	--Описание бота
botTag = "Version 1.0"    	--Тэг бота
botEmail = "your@mail.me"    --еМайл бота

OnStartup = function()
	Core.RegBot(bot, botDesc.."<"..botTag..">", botEmail, true)
end

ToArrival = function(user, data)
	data = data:sub(1,-2)
	local sBot, nick, msg = data:match"$To:%s+(%S+)%s+From:%s+(%S+)%s+$%b<>%s+(.*)"
	if sBot == bot then
    for i, v in pairs(Core.GetOnlineUsers()) do
    	if v.sNick ~= nick then
        Core.SendPmToNick(v.sNick, bot, "*** Сообщение от пользователя <"..nick..">:\n\n"..msg)
    	end
    end
    Core.SendPmToUser(user, bot, "Ваше сообщение успешно отправлено.")
    return true
	end
end
    

13

ЛОГ ВХОДА ПОЛЬЗОВАТЕЛЕЙ
© 2017 Kinsler
Версия API: API2
dchub://familyhub.ru

При первом запуске автоматически создаётся папка в папке "scripts" с лог-файлом.
Скрипт желательно ставить самым первым в списке скриптов.




Код:
local Folder = "Log_users"  -- Имя папки для лог-файла (можно изменить по желанию)

function Start() _ = {} end

function OnStartup()
	folder = Core.GetPtokaXPath().."/scripts/"..Folder.."/"
	set = folder.."log_users.txt"	-- имя лог-файла (можно изменить по желанию)
	if loadfile(set) then
    dofile(set)
	else
    local _ = "\""
    os.execute("mkdir ".._..folder.._)
    Start()
	end
	if loadfile(set) then dofile(set) end
	Save()
end

function UserConnected(user)
	_ = {}
	_[os.date("%d.%m.%Y  %X")] = "Вход пользователя <"..user.sNick.."> с IP-адреса: ["..user.sIP.."]"
	Save()
end
OpConnected, RegConnected = UserConnected, UserConnected

function Save_Serialize(tTable, sTableName, hFile, sTab)
	sTab = sTab or "";
	hFile:write(sTab..sTableName);
	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
    	Save_Serialize(value, sKey, hFile, sTab);
    else
    	local sValue = (type(value) == "string") and string.format(" %q ",value) or tostring(value);
    	hFile:write( sTab..sKey..sValue);
    end
    hFile:write( "\n");
	end
	hFile:write(sTab);
end

function Save() Save_file(set, _, "-") end

function Save_file(file, table, tablename)
	local hFile = io.open (file, "a")
	Save_Serialize(table, tablename, hFile);
	hFile:close()
end

14

МОЙ СБОРНИК СКРИПТОВ В РОУТЕРЕ
https://cloud.mail.ru/public/6GCm/aBg9NQRzZ

15

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

16

Срипт Для Скрывания Шары У Юзеров, API1, API2

http://mydc.ru/ipb.html?act=attach& … amp;id=108

Скрипт

function OnStartup()
sTable["loadfile"]()
end

function UserConnected(user)
Core.GetUserAllData(user)
if sTable.tAllowList[user.iProfile] == 1 then
    Core.SendToNick(user.sNick,"$UserCommand 1 3 "..sTable["Menu"].."\\Hide Share$<%[mynick]> !hideshare|")
    Core.SendToNick(user.sNick,"$UserCommand 1 3 "..sTable["Menu"].."\\UN-Hide Share$<%[mynick]> !unhideshare|")
         
end

  tmr = TmrMan.AddTimer(1000)
  Core.SendToNick(user.sNick,"*** Warning: certain users are hiding their shares in this hub.")
end

OpConnected = UserConnected

function OnTimer(tmr)
for a,b in pairs(sTable.Hiders) do
    Nick = Core.GetUser(a,true)
    if Nick then
    s,e,name,desc,speed,email,share = string.find(Nick.sMyInfoString, "$MyINFO $ALL (%S+)%s+([^$]*)$ $([^$]*)$([^$]*)$([^$]+)")
    Core.SendToAll( "$MyINFO $ALL "..name.." "..desc.."$ $"..speed.."$"..email.."$0$")
    end
end
  TmrMan.RemoveTimer(tmr)
end

function ChatArrival(user,data)
Core.GetUserAllData(user)
  local s, e, cmd = string.find(data, "%b<>%s+(%S+).*|")
if sTable.tAllowList[user.iProfile] == 1 and cmd and sTable.commands[cmd] then
    return sTable.commands[cmd](user, data)
  end
end

function BlockgetList(user,data,bRev)
  local ret
  local nick
  data=string.sub(data,1,-2)
  if bRev then
    _,_,nick = string.find(data, "%S+%s+%S+%s+(%S+)")
  else
    _,_,nick = string.find(data, "%S+%s+(%S+)")
  end
--   SendToAll(nick)
  if nick and sTable.Hiders[nick] then
    Core.SendToNick(user.sNick,"*** You cannot get the list of "..nick.." because he explicitly disallowed it.")
    ret=1
  end
  return ret
end

function ConnectToMeArrival(user,data)
Core.GetUserAllData(user)
  return BlockgetList(user,data,false)
end

function RevConnectToMeArrival(user,data)
Core.GetUserAllData(user)
  return BlockgetList(user,data,true)
end

function SearchArrival(user,data)
Core.GetUserAllData(user) -- searches aren't sent to hiders
  for _,usr in Core.GetOnlineUsers(true) do
    if not sTable.Hiders[user.sNick] then
      Core.SendToNick(user.sNick,data)
    end
  end
  return true
end

sTable = {
["Menu"] = "Share-Hider",    --//  Sets the Name used in the right click Menu
["Bot"] = SetMan.GetString(21), --//   Sets the Bot name to the same as set in Ptokax
Hiders = {},

tAllowList = {
    [0] = 1,    --// Master Profile (enabled)
    [1] = 1,    --// Ops Profile    (enabled)
    [2] = 0,    --// VIP Profile    (Disabled)    --// Profiles Allowed to use the command  1 = yes  / 0 = No
    [3] = 0,    --// REG Profile    (Disabled)
    [4] = 0,    --// Moderator Profile (Disabled)
    [5] = 0,    --// Netfounder Profile (Disabled)
},

commands = {
["!unhideshare"] = function(user, data)
    if sTable.Hiders[user.sNick] then
        local s,e,name,desc,speed,email,share = string.find(user.sMyInfoString, "$MyINFO $ALL (%S+)%s+([^$]*)$ $([^$]*)$([^$]*)$([^$]+)")
        Core.SendToAll( "$MyINFO $ALL "..name.." "..desc.."$ $"..speed.."$"..email.."$"..share.."$")
        sTable.Hiders[user.sNick] = nil
        sTable["SaveTable"]()
        Core.SendToNick(user.sNick,"<"..sTable["Bot"].."> Your Share Has been added to userlist!")
    end
    return true
    end,

    ["!hideshare"] = function(user, data)
        local s,e,name,desc,speed,email,share = string.find(user.sMyInfoString, "$MyINFO $ALL (%S+)%s+([^$]*)$ $([^$]*)$([^$]*)$([^$]+)")
        Core.SendToAll( "$MyINFO $ALL "..name.." "..desc.."$ $"..speed.."$"..email.."$0$")
        sTable.Hiders[user.sNick] = 1
        sTable["SaveTable"]()
        Core.SendToNick(user.sNick,"<"..sTable["Bot"]..">  Your Share Has been removed from userlist!")
    return true
    end ,
},

["loadfile"] = function()
local f,e = io.open("ShareHidden.lst","r")
    if f then
    while 1 do
        line = f:read("*l")
        if line ==  nil then
            break
        end
        local s,e,InfoOne,InfoTwo = string.find(line, "(.+)$$$(.+)")
            if InfoOne ~= nil then
            sTable.Hiders[InfoOne]=InfoTwo
            end
    end
    f:close(f)
    else
    f,e = io.open("ShareHidden.lst", "w" )
    f:write()
    f:close()
    end
end,

["SaveTable"] = function()
    local f,e = io.open("ShareHidden.lst", "w" )
    for aaa,bbb in pairs(sTable.Hiders) do
        f:write(aaa.."$$$"..bbb.."\n")
    end
     f:close()
end,
}
RegConnected = UserConnected

17

NoConFlood 1.00
© 2012 alex82
PtokaX 0.4.0.x/0.4.1.x/0.5.0.x, LUA 5.1

Как известно, подавляющее большинство современных клиентов имеет опцию определения
IP-адресов юзеров в чате. И, в результате того, что эта опция по умолчанию включена,
каждый юзер крупного хаба, написавший сообщение в чат, получает в качестве бонуса
небольшую DDoS-атаку. Данный скрипт призван бороться с этим явлением.

Работает он следующим образом: Перед отправкой юзером первого сообщения, его IP-адрес
рассылается всем юзерам хаба. С этого момента скрипт считает, что данный юзер намерен
общаться в чате, и будет отправлять его IP-адрес всем новоприбывшим юзерам.

Дополнительная функция скрипта - подмена IP-адреса для указанных юзеров. Функция
реализована не до конца - как только как только кто-то захочет соединиться с юзером,
чей адрес подменен при помощи данного скрипта, ему сразу же станет известен реальный
IP-адрес. Но, при разработке скрипта ставилась задача лишь избавиться от флуда запросами
на соединение, и данная функция была реализована лишь постольку, поскольку в скрипте
уже есть все необходимое для рассылки IP-адресов.

Код:
tFakeIP = {
--	["Admin"] = "127.0.0.1",
}

--###################################################################################

tChatUser = {}
sUserIP = nil

function ChatArrival(user,data)
	local cmd = data:match("^%b<>["..SetMan.GetString(29):gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1").."]([a-zA-Z]+).*|$")
	if not tChatUser[user.sNick] and (not cmd or cmd:lower() == "me") then
    Core.SendToAll("$UserIP "..user.sNick.." "..(tFakeIP[user.sNick] or user.sIP).."$$")
    tChatUser[user.sNick] = tFakeIP[user.sNick] or user.sIP
    RebuildUserIP()
	end
end

function UserConnected(user)
	if sUserIP then
    Core.SendToUser(user,sUserIP)
	end
end
OpConnected, RegConnected = UserConnected, UserConnected

function UserDisconnected(user)
	if tChatUser[user.sNick] then
    tChatUser[user.sNick] = nil
    RebuildUserIP()
	end
end
OpDisconnected, RegDisconnected = UserDisconnected, UserDisconnected

function RebuildUserIP()
	if next(tChatUser) then
    sUserIP = "$UserIP "
    for i,v in pairs(tChatUser) do
    	sUserIP = sUserIP..i.." "..v.."$$"
    end
	else
    sUserIP = nil
	end
end

18

Скрипт создаёт менюшки к встроенным командам PtokaX - смена топика, управление скриптами, баны, и.т.д. Также добавлены команды:
!disconnect - отключение юзера от хаба без последующего временного бана.
!scriptmoveup и !scriptmovedown - перемещение скриптов соответственно вверх и вниз.
!frombot - отправка сообщения юзеру от имени главного бота хаба.

Дополнительные настройки прав доступа не требуются - скрипт использует настройки профилей PtokaX.

Свернутый текст

--###################################################################################
-- HubMenu 1.01 by alex82
-- API2 (PtokaX 0.4.x.x)
-- http://mydc.ru/topic1413.html

-- Mod by Tsd 06.01.2013

--###################################################################################

Menu = "Меню хаба\\"
UserMenu = "Юзер\\"
AdminMenu = "Управление\\"

ScriptEasy = false --Упрощенное меню управления скриптами (true - да, false - нет)
TempOP = false --Включение меню "Временный оператор" (true - да, false - нет)
RestartHub = false --Включение меню "Перезапуск хаба" (true - да, false - нет)
Prefix = "" --Префикс команд хаба. Если не указан, используется первый префикс из настроек хаба.
sEnable = "+" -- Символ перед скриптом в меню, обозначающий что скрипт включен.
--###################################################################################

function OnStartup()
if Prefix == "" then
    Prefix = SetMan.GetString(29):sub(1,1)
end
local tTmp = SetMan.GetHubBot()
bot = tTmp.sNick
end

function UserConnected(user)
local t = ProfMan.GetProfilePermissions(user.iProfile)
--Глобальные команды
Core.SendToUser(user,"$UserCommand 1 3 "..Menu.."Помощь$<%[mynick]> "..Prefix.."help|")
Core.SendToUser(user,"$UserCommand 1 3 "..Menu.."Показать ваш IP адрес$<%[mynick]> "..Prefix.."myip|")
if t then
    --Меню юзера
    if t.bGetInfo then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Показать информацию$<%[mynick]> "..Prefix.."getinfo %[nick]|")
    if t.bDrop or t.bKick or t.bTempBan or t.bBan or t.bAddRegUser or t.bDelRegUser or t.bMassMsg then
        Core.SendToUser(user,"$UserCommand 0 2")
    end
    end
    if t.bAddRegUser then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Регистрация\\Зарегистрировать пользователя$<%[mynick]> "..Prefix.."addreguser %[nick] %[line:Пароль] %[line:Имя профиля]|")
    end
    if t.bDelRegUser then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Регистрация\\Удалить регистрацию$<%[mynick]> "..Prefix.."delreguser %[nick]|")
    end
    if t.bMassMsg then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Сообщение от имени бота$<%[mynick]> "..Prefix.."frombot %[nick] %[line:Введите текст сообщения]|")
    end
    if t.bTempOP and TempOP then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Временный оператор$<%[mynick]> "..Prefix.."op %[nick]|")
    end
    if (t.bAddRegUser or t.bDelRegUser or t.bMassMsg or (t.bTempOP and TempOP)) and (t.bDrop or t.bKick or t.bTempBan or t.bBan) then
    Core.SendToUser(user,"$UserCommand 0 2")
    end
    if t.bDrop then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Отключить$<%[mynick]> "..Prefix.."disconnect %[nick]|")
    end
    if t.bKick then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Кикнуть$<%[mynick]> "..Prefix.."drop %[nick] %[line:Причина]|")
    end
    if t.bTempBan then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Бан 1 час$<%[mynick]> "..Prefix.."nicktempban %[nick] 1h %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Бан 24 часа$<%[mynick]> "..Prefix.."nicktempban %[nick] 1d %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Временный бан...$<%[mynick]> "..Prefix.."nicktempban %[nick] %[line:Время (m = минут, h = часов, d = дней, w = недель)] %[line:Причина]|")
    end
    if t.bBan then
    Core.SendToUser(user,"$UserCommand 1 2 "..UserMenu.."Постоянный бан$<%[mynick]> "..Prefix.."nickban %[nick] %[line:Причина]|")
    end
    --Управление хабом
    if t.bTopic then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Топик\\Установить топик$<%[mynick]> "..Prefix.."topic %[line:Введите текст]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Топик\\Очистить топик$<%[mynick]> "..Prefix.."topic off|")
    end
    if t.bRefreshTxt then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Текстовые файлы\\Перезап. текст. файлы$<%[mynick]> "..Prefix.."reloadtxt|")
    end
    if t.bMassMsg then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Рассылка сообщений\\Массовая рассылка$<%[mynick]> "..Prefix.."massmsg %[line:Введите текст сообщения]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Рассылка сообщений\\Рассылка ОПам$<%[mynick]> "..Prefix.."opmassmsg %[line:Введите текст сообщения]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Сообщение от имени бота$<%[mynick]> "..Prefix.."frombot %[line:Ник] %[line:Введите текст сообщения]|")
    end
    --Списки банов
    if t.bGetBans then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Список банов$<%[mynick]> "..Prefix.."getbans|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Список временных банов$<%[mynick]> "..Prefix.."gettempbans|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Список постоянных банов$<%[mynick]> "..Prefix.."getpermbans|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    --Временные баны
    if t.bTempBan then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Временный бан$<%[mynick]> "..Prefix.."nicktempban %[line:Ник] %[line:Время (m = минут, h = часов, d = дней, w = недель)] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Временный бан IP$<%[mynick]> "..Prefix.."tempbanip %[line:Укажите IP] %[line:Время (m = минут, h = часов, d = дней, w = недель)] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Временный бан IP (полный)$<%[mynick]> "..Prefix.."fulltempbanip %[line:Укажите IP] %[line:Время (m = минут, h = часов, d = дней, w = недель)] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    if t.bTempUnban then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Снять временный бан$<%[mynick]> "..Prefix.."tempunban %[line:IP или ник]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    --Постоянные баны
    if t.bBan then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Бан$<%[mynick]> "..Prefix.."nickban %[line:Ник] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Бан IP$<%[mynick]> "..Prefix.."banip %[line:Укажите IP] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Бан IP (полный)$<%[mynick]> "..Prefix.."fullbanip %[line:Укажите IP] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    if t.bUnban then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны\\Снять бан$<%[mynick]> "..Prefix.."unban %[line:Ник или IP]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    --Списки диапазонов банов
    if t.bGetRangeBans then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Список диапазонов банов $<%[mynick]> "..Prefix.."getrangebans|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Список временных банов диапазонов$<%[mynick]> "..Prefix.."getrangetempbans|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Список постоянных банов диапазонов$<%[mynick]> "..Prefix.."getrangepermbans|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    --Временные баны диапазонов
    if t.bRangeTempBan then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Временный бан диапазона$<%[mynick]> "..Prefix.."rangetempban %[line:Начальный IP диапазона] %[line:Конечный IP диапазона] %[line:Время (m = минут, h = часов, d = дней, w = недель)] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Временный бан диапазона (полный)$<%[mynick]> "..Prefix.."fullrangetempban %[line:Начальный IP диапазона] %[line:Конечный IP диапазона] %[line:Время (m = минут, h = часов, d = дней, w = недель)] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    if t.bRangeTempUnban then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Снять временный бан диапазона$<%[mynick]> "..Prefix.."tempunban %[line:Начальный IP диапазона] %[line:Конечный IP диапазона]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    --Постоянные баны диапазонов
    if t.bRangeBan then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Бан диапазона$<%[mynick]> "..Prefix.."rangeban %[line:Начальный IP диапазона] %[line:Конечный IP диапазона] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Бан диапазона (полный)$<%[mynick]> "..Prefix.."fullrangeban %[line:Начальный IP диапазона] %[line:Конечный IP диапазона] %[line:Причина]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    if t.bRangeUnban then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Баны диапазонов\\Снять бан диапазона$<%[mynick]> "..Prefix.."rangepermunban %[line:Начальный IP диапазона] %[line:Конечный IP диапазона]|")
    Core.SendToUser(user,"$UserCommand 0 3")
    end
    --Регистрация
    if t.bAddRegUser then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Регистрация\\Зарегистрировать пользователя$<%[mynick]> "..Prefix.."addreguser %[line:Ник] %[line:Пароль] %[line:Имя профиля]|")
    end
    if t.bDelRegUser then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Регистрация\\Удалить регистрацию$<%[mynick]> "..Prefix.."delreguser %[line:Ник]|")
    end
    --Управление скриптами
    if t.bRestartScripts then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\Посмотреть список$<%[mynick]> "..Prefix.."getscripts|")
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\Перезапустить скрипты$<%[mynick]> "..Prefix.."restartscripts|")
    Core.SendToUser(user,"$UserCommand 0 3")
    if ScriptEasy then
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\Перезапуск$<%[mynick]> "..Prefix.."restartscript %[line:Имя файла]|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\Старт$<%[mynick]> "..Prefix.."startscript %[line:Имя файла]|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\Стоп$<%[mynick]> "..Prefix.."stopscript %[line:Имя файла]|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\Сдвинуть вверх$<%[mynick]> "..Prefix.."scriptmoveup %[line:Имя файла]|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\Сдвинуть вниз$<%[mynick]> "..Prefix.."scriptmovedown %[line:Имя файла]|")
    else
        local sEn = sEnable.." "
        local tScripts = ScriptMan.GetScripts()
        for script in pairs(tScripts) do
        local CurScript = tScripts[script].sName
        local bEnabled = tScripts[script].bEnabled or false
        if bEnabled then Scr = sEn..CurScript else Scr = "   "..CurScript end
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\"..Scr.."\\Перезапуск$<%[mynick]> "..Prefix.."restartscript "..CurScript.."|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\"..Scr.."\\Старт$<%[mynick]> "..Prefix.."startscript "..CurScript.."|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\"..Scr.."\\Стоп$<%[mynick]> "..Prefix.."stopscript "..CurScript.."|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\"..Scr.."\\Сдвинуть вверх$<%[mynick]> "..Prefix.."scriptmoveup "..CurScript.."|")
        Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Скрипты\\"..Scr.."\\Сдвинуть вниз$<%[mynick]> "..Prefix.."scriptmovedown "..CurScript.."|")
        end
    end
    end
    --Статистика
    if t.bIsOP then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Статистика$<%[mynick]> "..Prefix.."stats|")
    end
    if t.bRestartHub and RestartHub then
    Core.SendToUser(user,"$UserCommand 1 3 "..AdminMenu.."Перезапуск хаба$<%[mynick]> "..Prefix.."restart|")
    end
end
end

OpConnected = UserConnected
RegConnected = UserConnected

function ChatArrival(user,data)
data = data:sub(1,-2)
local t = ProfMan.GetProfilePermissions(user.iProfile)
local pre,cmd = data:match("^%b<>%s+(%p)(%S+)")
local param = data:match("^%b<>%s+%p%S+%s+(.+)")
if pre == Prefix then
    if t then
    if t.bRestartScripts then
        if cmd and cmd == "scriptmoveup" then
        if param then
            result = ScriptMan.MoveUp(param)
            if result then
            ToOps(user.sNick..": Скрипт "..param.." перемещён вверх на одну позицию.")
            else
            ToUser(user,"Ошибка: скрипт "..param.." переместить не удалось.")
            end
        else
            ToUser(user,"<"..bot.."> Ошибка. Вы должны указать имя файла.")
        end
        return true
        elseif cmd and cmd == "scriptmovedown" then
        if param then
            result = ScriptMan.MoveDown(param)
            if result then
            ToOps(user.sNick..": Скрипт "..param.." перемещён вниз на одну позицию.")
            else
            ToUser(user,"Ошибка: скрипт "..param.." переместить не удалось.")
            end
        else
            ToUser(user,"<"..bot.."> Ошибка. Вы должны указать имя файла.")
        end
        return true
        end
    end
    if t.bDrop then
        if cmd and cmd == "disconnect" then
        if param then
            local CurUser = Core.GetUser(param)
            if CurUser then
            Core.Disconnect(CurUser)
            ToOps(user.sNick.." отключил юзера "..param)
            else
            ToUser(user,"Ошибка: юзер "..param.." не найден на хабе")
            end
        else
            ToUser(user,"Ошибка: Вы должны указать ник.")
        end
        return true
        end
    end
    if t.bMassMsg then
        if cmd and cmd == "frombot" then
        local s,e,nick,msg = string.find(param, "^(%S+)%s+(.+)$")
        if nick and msg then
            local CurUser = Core.GetUser(nick)
            if CurUser then
            FromBot(CurUser,msg)
            ToUser(user,"Сообщение отправлено")
            ToOps(user.sNick.." отправил сообщение от имени бота юзеру "..nick.." :"..msg)
            else
            ToUser(user,"Ошибка: юзер "..nick.." не найден на хабе")
            end
        else
            ToUser(user,"Ошибка синтаксиса. Синтаксис: "..Prefix.."frombot <ник> <текст сообщения>")
        end
        return true
        end
    end
    end
end
end

function ToUser(user,msg)
Core.SendToUser(user,"<"..bot.."> "..msg)
end

function ToOps(msg)
Core.SendToOps("<"..bot.."> "..msg)
end

function FromBot(user,msg)
Core.SendPmToUser(user,bot,msg)
end

Немного модернизировал скрипт согласно этого поста.
Что добавлено:
Теперь через меню в выпадающем списке скриптов перед включенными скриптами отображается символ (строка в конфигураторе: sEnable = "+" -- Символ перед скриптом в меню, обозначающий что скрипт включен.)
Известные проблемы:
Чтобы меню правильно отображалось после редактирования списка скриптов необходимо перезайти на хаб.

19

При заходе на хаб юзера в пассивном режиме ему отсылается сообщение в личку об этом.
Отсылается для незарегистрированных и зарегистрированных.

Код:
local tProfiles = {      -- 1 - нет информации, 0 - есть информация
   [0] = 1,      -- Мастер
   [1] = 1,      -- Оператор
   [2] = 1,      -- VIP
   [3] = 0,      -- Зарегистрированный пользователь
  [-1] = 0,      -- Незарегистрированный пользователь
}

function UserConnected(user,data)
    if tProfiles[user.iProfile] ==0 then
    if Core.GetUserData(user,0) ~= "P" then
        Core.SendPmToUser(user, SetMan.GetString(21), "***   Внимание, "..user.sNick.."!  Вы находитесь в пассивном режиме. Бля-бля-бля...")
        return true
        end
    end
end
RegConnected = UserConnected

20

Сообщения пользователю при входе на хаб

Код:
local sMsg=[[
Ваше сообщение
(можно даже в несколько строк!)
]]

function UserConnected(tUser)
  Core.SendToUser(tUser,sMsg)
end
RegConnected=UserConnected
OpConnected=UserConnected


Простейший код реализации отсылки сообщения в приват пользователю при входе:

Код:
local sMsg=[[
Ваше сообщение
(можно даже в несколько строк!)
]]

function UserConnected(tUser)
  Core.SendPmToUser(tUser,"Бот",sMsg)
end
RegConnected=UserConnected
OpConnected=UserConnected