RusHub, Кроссплатформенный консольный DC хаб |
Здравствуйте, гость ( Вход | Регистрация )
RusHub, Кроссплатформенный консольный DC хаб |
28.8.2009, 13:37
Сообщение
#21
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Название: RusHub
Текущая версия: 2.3.10 Платформы: Windows (XP/Vista/7), GNU Linux, FreeBSD, Mac OS X, Solaris Разрядность: 32, 64 Лицензия: Основан на: verlihub SourceForge: GoogleCode: Официальный сайт: RusHub.org Полная поддержка и использование протокола NMDC. Хаб поддерживает работу с ipv6. Хаб поддерживает ADC протокол (тестирование). Хаб постоянно совершенствуется и развивается. Описание настроек хаба sAddresses - адреса хаба (указываются через пробел) bAdcOn - включить режим работы хаба по протоколу ADC sHubName - имя хаба sTopic - топик хаба (приписка к имени хаба) sHubBot - ник основного бота хаба. sLocale - языковая локаль. По умолчанию устанавливается локаль системы (для России устанавливаем Russian_Russia.1251) bSendUserIp - отсылать ip адреса пользователей, то есть использовать ли характеристики UserIP и UserIP2 (1 - да, 0 - нет). bDelayedMyINFO - отсылать команды $MyINFO и $Quit с задержкой. Из-за отсутствия пока задержки входа рекомендуется установить этот параметр в 0. bCheckSRNick - проверять ник в $SR команде. bCheckRctmNick - проверять ли ник в RCTM команде (1 - проверять, 0 - не проверять). bCheckCTMIp - проверять ip в CTM команде bCheckSearchIp - проверять ip при активном поиске bDelayedLogin - записывать пользователя только после полной отсылки ему списка всех пользователей (на больших хабах список всех пользователей может не отправиться за один раз, поэтому для таких хабов рекомендуется включить эту опцию). bNicklistOnLogin - при входе на хаб отправлять список всех пользователей во время записи пользователя, а не по команде $GetNickList. iTimeoutAny - время на получение от пользователя какой-либо команды (таймаут соединения) iTimeoutLogon - максимальное время входа на хаб (в сек.). iMaxPassiveRes - количество возвращаемых хабом результатов при пассивном поиске. iTimerConnPeriod - период таймера соединения в мсек. (системная настройка, не рекомендуется изменять). iTimerServPeriod - период таймера сервера в мсек. (системная настройка, не рекомендуется изменять). iStepDelay - задержка в мсек на каждом цикле (системная настройка, не рекомендуется изменять). iStrSizeMax - максимальная длина команды, отправленной на хаб пользователем. iStartPing - время начала пинга пользователя в сек (отсчитывается от момента входа на хаб). iPingInterval - период, через который пингуется пользователь. iMaxLevel - уровень логирования событий хаба (от 0 до 6). По умолчанию 0 - не логировать события. iMaxErrLevel - уровень логирования ошибок хаба (от 0 до 2). По умолчанию 2 - логировать все ошибки. iSysLoading - коэффициент загруженности системы (системная настройка, не рекомендуется изменять). iMaxNickLen - максимальная длина ника (проверяется только у пользователей с профилем -1). iMinNickLen - минимальная длина ника (проверяется только у пользователей с профилем -1). bDisableNoDCCmd - запретить использование команд, которые не относятся к NMDC командам (не начинаются со знака $, за исключением команды пинга и команды чата). iFloodTime... и iFloodCount... - параметры флуда (количество iFloodCount за время iFloodTime (в сек.)) bRegMainBot - регистрировать основного бота. bMainBotKey - ключ у основного бота. sMainBotMyINFO - MyINFO основного бота. sMainBotIP - ip основного бота. bWebServer - включить веб-сервер (по умолчанию отключен). sWebAddresses - адреса веб сервера (указываются через пробел). Через ; можно указывать порт. iWebTimeout - тайм-аут соединения с веб сервером (в сек.). Время бездействия, по истечению которого веб-сервер закрывает соединение с клиентом. iWebStrSizeMax - максимальный размер сообщения отсылаемого клиентом. bMAC - включить определение MAC адреса (по умолчанию отключено). iUsersLimit - глобальное ограничение числа пользователей (по умолчанию -1 - проверка отключена) bUDPServer - включить udp сервер (1 - включить, 0 - отключить) sUDPAddresses - udp адреса хаба sMainPath - основная директория хаба sPluginPath - директория плагинов sLogPath - директория логов sLangPath - директория языковых настроек sLang - текущая языковая настройка (имя файла без расширения) iMaxSendSize - настройка, отвечающая за максимальный размер буфера отсылки (по умолчанию 2818047). При превышении этого размера пользователь отключается от хаба. Lua plugin: LUA API события UID - идентификатор пользователя, который отослал команду. UID представляет из себя указатель на реальную структуру соединения пользователя (type(UID) = "userdata"). Введён с целью оптимизации выбора пользователя без нагрузки lua стека. OnStartup() Описание: Функция выполняется при старте скрипта. Возвращаемое значение: любое OnExit() Описание: Функция выполняется при остановке скрипта Возвращаемое значение: любое OnError(sErrMsg) Описание: Функция выполняется при ошибке в скрипте Возвращаемое значение: true или 1 - не останавливать скрипт при ошибке во время выполнения Исключения составляют таймерные функции, которые останавливают скрипт при ошибке, дабы не загружать систему и не прийти к переполнению лога OnScriptError(sScriptName, sErrMsg, bStoped) Описание: Функция выполняется при возникновении ошибки в скрипте sScriptName. sErrMsg - сообщение с ошибкой. Флаг bStoped равен true если скрипт, в котором возникла ошибка, был остановлен, в противном случае флаг bStoped равен false. Функция не вызывается для текущего скрипта. Для отслеживания ошибок в текущем скрипте нужно использовать функцию OnError(sErrMsg). Напомню, что по умолчанию скрипт отключается при ошибке, отключение скрипта можно предотвратить возвратом true в функции OnError этого скрипта. Возвращаемое значение: true или 1 - не вызывать это событие в ниже стоящих скриптах (т.е. прекращение действия события). OnScriptStart(sScriptName) Описание: Функция выполняется при старте скрипта sScriptName. Возвращаемое значение: true или 1 - не вызывать это событие в ниже стоящих скриптах (т.е. прекращение действия события). OnScriptStop(sScriptName) Описание: Функция выполняется при остановке скрипта sScriptName. Возвращаемое значение: true или 1 - не вызывать это событие в ниже стоящих скриптах (т.е. прекращение действия события). OnUserConnected(UID) Описание: Функция выполняется при входе пользователя. Функция выполняется после отправки пользователю первичной команды $Lock и до любого другого действия на хабе. На данном этапе определён только IP адрес, порт и мак пользователя. Возвращаемое значение: true или 1 - не отправлять при входе надпись: "Этот хаб работает под управлением..." OnUserDisconnected(UID) Описание: Функция выполняется после закрытия соедиения с пользователем. Функция является последней функцией перед окончательным удалением соединения. На данном этапе определён только IP адрес, порт и мак пользователя, все остальные данные уже удалены. Возвращаемое значение: любое OnUserEnter(UID) Описание: Функция выполняется при окончательном входе пользователя, после добавления пользователя в списки. Функция является последним этапом входа на хаб. Возвращаемое значение: любое OnUserExit(UID) Описание: Функция выполняется при выходе пользователя, перед удаление пользователя из списков. Функция является первым этапом выхода. Возвращаемое значение: любое OnSupports(UID, sData) Описание: Функция выполняется при обмене характеристиками между клиентом и сервером. Функция не будет выполняться, если клиент не поддерживает никаких дополнений и характеристик. Возвращаемое значение: true или 1 - не отправлять характеристики хаба клиенту. OnKey(UID, sData) Описание: Функция выполняется при получении ключа от клиента. Возвращаемое значение: true или 1 - проверять ключ. OnValidateNick(UID, sData) Описание: Функция выполняется после проверки ника и до проверки необходимости пароля. Ник пользователя уже определён. Возвращаемое значение: true или 1 - отправить запрос на получение пароля. Позволяет проводить регистрацию по средствам скриптов. OnMyPass(UID, sData) Описание: Функция выполняется после поступления на хаб пароля от пользователя. Возвращаемое значение: true или 1 - вход оператора (отправка команды $LogedIn). OnVersion(UID, sData) Описание: Функция выполняется после поступления на хаб версии протокола. Возвращаемое значение: true или 1 - проверять равенство версии 1,0091. OnGetNickList(UID, sData) Описание: Функция выполняется до отсылки списка пользователей. Возвращаемое значение: true или 1 - не отсылать список. OnMyINFO(UID, sData) Описание: Функция выполняется при отправке на хаб MyINFO строки. Функция выполняется после всех проверок параметров и до рассылки всем пользователям. Возвращаемое значение (игнорируется при первой отправке, а работает только при последующих): 1) return false, return nil, return 0 - безусловное выполнение события 2) return true, return 1 - блокировка события 3) return 2 - выполнеие события и блокировка после обхода всех скриптов 4) return 3 - выполнение публичного события для всех соединений, кроме соединения, породившего это событие 5) return 4 - выполнение публичного события для всех соединений, кроме соединений, имеющих такой же ip адрес, что и соединение, породившее это событие Примечание: Возвращаемое значение игнорируется при первой отправке на хаб MyINFO строки, так как в случае блокировки события пользователь будет скрыт (возможно эту политику следует пересмотреть (опустить) в дальнейшем). OnChat(UID, sData) Описание: Функция выполняется при отправке в чат сообщения пользователем. Функция выполняется после всех проверок и до отправки. Возвращаемое значение: 1) return false, return nil, return 0 - безусловное выполнение события 2) return true, return 1 - блокировка события 3) return 2 - выполнеие события и блокировка после обхода всех скриптов 4) return 3 - выполнение публичного события для всех соединений, кроме соединения, породившего это событие 5) return 4 - выполнение публичного события для всех соединений, кроме соединений, имеющих такой же ip адрес, что и соединение, породившее это событие OnTo(UID, sData) Описание: Функция выполняется при отправке в сообщения приват. Функция выполняется после всех проверок и до отправки. Возвращаемое значение: true или 1 - не отсылать сообщение. OnConnectToMe(UID, sData) Описание: Функция выполняется при попытке активного соединения. Функция выполняется после всех проверок и до отправки. Возвращаемое значение: true или 1 - не соединять пользователей. OnRevConnectToMe(UID, sData) Описание: Функция выполняется при попытке пассивного соединения. Функция выполняется после всех проверок и до отправки. Возвращаемое значение: true или 1 - не соединять пользователей. OnSearch(UID, sData) Описание: Функция выполняется при поиске. Функция выполняется после всех проверок и до отправки. Возвращаемое значение: 1) return false, return nil, return 0 - безусловное выполнение события 2) return true, return 1 - блокировка события 3) return 2 - выполнеие события и блокировка после обхода всех скриптов 4) return 3 - выполнение публичного события для всех соединений, кроме соединения, породившего это событие 5) return 4 - выполнение публичного события для всех соединений, кроме соединений, имеющих такой же ip адрес, что и соединение, породившее это событие OnSR(UID, sData) Описание: Функция выполняется при поступлении на хаб результатов пассивного поиска. Функция выполняется после всех проверок и до отправки. Возвращаемое значение: true или 1 - блокировать результаты поиска. OnAny(UID, sData, iType) Описание: Функция выполняется при поступлении на хаб любой команды. Возвращаемое значение: true или 1 - блокировать команду. OnUnknown(UID, sData) Описание: Функция выполняется при поступлении на хаб любой не известной команды. Возвращаемое значение: true или 1 - не блокировать команду. OnKick(UID, sData) Описание: Функция выполняется при поступлении на хаб команды кика. Возвращаемое значение: любое. OnOpForceMove(UID, sData) Описание: Функция выполняется при поступлении на хаб команды перенаправления. Возвращаемое значение: любое. OnGetINFO(UID, sData) Описание: Функция выполняется при поступлении на хаб команды $GetINFO. Возвращаемое значение: true или 1 - не отсылать пользователю MyINFO запрошенного пользователя. OnFlood(UID, iType, iNum) Описание: Функция выполняется при обнаружении флуда со стороны пользователя. Может служить для устаноки бана за флуд или для разрешения флуда ОПераторам хаба. Параметр iType указывает тип команды, которой флудили. Параметр iNum указывает номер срабатываемого флуда 1 или 2 (см. настройки флуда). Возвращаемое значение: true или 1 - не отключать пользователя. OnWebData(WebID, sData) Описание: Функция выполняется при поступлении данных на веб-сервер. Возвращаемое значение: true или 1 - не разъединять пользователя по окончанию работы данного события. OnConfigChange(sName, sValue) Описание: Функция выполняется при изменении настройки. Параметр sName - название измененной настройки, sValue - новое значение настройки Возвращаемое значение: любое. Событие срабатывает только после изменения настройки при помощи объекта Config. OnMCTo(UID, sData) Описание: Функция выполняется при отправке приватного сообщения в чат. Функция выполняется после всех проверок и до отправки. Возвращаемое значение: true или 1 - не отсылать сообщение. LUA API функции Core.SendToAll(sData, sNick, sFrom) Описание: Функция отправляет данные sData всем пользователям, которые находятся на хабе. Если указан параметр sNick, то сообщение sData отправляется в чат от ника sNick. Если указаны параметры sNick и sFrom, то сообщение sData отправляется в приват от отправителя sFrom с ником sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.SendToUser(UID/sToNick/tNicks, sData, sNick, sFrom) Описание: Функция отправляет данные sData пользователю с идентификатором UID (User ID) или с ником sToNick или таблице ников tNicks. Если указан параметр sNick, то сообщение sData отправляется в чат от ника sNick. Если указаны параметры sNick и sFrom, то сообщение sData отправляется в приват от отправителя sFrom с ником sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.SendToAllExceptNicks(tExcept, sData, sNick, sFrom) Описание: Функция отправляет данные sData всем пользователям, которые находятся на хабе, кроме пользователей, ники которых указаны в таблице tExcept, если таковые находится на хабе. Если указан параметр sNick, то сообщение sData отправляется в чат от ника sNick. Если указаны параметры sNick и sFrom, то сообщение sData отправляется в приват от отправителя sFrom с ником sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.SendToProfile(iProfile/tProfiles, sData, sNick, sFrom) Описание: Функция отправляет данные sData профилю/профилям. Если в первом аргументе функции указано число, то данные отправляются указанному профилю, если в первом аргументе указана таблица, то данные отправляются профилям, которые указаны в этой таблице. Если указан параметр sNick, то сообщение sData отправляется в чат от ника sNick. Если указаны параметры sNick и sFrom, то сообщение sData отправляется в приват от отправителя sFrom с ником sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Описание: Функция отправляет данные sData всем пользователям, ники которых указаны в таблице tNicks, если таковые находится на хабе. Если указан параметр sNick, то сообщение sData отправляется в чат от ника sNick. Если указаны параметры sNick и sFrom, то сообщение sData отправляется в приват от отправителя sFrom с ником sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Функция устарела. Используйте вместо неё функцию Core.SendToUser(tNicks, sData, sNick, sFrom) Core.GetUser( Описание: Функция возвращает UID пользователя по нику sNick. Описание: 2 - MyINFO строка (sMyINFO) 3 - пользовательские данные (sData) 4 - пользователь в оп-листе, то есть имеет ключик (bInOpList) 5 - пользователь скрыт в ник-листе (bHide) 6 - пользователь в ip-листе, то есть ему отсылаются ip адреса всх пользователей (bInIpList) Функция устарела. Используйте вместо неё прямую установку параметров: UID[sName] = Value или Core.GetUser(sNick)[sName] = Value, где sName - это одна из строк: "iProfile", "sMyINFO", "sData" и тд. Core.GetUsersCount() Описание: Функция возвращает текущее количество онлайн пользователей. Core.GetTotalShare() Описание: Функция возвращает текущую суммарную шару всех пользователей хаба. Core.Disconnect(UID/sNick) Описание: Функция отключает пользователя по идентификатору UID, или по нику sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.DisconnectIP(sIP, iProfile/tProfiles) Описание: Функция отключает всех пользователей с указанным IP. Если указан профиль/таблица с профилями iProfile/tProfiles, то отключаются только пользователи с указанным профилем/профилями. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.RestartScripts(iType) Описание: Функция перезапускает все скрипты. Если параметр iType отсутствует, равен nil или равен 0, то перезагружаются все скрипты без исключения. Если параметр iType равен 1, то перезагружаются все скрипты, кроме работающих на данный момент. Если параметр iType равен 2, то перезагружаются все скрипты, кроме текущего скрипта (из которого была вызвана данная функция). Возвращает true. Core.RestartScript(sScriptName) Описание: Функция перезапускает скрипт с именем sScriptName. Если параметр sScriptName отсутствует или равен nil, то функция перезапускает текущий скрипт. Возвращает true в случае успеха, nil в случае неудачи, nil и сообщение об ошибке в случае синтаксической ошибки. Core.StopScript(sScriptName) Описание: Функция останавливает скрипт с именем sScriptName. Если параметр sScriptName отсутствует или равен nil, то функция останавливает текущий скрипт. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.StartScript(sScriptName) Описание: Функция запускает скрипт с именем sScriptName. Возвращает true в случае успеха, nil в случае неудачи, nil и сообщение об ошибке в случае синтаксической ошибки. Core.MoveUpScript(sScriptName) Описание: Функция поднимает скрипт с именем sScriptName в дереве выполнения. Если параметр не указан, то поднимается текущий скрипт. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.MoveDownScript(sScriptName) Описание: Функция опускает скрипт с именем sScriptName в дереве выполнения. Если параметр не указан, то опускается текущий скрипт. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.GetScripts() Описание: Функция возвращает таблицу со скриптами как таблицы с полями sName, bEnabled, iMemUsage. Core.GetScript(sScriptName) Описание: Функция возвращает таблицу со скриптом таблицу с полями sName, bEnabled, iMemUsage. Если имя не указано, то возвращается таблица текущего скрипта. Core.GetGVal(sScriptName, sParam) Описание: Функция возвращает значение глобальной переменной с именем sParam скрипта sScriptName. Функция работает только с переменными типов: string, number, boolean, lightuserdata и table, для остальных типов будет возвращать nil. Возвращает значение в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.SetGVal(sScriptName, sParam, Value) Описание: Функция устанавливает значение глобальной переменной с именем sParam скрипта sScriptName. Функция работает только с переменными типов: string, number, boolean, lightuserdata и table. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.SetCmd(sData) Описание: Функция устанавливает новую команду для функций последующих скриптов. Устанавливаемая команда должна быть синтаксически правильной, то есть соответствовать по синтаксису команде текущего события (API функции события). В противном случае функция не изменит команду и вернёт nil и соответствующее сообщение. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.GetUsers(sIP, bAll) Описание: При отсутствии аргументов функция возвращает таблицу со всеми уже полностью вошедшими на хаб пользователями (с UID-ми всех вошедших пользователей хаба). Core.GetUsers(true) - таблица со всеми пользователями хаба, даже которые только входят и ещё не вошли. Core.GetUsers(sIP) - таблица с UID'ми вошедших пользователей с указанным IP Core.GetUsers(sIP, true) - таблица со всеми пользователями с указанным IP. Core.AddTimer(iId, iInterval, sFunc) Описание: Функция добавляет таймер с идентификатором iId и интервалом срабатывания iInterval (в мсек). Если указано имя глобальной функции sFunc, то эта функция и будет выполняться, если имя функции не указано, то скрипт ищет глобальную функцию OnTimer (в параметр функции передаётся идентификатор). Идентификатор может повторяться. Возвращает количество зарегистрированных таймеров с таким iId в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.DelTimer(iId) Описание: Функция удаляет таймер по идентификатору iId. Идентификатор может повторяться, однако, удаляется таймер по идентификатору, поэтому удалятся все таймеры с указанным идентификатором. Удаляются таймеры только текущего скрипта! Таймеры с таким же идентификатором других скриптов не удаляются! Возвращает количество удалённых таймеров в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.GetUpTime() Описание: Функция возвращает время работы хаба (в сек.) Описание: Функция возвращает настройку хаба sName. Какого бы типа не была настройка, всегда возвращается строковый тип. В случае неудачи возвращает nil и сообщение об ошибке. Функция устарела. Используйте вместо неё объект: Config[sName] Описание: Функция устанавливает настройку хаба sName в значение sValue. Однако, исключения составляют настройки sHubIP, iMainPort, sSubPorts, которые нельзя изменить. При изменении настройки sHubName или sTopic отправляется соответствующая команда. После изменения, настройки сохраняются. При изменении sHubBot и/или bRegMainBot - автоматически перерегистрируется бот. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Функция устарела. Используйте вместо неё прямую установку параметров: Config[sName] = sValue Core.GetLang(sName) Описание: Функция возвращает "языковую" настройку sName. В случае неудачи возвращает nil и сообщение об ошибке. Core.SetLang(sName, sValue) Описание: Функция устанавливает "языковую" настройку хаба sName в значение sValue. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.Call(sScriptName, sFunc, ...) Описание: Функция вызывает функцию sFunc другого скрипта sScriptName с параметрами, которые указываются в аргументе 3, 4 и тд. Параметры функции и возвращаемые значения функции могут быть только следующих типов: string, number, boolean, table и userlightdata. Функция Core.Call возвращает все те значения, которые возвращает функция sFunc скрипта sScriptName. В случае ошибки функция возвращает nil и сообщение об ошибке. Core.SendToAllExceptIPs(tExcept, sData, sNick, sFrom) Описание: Функция отправляет сообщение всем пользователям, за исключением пользователей с ip адресами, которые указаны в таблице tExcept. Если указан параметр sNick, то сообщение sData отправляется в чат от ника sNick. Если указаны параметры sNick и sFrom, то сообщение sData отправляется в приват от отправителя sFrom с ником sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.SendToIP(sIP, sData, sNick, sFrom, iProfile/tProfiles) Описание: Функция отправляет сообщение sData всем пользователям с указанным IP адресом sIP. Если указан параметр sNick, то сообщение sData отправляется в чат от ника sNick. Если указаны параметры sNick и sFrom, то сообщение sData отправляется в приват от отправителя sFrom с ником sNick. Если указан профиль/таблица с профилями iProfile/tProfiles, то сообщение отправляется только указанным профилям с данным IP адресом. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.RegBot(sNick, bKey, sMyINFO, sIP) Описание: Функция регистрирует бота с ником sNick. Если bKey равен true, то бот регистрируется с ключиком. sMyINFO - это часть MyINFO строки (часть после ника, начиная с описания и до конца MyINFO). sIP - возможный ip адрес для бота. Обязательным параметром является только первый параметр - sNick. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.UnregBot(sNick) Описание: Функция удаляет регистрацию бота с ником sNick из списка. Возвращает true в случае успеха, nil и сообщение об ошибке в случае неудачи. Core.SetHubState(iNum) Описание: Функция устанавливает состояние хаба. iNum = nil или iNum = 0 - остановка хаба. iNum = 1 - рестарт хаба. Остальные значения заразервированы на будущее Core.Redirect(UID/sNick, sAddress[, sReason]) Описание: Перенаправляет пользователя на адрес sAddress с причиной sReason. Причину указывать не обязательно. Возвращает true в случае успеха, nil и сообщение с ошибкой - в случае неудачи Config - объект конфигурационных настроек хаба Config.table() - таблица с названиями всех возможных настроек хаба Core.sMainDir - основной путь, по которому располагается хаб Core.sScriptsDir - абсолютный путь, по которому располагается директория скриптов Core.sHubVersion - название и версия хаба Core.sLuaPluginVersion - название и версия плагина Core.sSystem - название и версия ОС _TRACEBACK = debug.traceback - способ включить stack trace для скрипта Параметры пользователя UID.sNick - ник UID.sIP - ip UID.iProfile - профиль UID.bInOpList - пользователь в оп-листе, то есть имеет ключик UID.bInIpList - пользователь в ip-листе, то есть ему отсылаются ip адреса всех пользователей UID.bInUserList - пользователь полностью вошёл и добавлен в список пользователей UID.bHide - пользователь скрыт в ник-листе UID.iPort - порт хаба UID.iPortConn - порт соединения UID.sMacAddress - мак адрес UID.sVersion - версия протокола UID.sData - вспомогательное текстовое поле для различных нужд UID.UID - UID юзера (lightuserdate) UID.sSupports - параметр $Suppurts команды UID.sMyINFO - MyINFO строка UID.sDesc - описание UID.sTag - тэг UID.sClientName - название клиента UID.sClientVersion - версия клиента UID.sMode - режим UID.iUsHubs - обычные хабы UID.iRegHubs - рег хабы UID.iOpHubs - оп хабы UID.iSlots - слоты UID.iLimit - ограничитель скорости скачивания с пользователя (L:x) UID.iOpen - открытые экстра слоты (O:x) UID.iBandwidth - ограничитель скорости скачивания с пользователя (B:x) UID.iDownload - ограничитель скорости скачивания пользователем (D:x) UID.sFraction - ограничитель скорости скачивания пользователем/с пользователя (F:x/y) UID.sConn - соединение UID.iByte - магический байт UID.sEmail - email UID.iShare - шара в байтах UID.iEnterTime - время входа на хаб (время отсылки на хаб команды $Key) UID.sIPConn - ip адрес (хост) хаба, на который был принят пользователь UID.bKick - способность ОПератора к кику UID.bRedirect - способность ОПератора к перенаправлению Текущая версия: rushub_2.3.10_win32.rar ( 212.99 килобайт ) Кол-во скачиваний: 90 rushub_2.3.10_win64.rar ( 242.78 килобайт ) Кол-во скачиваний: 79 Lua плагин: lua_plugin_2.9_win32.rar ( 213.29 килобайт ) Кол-во скачиваний: 43 lua_plugin_2.9_win64.rar ( 239.24 килобайт ) Кол-во скачиваний: 52 Pdb файлы: rushub_2.3.10_pdb_win32.rar ( 793.18 килобайт ) Кол-во скачиваний: 21 rushub_2.3.10_pdb_win64.rar ( 808.73 килобайт ) Кол-во скачиваний: 24 lua_plugin_2.9_pdb_win32.rar ( 593.08 килобайт ) Кол-во скачиваний: 17 lua_plugin_2.9_pdb_win64.rar ( 604.17 килобайт ) Кол-во скачиваний: 21 Исходники можно скачать с: SVN: Спасибо сказали: Nickolya, BIMMER71, Jaska, intlive, Wariner, DEL, FallenAngel, Invisible, mariner, fixx, Ksan, Serx, Артём, serrrios, ShadoWx, Maximum, Otshelnik-Fm, Vizunchik, Accelerator, Karumo, PomanoB, -=Alexandr=-, Infinity_Love, alex82, ExC0tiC, rival, KT315, Drakula, Alexey, Phazeus, Andrew Frost, BeN, Kingston, Sekretchik, CrazyKiller, Saymon21, hondas, Dimon21, X-Sky, TiGRpp, KamoK, ART8150, lewonchik, LOPD, andromed, Alexey5176, -=FugeN=- 2, SKIFI, stone, Egerj1, ke(x)one, AltSide, Jarkrait, arktik, Mangust, kma21 |
|
|
23.1.2010, 19:03
Сообщение
#22
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Незапланированные версии хаба и lua плагина с фиксами в функциях Core.GetConfig(sName) и Core.GetLang(sName)
|
|
|
4.2.2010, 20:39
Сообщение
#23
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.1
lua plugin v 1.12 В результате глобальных изменений могут неправильно работать некоторые функции, хотя я думаю что будет всё ок. Основные изменения: Added: Установленные типы защиты:
Работа над защитой ещё не окончена. Added: Новое событие: OnScriptError(sScriptName, sErrMsg, bStoped) Функция выполняется при возникновении ошибки в скрипте sScriptName. sErrMsg - сообщение с ошибкой. Флаг bStoped равен true если скрипт, в котором возникла ошибка, был остановлен, в противном случае флаг bStoped равен false. Функция не вызывается для текущего скрипта. Для отслеживания ошибок в текущем скрипте нужно использовать функцию OnError(sErrMsg). Напомню, что по умолчанию скрипт отключается при ошибке, отключение скрипта можно предотвратить возвратом true в функции OnError этого скрипта. Added: Новое событие: OnFlood(UID, iType, iNum) Функция выполняется при обнаружении флуда со стороны пользователя. Может служить для установки бана за флуд или для разрешения флуда ОПераторам хаба. Параметр iType указывает тип флуда (0 - чат-флуд, 1 - флуд в личке, 2 - MyINFO-флуд, 3 - флуд получения списка, 4 - поисковый-флуд, 5 - SR-флуд, 6 - CTM-флуд, 7 - RCTM-флуд, 8 - флуд неизвестными командами). Параметр iNum указывает номер срабатываемого флуда 1 или 2 (см. настройки флуда). Возвращаемое значение: true или 1 - не отключать пользователя. Updated: Обновлена функция Core.RestartScripts(iType) (в функцию добавлен не обязательный параметр) Функция перезапускает все скрипты. Если параметр iType отсутствует, равен nil или равен 0, то перезагружаются все скрипты без исключения. Если параметр iType равен 1, то перезагружаются все скрипты, кроме работающих на данный момент. Если параметр iType равен 2, то перезагружаются все скрипты, кроме текущего скрипта (из которого была вызвана данная функция). Плагин с поддержкой Lua 5.2 (чисто испробовать что за зверь ) : lua_plugin_1.12_lua5.2.rar ( 204.83 килобайт ) Кол-во скачиваний: 22 |
|
|
14.2.2010, 18:52
Сообщение
#24
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.2
lua plugin v 1.13 Основные изменения: Fixed: Исправлен баг в работе события OnScriptError. Fixed: Исправлен баг, который не позволял в некоторых случаях при медленной скорости соединения получить полностью команду. Fixed: Исправлен баг в изменении команды события. Added: Добавлена функция Core.SendToIP(sIP, sData, sNick, sFrom, iProfile/tProfiles) отсылки сообщения ip адресу. Added: Добавлена функция Core.SendToAllExceptIps(tExcept, sData, sNick, sFrom) отсылки сообщения всем, кроме ip адресов таблицы tExcept. Added: Добавлена функция Core.RegBot(sNick, bKey, sMyINFO, sIP) регистрации бота на хабе (sMyINFO - это не полное MyINFO, а только всё то что после ника). Added: Добавлена функция Core.UnregBot(sNick) удаления регистрации бота. Added: Модифицирована функция Core.DisconnectIP(sIP, iProfile/tProfiles). Добавлен необязательный параметр. |
|
|
27.2.2010, 18:47
Сообщение
#25
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.3
lua plugin v 1.14 Fixed: Исправлены некоторые достаточно серьёзные ошибки старых версий. Added: Добавлен веб-сервер (по умолчанию отключен). Веб-сервер предназначен только для использования его в Lua. Некоторые новые настройки: bWebServer - включить веб-сервер (по умолчанию отключен). sWebServerIP - адрес веб-сервера. iWebServerPort - порт веб-сервера (по умолчанию 81). iWebTimeout - тайм-аут соединения с веб сервером (в сек.). Время бездействия, по истечению которого веб-сервер закрывает соединение с клиентом. iWebStrSizeMax - максимальный размер сообщения, которое может отослать на сервер клиент. Новое событие: OnWebData(WebID, sData) Новая api функция: Core.SendToWeb(WebID, sData) Пример скрипта для проверки работы веб сервера: Код function OnWebData(WebID, sData) Так как в событии OnWebData не возвращается true, то клиент будет автоматически отключен после отправки ему всех данных.Core.SendToAll(sData) Core.SendToWeb(WebID, "test") end Функция Core.SendToWeb автоматически добавляет разделитель ("\r\n\r\n") в конец, если он отсутствует на конце сообщения. |
|
|
2.3.2010, 12:34
Сообщение
#26
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.4
lua plugin v 1.15 Fixed: Удалена функция Core.SendToWeb. Вместо неё для отсылки данных веб пользователю нужно использовать функцию Core.SendToUser(WebID, sData). Added: Для получения ip адреса и других параметров веб-пользователя можно использовать ту же функцию, что и для обычного dc-пользователя: Core.GetUser(WebID, iByte). Свожу все функции к единому интерфейсу. |
|
|
4.3.2010, 17:31
Сообщение
#27
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.5
lua plugin v 1.16 Основные изменения: Added: Добавлено новое событие OnScriptStart(sScriptName), вызываемое при запуске скрипта sScriptName. Added: Добавлено новое событие OnScriptStop(sScriptName), вызываемое при остановке скрипта sScriptName. Fixed: Исправлена работа веб-сервера. Предотвращена двойная отсылка. Fixed: Исправлена ошибка отсутствия тела сообщения в POST запросах. Не заморачиваясь насчёт парсера, оставлено это дело на плечах Lua. Если клиентом было отправлено тело запроса, то оно всегда прибавляется к заголовку, даже в случае, например GET запроса, а не POST запроса, поэтому это должен отфильтровывать парсер в Lua, дабы придерживаться http протокола и не позволять отправлять левые запросы. Fixed: WebID полностью совмещён с UID, и к нему применимы все функции, применимые к UID. Например, отключение веб-пользователя Core.Disconnect(UID/WebID). Хотя специфические функции типа GetUser могут возвращать не все нужные результаты из-за их отсутствия для данного соединения, или функция DisconnectIP не может разъединить веб-пользователя с указанным ip. |
|
|
5.4.2010, 13:23
Сообщение
#28
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.6
lua plugin v 1.17 Fixed: Исправлена ошибка, связанная с отключениями за частую отсылку пустых команд, которые прикреплены к другим командам, вместо отключения только за частые пинги. Fixed: Исправлен баг с падением хаба после входа компьютера из спящего режима. Fixed: Исправлен баг в событии OnWebData (перепутанные возвращаемые значения события) Fixed: Для файлов настроек установлены абсолютные пути вместо относительных. Added: В таблице Core добавлено новое поле Core.sSystem, хранящее название и версию системы, на которой работает сервер. Added: Модифицированы возвращаемые значения событий: 1) return false, return nil, return 0 - безусловное выполнение события 2) return true, return 1 - блокировка события 3) return 2 - выполнеие события и блокировка после обхода всех скриптов 4) return 3 - выполнение публичного события для всех соединений, кроме соединения, породившего это событие 5) return 4 - выполнение публичного события для всех соединений, кроме соединений, имеющих такой же ip адрес, что и соединение, породившее это событие Added: К переменной UID теперь привязана метатаблица, поэтому отпадает нужда в функциях Core.GetUser и Core.SetUser, но эти функции сохранены для совместимости и для определения пользователя по нику. Added: Добавлена сборка под x64 системы. Пока что не добавлена встроенная возможность добавления хаба в список сервисов windows (в процессе тестирования). |
|
|
16.4.2010, 14:32
Сообщение
#29
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.7
Fixed: Исправлен баг с падением хаба при загрузке заведомо "левого" плагина. |
|
|
30.5.2010, 19:02
Сообщение
#30
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
lua plugin v 1.18
Added: В событие OnAny добавлен третьим аргументом тип команды: OnAny(UID, sData, iType). Существующие на данный момент типы: Код 0 - $MultiSearch
1 - $MultiSearch Hub: 2 - $Search Hub: 3 - $Search 4 - $SR 5 - $SR (UDP) 6 - $MyNIFO 7 - $Support 8 - $Key 9 - $ValidateNick 10 - $Version 11 - $GetNickList 12 - Chat 13 - $To 14 - $Quit 15 - $MyPass 16 - $ConnecToMe 17 - $RevConnectToMe 18 - $MultiConnectToMe 19 - $Kick 20 - $OpForceMove 21 - $GetINFO 22 - $MCTo 23 - $UserIP 24 - ping 25 - $Unknown |
|
|
19.6.2010, 16:47
Сообщение
#31
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
lua plugin v 1.19
Fixed: Исправлено падение хаба при циклическом вызове функций GetGVal/SetGVal (reported by Phazeus). Fixed: Немного оптимизирована работа lua. |
|
|
4.7.2010, 21:20
Сообщение
#32
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
lua plugin v 1.20
Fixed: Исправлен баг в очередях задач, который приводил к падению хаба. Работа по оптимизации пока не производилась (возможно в следующей версии проведу). |
|
|
18.7.2010, 13:31
Сообщение
#33
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.8
lua plugin v 1.21 Added: Сделан парсинг MyINFO. Added: Добавлен параметр UID.sSupports. Fixed: Убран автозапуск скриптов. Fixed: Исправен баг функции os.date путём копирования файла loslib.c из lua 5.2 (там этот баг исправлен). Fixed: Сделана установка MyINFO до события OnMyINFO, а не после как было раньше. Fixed: Исправлено падение при пустом описании в MyINFO. Fixed: Исправлено падение при помещении в папку plugins некорректного плагина. Fixed: Добавлена проверка корректности пользователя в функцию Core.SendToUser. Парсинг MyINFO позволяет получать следующие параметры (перечисляю все допустимые). Важное замечание! Если пользователь ещё до конца не вошёл на хаб, то многие из этих параметров могут быть равны nil. В частности, если, например, мы в событии OnValidateNick попытаемся получить UID.iShare, или UID.sMyINFO, или какой-либо другой параметр MyINFO строки, то мы получим nil, так как на этой стадии входа ещё не определён параметр sMyINFO, он будет определён на одной из последующих стадий (см. описание протокола NMDC и последовательность входа на хаб). Код UID.sNick - ник UID.sIP - ip UID.iProfile - профиль UID.bInOpList - в оплисте UID.bInIpList - в ip листе UID.bInUserList - вошёл на хаб UID.bHide - скрыт UID.iPort - порт хаба UID.iPortConn - порт соединения UID.sMacAddress - мак адрес UID.sVersion - версия протокола UID.sData - вспомогательное текстовое поле для различных нужд UID.UID - UID юзера (lightuserdate) UID.sSupports - параметр $Suppurts команды UID.sMyINFO - MyINFO строка UID.sDesc - описание UID.sTag - тэг UID.sClientName - название клиента UID.sClientVersion - версия клиента UID.sMode - режим UID.iUsHubs - обычные хабы UID.iRegHubs - рег хабы UID.iOpHubs - оп хабы UID.iSlots - слоты UID.iLimit - ограничитель скорости скачивания с пользователя (L:x) UID.iOpen - открытые экстра слоты (O:x) UID.iBandwidth - ограничитель скорости скачивания с пользователя (B:x) UID.iDownload - ограничитель скорости скачивания пользователем (D:x) UID.sFraction - ограничитель скорости скачивания пользователем/с пользователя (F:x/y) UID.sConn - соединение UID.iByte - магический байт UID.sEmail - email UID.iShare - шара в байтах Устанавливать можно пока только следующие параметры: Код UID.iProfile
UID.sMyINFO UID.bInOpList UID.bInIpList UID.bHide UID.sData |
|
|
21.7.2010, 22:39
Сообщение
#34
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.1.9
lua plugin v 1.22 Fixed: Исправлен баг в событии OnUserDisconnected, который приводил к краху после попытки получить параметр пользователя, например ник. Fixed: Исправлены значения по умолчанию для отсутствующих параметров MyINFO строки. Теперь значение по умолчанию равно nil. Примерчик вполне валидной MyINFO строки Код sMyINFO = $MyINFO $ALL Nick $ $$$$
iShare = 0 sMode = nil sDesc = sEmail = sTag = nil sConn = iByte = 0 sClientName = nil sClientVersion = nil iSlots = nil iUsHubs = nil iRegHubs = nil iOpHubs = nil iLimit = nil iOpen = nil iBandwidth = nil iDownload = nil sFraction = nil |
|
|
28.7.2010, 22:48
Сообщение
#35
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.2.0
lua plugin v 1.23 Fixed: Исправлен баг в работе таймеров. Fixed: Переделаны алгоритмы работы таймеров и списков задач. Fixed: Установлено ограничение: максимум 100 таймеров / скрипт. При превышении ограничения скрипт отключается с добавлением ошибки в лог ошибок. Added: Функция AddTimer теперь возвращает количество зарегистрированных таймеров с указанными id (то есть добавлен контроль за числом таймеров в скрипте) - это если всё ок, если ошибка, то как и раньше nil и сообщение об ошибке. Added: Функция DelTimer теперь возвращает количество удалённых по id таймеров. Added: Оптимизированы некоторые процессы (в частности парсинг MyINFO и получение параметра объекта UID). |
|
|
7.8.2010, 19:20
Сообщение
#36
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.2.1
lua plugin v 1.24 Fixed: Исправлена ошибка в таймерах. Fixed: Подкорректированы исходники под сборку на линуксе |
|
|
21.8.2010, 22:08
Сообщение
#37
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.2.2
Fixed: Исправлена ошибка в отправке данных при блокировке. Added: Добавлен кэш при массовой рассылке. |
|
|
22.8.2010, 15:04
Сообщение
#38
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.2.3
Fixed: Исправлен баг (падение хаба), который возникал при дисконнекте пользователя, который находился в процессе получения списока пользователей хаба. Fixed: Исправлена задержка в отправке команд, которая составляла 0.1 - 1 сек. |
|
|
12.9.2010, 21:28
Сообщение
#39
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.2.4
lua plugin v 1.25 Added: Добавлен параметр пользователя: время входа (iEnterTime - время отсылки клиентом на хаб команды $Key) Added: Добавлен отдельный объект для получения настроек в глобальном окружении Lua: Config. Например, имя бота можно теперь получить так: Config.sHubBot Fixed: Исправлено падение при удалении папки scripts в Lua плагине Fixed: Перепроверены все возможные "массовые" события Fixed: Поправлена регистрация бота с недопустимыми символами в нике. Fixed: Подправлен файл luaconf.h в Lua плагине для unix. Добавлена возможность поиска модулей в папке libs Fixed: Поправлен баг в событии OnValidateNick (возвращаемое значение) Fixed: Оптимизирована функция изменения размера хеш-таблицы (AutoResize) Fixed: Подправлены исходники под сборку на vs2010 Fixed: Оптимизированы некоторые функции хаба. В целях ускорения работы в настройках нужно поставить параметр iStepDelay = 0. Если хаб не нагружен, то обнуление данного параметра может вызвать некоторую нагрузку на процессор. |
|
|
5.10.2010, 21:42
Сообщение
#40
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.2.5
Added: Добавлены миллисекунды в логе Fixed: Исправлен баг в счётчике закрытых соединений, который сильно влиял на производительность Fixed: Проведена оптимизация основного цикла |
|
|
24.10.2010, 19:44
Сообщение
#41
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
rushub v 2.2.6
lua plugin v 1.26 Added: Сделан poll для линукса Added: Сделана настройка включения определения mac адреса (по умолчанию отключено) Added: Добавлено событие OnConfigChange, которое выполняется при изменении какой-либо настройки хаба. Это даст возможность скриптописателю хранить настройки в локальных переменных, а при изменении настроек перезаписывать данные в переменных, а не дергать каждый раз функции. Added: Добавлена lua api функцию Core.SetHubState(iNum) - установка состояния хаба. iNum = nil или iNum = 0 - остановка хаба. iNum = 1 - рестарт хаба. Остальные значения заразервированы на будущее Fixed: Убрано логирование и остановка хаба при ошибке в Choose Fixed: Доработано автоматическое действие при смене настроек: sHubBot и bRegMainBot |
|
|
Похожие темы
|
Сейчас: 23.12.2024, 9:48 |