myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
История благодарностей участнику Setuper. Спасибо сказали: 1708
Дата поста: В теме: За сообщение: Спасибо сказали:
16.1.2012, 21:50 Вопросы по RusHub
Технические вопросы
Изменились уровни логирования, поэтому в старой версии файла у тебя настройка: iMaxLevel = 0 (настройку iMaxErrLevel можно удалить, она теперь содержится в iMaxLevel).

Система логирования теперь такая:
FATAL - критическая ошибка (уровень 0);
ERROR - ошибка (уровень 1);
WARN - предупреждение (уровень 2);
INFO - информационное сообщение (уровень 3);
DEBUG - отладочное сообщение (уровень 4);
TRACE - трейс сообщение (уровень 5).

Параметр iMaxLevel показывает текущий уровень логирования (по умолчанию теперь 3).
При этом уровень логирования позволяет логировать и всё события, которые ниже уровнем.

Например, если у нас стоит уровень логирования 3 (INFO), то будут логироваться события INFO, WARN, ERROR и FATAL.
Если уровень логирования 5 (TRACE), то логируются все события.

Поэтому поставь уровень логирования iMaxLevel = 3, и логи должны появятся.
dimajak
15.1.2012, 16:22 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.8
lua plugin v 2.7


Added: Добавлена возможность установки параметров MyINFO.
Текущие параметры:
sDesc - описание пользователя (строка);
sTag - тэг пользователя (строка, только чтение);
sClientName - клиент пользователя (строка);
sClientVersion - версия клиента пользователя (строка);
sMode - режим пользователя (строка);
iUsHubs - число хабов, на которых пользовател является незареистрированным (число);
iRegHubs - число хабов, на которых пользовател является зареистрированным (число);
iOpHubs - число хабов, на которых пользовател является оператором (число);
iSlots - число слотов у пользователя (число);
iLimit - ограничитель L (число);
iOpen - ограничитель O (число);
iBandwidth - ограничитель B (число);
iDownload - ограничитель D (число);
sFraction - ограничитель F (строка вида x/y);
sConn - тип соединения пользователя (строка);
iByte - магический байт (число);
sEmail - email адрес пользователя (строка);
iShare - шара пользователя (число);
sSupports - поддреживаемые пользователем характеристики (строка);
sVersion - версия протокола (строка);
iProfile - порофиль ользователя (число, не удаляемо);
sIP - IP адрес пользователя (строка, только чтение);
sIPConn - IP адрес, по которому пользователь соединялся (строка, только чтение);
iPort - порт пользователя (число, только чтение);
iPortConn - порт, по которому пользователь соединялся (число, только чтение);
sMacAddress - mac адрес пользователя (строка, только чтение);
iEnterTime - время входа на хаб (число, только чтение);
bKick - право на кик пользователей (логическое);
bRedirect - право на перенаправление пользователей (логическое);
bHide - скрыть пользователя (логическое);
bInUserList - пользователь с списке (логическое, только чтение);
bInIpList - пользователю отсылаются IP адреса (логическое);
bInOpList - у пользователя есть ключик (логическое).

Added: Добавлена возможность установки из Lua своих параметров следующих типов данных: строки, числа, логические.
Added: Сообщения в логах хаба стали более наглядными. Добавился констроль строк и уровни логирования:
FATAL - критическая ошибка (уровень 0);
ERROR - ошибка (уровень 1);
WARN - предупреждение (уровень 2);
INFO - информационное сообщение (уровень 3);
DEBUG - отладочное сообщение (уровень 4);
TRACE - трейс сообщение (уровень 5).

Added: Добавлена поддержка поиска и соединения клиентов в ADC.

Fixed: Устранен баг в UDP поиске (не работал UDP поиск).
Fixed: Устранен баг с таймерами в lua (функция Core.AddTimer не вызывалась RunTime, а могла вызываться только непосредственно в событии OnStartup).
Fixed: Устранен баг в пути, по которому пишутся логи lua плагина.
Fixed: Произведена локальная оптимизация и рефакторинг, а также уменьшено потребление памяти хабом.
Nickolya, mariner, Артём, Maximum, PomanoB, KT315, Alexey, CrazyKiller, Saymon21, dimajak, LEXSOR
7.1.2012, 20:41 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
То есть ты хочешь обойтись без копирования строки?
В таком случае нужно использовать таблицу

Код
local sData1 = {"text"}
local sData2 = sData1 -- копирование по ссылке


Использование:
Код
print(sData1[1])
print(sData2[1])
MIKHAIL
3.1.2012, 19:06 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Разницы между
Код
function GetData(sData)
и
Код
GetData = function(sData)
быть не может, ибо lua интерпретатор транслирует первый вариант во второй (см. документацию http://www.lua.ru/doc/2.5.9.html или исходный код lua). Проводить тесты тут бессмысленно.
MIKHAIL
29.12.2011, 21:52 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Ну по-моему всё равно корявый метод.

Кстати, вот ещё пара методов тогда до кучи:

Код
function floor(num, precision)
  precision = math.pow(10, precision)
  return math.floor(tonumber(num) * precision + 0.5) / precision
end

function ceil(num, precision)
  precision = math.pow(10, precision)
  return math.ceil(tonumber(num) * precision - 0.5) / precision
end

floor(456.456556, 3) -- 456.457
ceil(456.456556, 3) -- 456.457
MIKHAIL
29.12.2011, 10:09 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Такой метод округления не хорошо использовать, так как возможен вариант, когда целая част состоит не из одной цифры, а например из 2 или 3
Код
n = 356.3695876


Лучше использовать функцию format:
Код
string.format("%.3f", 356.3695876) -- 356.370
MIKHAIL
20.12.2011, 12:23 RusHub. Пакеты для Debian/Ubuntu
Ага. Разумно.
Сделал.
Alexey
19.12.2011, 9:46 Ваши Вопросы И Предложения По Поводу Форума
Пора наверное поставить новогоднюю шапку на форуме big_smile.gif
Nickolya
8.12.2011, 9:45 Переобъявление переменной
Код
local a = {}
local b = a
a = nil


Создаётся таблица, и записывается в переменную "a" ссылка на эту таблицу.
В переменную "b" копируется ссылка на эту же самую таблицу (НЕ КОПИРУЕТСЯ сама таблица!).
Далее уничтожается ссылка переменной "a" на эту таблицу.
Однако на таблицу остаётся ссылка переменной "b", поэтому таблица не будет уничтожена сборщиком мусора.

Пример, показывающий, что мы действительно имеем дело с одной таблице и двумя ссылками на эту таблицу (то есть под таблицу память выделена 1 раз):
Код
local a = {v = 5}
local b = a
print(a.v) -- напечатает "5"
print(b.v) -- напечатает "5"
b.v = 6
print(a.v) -- напечатает "6"
print(b.v) -- напечатает "6"
a.v = 7
print(a.v) -- напечатает "7"
print(b.v) -- напечатает "7"


То есть, в данном примере переменные "a" и "b" равнозначны, так как ссылаются на одну и ту же таблицу (на одну и ту же память), и для изменения данных по этой памяти мы можем использовать как переменную "a", так и переменную "b".
Другими словами: действие b = a не приводит к копированию таблицы, оно лишь создаёт новую ссылку на уже существующую таблицу.
MIKHAIL
6.12.2011, 9:39 Переобъявление переменной
То что мы присваиваем переменной tPlayers значение nil не означает, что мы стираем из памяти таблицу, на которую указывала эта пременная до этого. Этим действием мы только удаляем ссылку на эту таблицу, а если на таблицу никто не ссылается, то таблица в скором времени будет удалена из памяти сборщиком мусора.
Если же мы пишем tPlayers = {}, то это означает, что мы создаём новую (пустую) таблицу и присваиваем переменной tPlayers ссылку на новую таблицу, при этом опять же, если на старую таблицу никто не ссылается, то таблица в скором времени будет удалена из памяти сборщиком мусора.
dimajak
24.10.2011, 14:34 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Раньше выставлялся 0, если шары нет.
По всей видимости для nmdc протокола это правильно, однако для adc протокола параметр шары может отсутствовать, то есть равен nil.
Поэтому в предверии внедрения adc баг перешёл в фичу.
Saymon21
23.10.2011, 17:20 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.7
lua plugin v 2.6


Added: Добавлено использование системы сборки GNU Autotools.
Added: Добавлена настройка iMaxSendSize, отвечающая за максимальный размер буфера отсылки (по умолчанию 2818047). При превышении этого размера пользователь отключается от хаба.

Fixed: Устранена повторная отсылка команды $Hello.
Fixed: Устранена уязвимость, при помощи которой можно было выкинуть с хаба зарегистрированного пользователя.
Fixed: Частичный рефакторинг кода.
Nickolya, mariner, Артём, PomanoB, KT315, Sekretchik, CrazyKiller, Saymon21, Sorrow
21.10.2011, 17:23 Проблема с хабом после установки роутера
udp нужно указывать в случае активного поиска со стороны хаба (специальные скрипты поиска у пользователей).

А для того чтобы искалось в клиенте на той же машине, что и сервер нужно либо в пассиве искать, либо бросать порты.
Accelerator
19.10.2011, 9:56 Вопросы по RusHub
Технические вопросы
Magneto 2 раза отсылает версию.
Для чего это сделано не знаю, но русхаб отключает после повторной отсылки команд стадии входа, так как это часть огромной системы антифлуда.
Atlant, можешь убрать повторную отсылку команды $Version в Magneto?

Цитата(Atlant @ 19.10.2011, 10:46) *
У меня даже в коде есть коммент, что верлик хочет версию, без нее кикает. А птоха - да, не проверяет.

Верлик хочет версию, но не проверяет её значение.
Mangust
19.10.2011, 7:01 Вопросы по RusHub
Технические вопросы
Тот кто писал Magneto допустил ошибку в версии. Magneto отправляет на хаб версию 1.0091, а по NMDC протоколу нужно отправлять версию 1,0091, то есть дробная и целая част должна быть отделена запятой, а не точкой.

Чтобы включить проверку в русхабе, достаточно написать небольшой скриптик:

Код
function OnVersion()
  return true
end


OnVersion
Mangust
2.10.2011, 0:36 ChatHistorySQL
История чата (MySQL)
Ksan
28.9.2011, 22:31 rex_pcre
RusHub | Библиотека pcre
Исходники приложил big_smile.gif

От встроенного в хаб функционала отказался.
Библиотека намного больше возможностей даёт и сохраняет модульность, не загромождая хаб лишним кодом
Saymon21
28.9.2011, 22:19 rex_pcre
RusHub | Библиотека pcre
Название: rex_pcre
Версия: 2.4
Хаб: RusHub
Описание: Библиотека для использования пёрловских регулярных выражений
Использование: Кладём dll библиотеку в папку libs. Подключается библиотека так: require"rex_pcre"

Документация (англ.): [attachment=6075:manual.html]
Библиотека win32: [attachment=6073:rex_pcre.rar]
Библиотека win64: [attachment=6074:rex_pcre_win64.rar]
Исходники (в архиве есть проект для vs2008): [attachment=6076:lrexlib_2.4.0.rar]

p.s. Чуть позже переведу мануал на русский big_smile.gif
Nickolya, PomanoB, CrazyKiller, Saymon21, DEN 007
19.9.2011, 20:21 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Ага. Действительно ошибка.
Исправил.

Линуксоиды могут пересобрать из svn.
Те кто на винде - ждите следующий релиз.
Артём, KT315, Saymon21
10.9.2011, 21:01 Вопросы по RusHub
Технические вопросы
Скорее всего скрипты.
Попробуй поотключать скрипты.

По-моему даже на тестах при 20000 юзерах 5 секунд никогда не было.
CrazyKiller
31.8.2011, 10:42 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Спасибо за найденную ошибку.
Исправлено.
PomanoB
17.8.2011, 14:03 [FreeBsd]LuaPlugin
Исправил этот баг.
Обновись с svn и попробуй.
ShadoWx, Saymon21
14.8.2011, 20:55 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.6

Added: Добавлена частичная поддержка ADC протокола (вход/выход и чат).
Для переключения хаба в ADC режим работы, нужно установить настройку bAdcOn.

Fixed: Устранена проблема с поиском пользователей в 64 битной системе.
Fixed: Устранен баг с установкой MyINFO из скрипта.
Nickolya, ShadoWx, Otshelnik-Fm, KT315, Alexey, Sekretchik, CrazyKiller, Saymon21, Dimon21
11.8.2011, 20:31 NetInDescription
Добавляет сеть в описание пользователя
adc протокол пока что не реализован, поэтому на этих выходных будет очередной релиз с соответствующими исправлениями.
CrazyKiller
10.8.2011, 7:06 Ваши Вопросы И Предложения По Поводу Форума
Saymon21, получается, что ты все символы | заменяешь на коды? Ведь это в корне не верно. А если нужно написать именно символ | ?
Код
Core.SendToUser(tUser, "$UserCommand 1 3 Админ\\Правила хаба$<%[mynick]> !rules&#124;|"..
    "$UserCommand 1 3 Админ\\Хабы-друзья$<%[mynick]> !hubs&#124;")

Нужно просто избавиться от преобразования кодов в символы, именно это и делает мой код, причём не важно какой символ отвечает этому коду символ | или какой-то другой.
Nickolya
9.8.2011, 21:06 Ваши Вопросы И Предложения По Поводу Форума
Есть предложение таки устранить проблему с отображением кода &#124; на форуме.
Покопал тут файлы IPB...
Файл sources/classes/bbcode/class_bbcode.php. Если в функции pre_db_parse в самом начале написать
Код
$txt = preg_replace( "/&#(\d+)/", "&#38;#\\1", $txt );
то в принципе проблема исчезнет.
Хотя могут быть какие-нибудь побочные эффекты. Но думаю попробовать стоит big_smile.gif
Nickolya, Saymon21
8.8.2011, 22:25 Компиляция из SVN
Проблема в линковке под данную платформу линукса.
Возможно требуется поиграть с опцией -ldl.

http://www.altlinux.org/UpStream/AsNeeded

То есть, во всей видимости, предлагается собирать так:

Код
RusHub: $(OBJS)
    $(CXX) -lrt -o RusHub $(OBJS) -ldl $(CURDIR)/tinyxml/tinyxml.a
kotuk
30.7.2011, 14:01 FirstRusHubBot
приводим RusHub к рабочему виду функционалом скриптов
Ну так замени на:

tUser.iProfile = iRegProfile
tUser.iProfile = -1
KT315, Dimon21
29.7.2011, 15:18 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Действительно есть такая ошибка.

И действительно она возникает только на 64 разрядной машине.
Ошибка достаточно серьёзная. Из-за неё не работает не только личка, но и многие другие функции такие как поиск и тд.


Исправил этот баг.
Выложил версию 2.3.6[beta]_win64 (http://mydc.ru/topic2378.html)
Darksome
20.7.2011, 11:42 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
В связи с увеличением производительности русхаба было увеличено максимальное число файловых дескрипторов до 32768.
Однако оказалось, что 64 разрядная сборка крешилась из-за этого.

Я пересобрал 64 разрядную сборку с уменьшенных числом файловых дескрипторов (до 16384).

Что это означает? Это означает, что максимально доступно 16384 сокетов (соединений). Это касается только windows x64!

Имеем:

unix: нет ограничений
windows x32: 32768
windows x64: 16384
Maximum, Saymon21
17.7.2011, 18:14 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.5
lua plugin v 2.5


Fixed: Оптимизация запросов на соединение. Одновременный приём до 64 соединений за цикл (до этого было 1 соединение за цикл).
Fixed: Проведен стресс-тест с последующей оптимизацией, что позволяет отныне хабу держать 10k+ соединений.
Fixed: Устранён баг в команде $SR UDP. Отсутствовала настройка длины команды.
Fixed: Оптимизированы события в Lua плагине. Для каждого события создан свой список скриптов. Таким образом, при вызове события не происходит никаких лишних обходов (обходятся только скрипты, в которых есть функция того или иного события).
Nickolya, PomanoB, KT315, Sekretchik, CrazyKiller, Saymon21, Dimon21, mod, arktik
26.6.2011, 9:52 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.4
lua plugin v 2.4


Added: Добавлена задержка для процесса остановки windows службы
Added: В файл RusHub.xml добавлены относительные (относительно него) пути, которые при загрузке заменяются на абсолютные, а при сохранении настроек в файл - обратно в относительные

Fixed: Устранен баг в команде $UserIP
Fixed: Устранен баг в lua api функции SendToIP
Fixed: Устранен баг в установке ipv6 адреса без порта
Fixed: Устранен баг в тримировании пустой строки
Fixed: Изменена логика работы события OnExit при остановке хаба (теперь событие отрабатывает до дисконнекта всех пользователей хаба)
Fixed: Проведено профилирование и оптимизация ядра хаба
Fixed: Немного снижено потребление памяти
Nickolya, mariner, Otshelnik-Fm, PomanoB, Sekretchik, CrazyKiller, Saymon21, arktik
17.6.2011, 20:43 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Залил версию 2.3.3a с исправленной проблемой отсылки ip адресов (http://mydc.ru/topic2378.html)
Баг был в хабе, поэтому плагин тот же остался (v2.3)
PomanoB, Infinity_Love
15.6.2011, 17:08 С Днюхой Тебя!
поздравления
Saymon, с днюхой!
big_smile.gif
Saymon21
13.6.2011, 13:31 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.3
lua plugin v 2.3


Added: Поддержка ipv6. Пример настройки одновременного прослушивания ipv4 и ipv6 адресов:
Код
<Item Name="sAddresses">0.0.0.0:411 [::]:411 [fe80::219:7dff:fe86:e017]:413</Item>
Адреса указываются через пробел. Порт указывается через двоеточие (если порт отсутствует, то берётся порт по умолчанию 411), при этом, ipv6 обязательно необходимо заключать в квадратные скобки (ipv4 также может быть заключен в квадратные скобки, однако для ipv4 это необязательное требование). Также вместо ip адреса может быть указан хост, а вместо числового значения порта может быть указан его буквенный аналог (например: 80 <=> http, 443 <=> https, 512 <=> exec и тд.).

Fixed: Упрощено взаимодействие плагинов
Nickolya, mariner, PomanoB, Infinity_Love, Sekretchik, CrazyKiller, Saymon21
21.5.2011, 17:07 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.2
lua plugin v 2.2


Fixed: Устранен баг в списке удаляемых таймеров
Fixed: Убран автозапуск хаба непосредственно после установки сервиса
Fixed: Исправлен lang файл по умолчанию
Fixed: Устранен баг циклического вызова при отсутствии файла лога
Fixed: Устранен баг в вызове параметров UID
Fixed: Устранен баг в вызове события OnScriptError
Nickolya, PomanoB, KT315, Sekretchik, CrazyKiller, Saymon21, Mustik
19.5.2011, 8:51 Мафия
игра Мафия для Птохи API2
А ты глянь на следующую строку, ведь очевидно, что нужно искать функцию RemoveTimer, в которую передаётся вместо числа nil

Ведь простейшая ситуация: игрок был зарегистрирован в игре, таймер был остановлен и переменная Tmr была обнулена, игрок уходит с хаба, при выходе вызывается функция UnRegUser и на вызове TmrMan.RemoveTimer(Tmr) скрипт падает, так как переменная Tmr была установлена в nil ранее.
dimajak
18.5.2011, 20:46 Милиция против DC
запрет со стороны милиции и провайдера
http://mydc.ru/topic4698.html + ОПератор, который будет мониторить поиск и добавлять новый контент в базу, благо в скрипте это можно делать прям из окна с результатами поиска и всего одним кликом
мамин_парень
13.5.2011, 23:26 Тексты
версия 2.0
Код
function OnChat(UID, sData)
    local sCmd = sData:match"%b<>%s+[!+*](%S+)"
    if sCmd then
        local sText = Files.LoadText(sPath..sCmd..".txt")
        if sText then
            sText = sText:gsub("%[(%S+)%]", {
                HubName = Core.GetConfig("sHubName"),
                NickMixLen = Core.GetConfig("iMinNickLen"),
                NickMaxLen = Core.GetConfig("iMaxNickLen"),
                Port = Core.GetConfig("iMainPort"),
                SubPorts = Core.GetConfig("sSubPorts"),
                Language = Core.GetConfig("sLocale"),
                HubBot = Core.GetConfig("sHubBot"),
            })
            Core.SendToUser(UID, sText, sBot, sBot)
            return true
        end
    end    
end
Accelerator, CrazyKiller, Dimon21, AfLc
4.5.2011, 20:54 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.1
lua plugin v 2.1



Added: Сборка win64
Added: Введено юнит-тестирование хаба

Fixed: Устранён баг в lua плагине (удаление из списка)
Fixed: Проверено/устранено подтекание памяти
Fixed: Исправлен баг в функции получения mac-адреса
Fixed: Проведён рефакторинг и оптимизация
Nickolya, PomanoB, KT315, Sekretchik, Saymon21
5.4.2011, 10:24 Ваш ник занят и проблемы сети
проблема повторного подключения к хабу
Современные клиенты пингуют хабы, отсылая пустую команду (один единственный символ | в сообщении). Пинг происходит примерно раз в 3-4 минуты.

Хаб же отключает пользователя по 2 причинам:
  1. пользователь ушёл с хаба сам (клиент пользователя отослал на хаб сообщение нулевой длины)
  2. пользователь не доступен.



Во втором случае действия зависят от реализации сокет-интерфейса ОС. В винде при попытке отослать данные в "мертвый сокет" возвращается ошибка, по которой хаб и удаляет пользователя.

Однако существует ряд случаев, когда ошибка может не возникать очень долго и хаб будет думать, что клиент ещё "жив".

Возможен случай, когда хаб пытается что-то отослать клиенту, но из-за каких-то неполадок в сети отправленные пакеты теряются, в таком случае хаб будет постоянно пытаться отослать пакеты, не получая никакого ответа, а так как TCP протокол предполагает подтверждение или опровержение доставки пакетов, то хаб будет держать пользователя, пока не получит отказ.


Что касается 4 часов, то это keep alive для сокетов, то есть после определенного времени бездействия система пытается проверить состояние соединения средствами протокола tcp. Система отправляет пинги через некоторый промежуток времени, и если после определенного количества пингов не было получено ни одного ответа от клиента, то клиент считается умершим и сокет закрывается системой.
мамин_парень
22.3.2011, 22:26 Библиотека mtime
Windows only | Время в миллисекундах
не кроссплатформенно

Вот код функции для линукса:

Код
#ifndef _WIN32
#include <sys/time.h>
unsigned long GetTickCount() {
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
}
#endif // _WIN32
Invisible
21.3.2011, 17:28 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Оператор обычно работает быстрее методов, так что лучше использовать оператор #, чем метод len
Saymon21
20.3.2011, 15:09 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.3.0
lua plugin v 2.0



Added: Добавлено определение версии в системах UNIX
Added: Добавлен показ в логе загружаемого плагина (имя и версия)
Added: Добавлен терминальный сигнал SIGTSTP (Ctrl-Z)
Added: Реализован активный поиск со стороны хаба (udp поиск).
Added: Полноценная поддержка команды UserIP (для возможности использования клиент должен отослать в $Support характеристику UserIP или UserIP2)
Added: Добавлены настройки:
sMainPath - основная директория
sPluginPath - директория подгрузки плагинов
sLogPath - директория логов
sLangPath - директория языковых настроек
sLang - текущая языковая настройка (имя файла без расширения)
Файл конфигурации задаётся в настройке -c командной строки


Fixed: Исправлены некоторые не значительные утечки в памяти
Fixed: Изменена нотация и проведен рефакторинг кода
Fixed: Исправлено логирование (в логгер добавлен буфер для логирования событий до загрузки настроек логирования)
Fixed: Исправлен баг в Core.sSystem (возвращалась пустая строка, если скрипт автоматически запускался при старте хаба)
Fixed: Устранён баг с выставление флага пассивного режима
Fixed: Функция SendToAllExceptIps не работала, а так как её никто не использовал, то для единого стиля функция переименована в SendToAllExceptIPs
Fixed: Исправлен счётчик закрываемых соединений
Fixed: Оптимизация алгоритма проверки при массовой рассылке
Fixed: Изменены идентификаторы команд:

Код
0 — $MultiSearch
1 — $MultiSearch Hub:
2 — $Search Hub:
3 — $Search
4 — $SR
5 — $SR UDP
6 — $MyINFO
7 — $Supports
8 — $Key
9 — $ValidateNick
10 — $Version
11 — $GetNickList
12 — Chat
13 — $To
14 — $Quit
15 — $MyPass
16 — $ConnectToMe
17 — $RevConnectToMe
18 — $MultiConnectToMe
19 — $Kick
20 — $OpForceMove
21 — $GetINFO
22 — $MCTo
23 — $UserIP
24 — Ping
25 — Unknown
Nickolya, mariner, Jackson, Otshelnik-Fm, PomanoB, KT315, Sekretchik, Saymon21
17.3.2011, 9:57 Не работает dofile(filename) ?
Функция dofile загружает дополнительный lua код в текущий скрипт, и этой функции доступно только глобальное окружение скрипта.
В свою очередь, если в загружаемом функцией dofile файле объявляется глобальная переменная, а в самом скрипте определена такая же переменная но локально, то локальная переменная имеет выше приоритет, чем глобальная, при этом функция dofile не имеет доступа к локальной переменной. Отсюда получаем, что dofile загружает в глобальную переменную Players, а скрипт будет брать локальную переменную Players.
Для того чтобы обратиться к глобальной переменной нужно обращаться к ней через таблицу _G.
То есть в данном случае просмотреть содержимого ГЛОБАЛЬНОЙ переменной Players возможно следующим образом:
Код
for i,v in pairs(_G.Players) do
Invisible, PomanoB, Kingston, dimajak, MIKHAIL
14.3.2011, 15:14 Описание Протокола ADC
Advanced Direct Connect Protocol
QUI

Синтаксис:

Код
QUI sid



Направления:

F


Стадии:

IDENTIFY, VERIFY, NORMAL


Описание:

Команда, которая указывает на то, что клиент с указанным sid ушёл с хаба. Если SID принадлежит клиенту, которому отсылается данная команда, то это должно означать, что к данному клиенту были приняты какие-то меры (дроп, кик, бан, перенаправление). Хаб не должен посылать клиенту какие-либо данные после того как он отослал ему команду QUI.

Команда может содержать следующие параметры:

ID - SID палача (например того, кто кикнул)
TL - время бана в секундах (Time Left). -1 - постоянный бан
MS - причина
RD - адрес перенаправления
DI - любой клиент который имеет этот параметр в QUI должен закрыть все соединения с другими клиентами


Примеры:
Код
IQUI AAAA
Saymon21
14.3.2011, 15:13 Описание Протокола ADC
Advanced Direct Connect Protocol
PAS

Синтаксис:

Код
PAS password



Направления:

T


Стадии:

VERIFY


Описание:

Команда для отсылки пароля. Пароль (в кодировке utf-8) следует за случайными данными, которые получены при помощи SID и конвертированы в base32. Если проверка пароля прошла успешно, хаб переводит клиента на стадию NORMAL.
Saymon21
14.3.2011, 15:13 Описание Протокола ADC
Advanced Direct Connect Protocol
GPA

Синтаксис:

Код
GPA data



Направления:

F


Стадии:

VERIFY


Описание:

Команда на запрос пароля. Параметр data - это не менее 24 случайных символов (в base32 кодировке)
Saymon21
14.3.2011, 15:12 Описание Протокола ADC
Advanced Direct Connect Protocol
RCM

Синтаксис:

Код
RCM protocol separator token



Направления:

F, T


Описание:

Команда на пассивное соединение (Reverse CTM). Пассивный клиент запрашивает соединение с активным клиентом.
Saymon21
14.3.2011, 15:12 Описание Протокола ADC
Advanced Direct Connect Protocol
CTM

Синтаксис:

Код
CTM protocol separator port separator token



Направления:

F, T


Описание:

Запрос на активное соединение (ConnectToMe). Используется активными клиентами для соединения с такими же активными клиентами или для ответа на RCM команду. Только активные TCP клиенты могут отсылать эту команду. token - это строка, которая идентифицирует входящее соединение и должна присутствовать в команде INF соединяемого клиента. Клиенты не должны принимать входящие соединения, если до этого не была послана данная команда. protocol - это произвольная строка, которая указывает на протокол для соединения. В случае соединения по протоколу ADC 1.0 эта строка должна иметь вид "ADC/1.0". Если протокол поддерживается клиентом, то в ответ на RCM должны быть скопированы параметры token и protocol. Если протокол не поддерживается, то должна быть отправлена команда DSTA, которая указывает на возникшую ошибку.
Saymon21
14.3.2011, 15:11 Описание Протокола ADC
Advanced Direct Connect Protocol
RES

Синтаксис:

Код
RES separator sid (separator param)+



Направления:

F, T, C, U


Описание:

Команда для отсылки результатов поиска. Команда построена по подобию команды INF. Клиенты должны отдавать в этой команде имя файла, sid, размер и метку, а также могут отдавать какие-то дополнительные параметры если таковые доступны. На пассивный поиск каждый клиент в ответ может отсылать до пяти результатов, на активный - до десяти. При пассивном поиске команда отсылается клиенту через хаб, при активном - напрямую. Пассивность клиента определяется из параметра SU команды INF.


Параметры:

Параметры
Имя: FN
Описание: полное имя файла в шаре (включая путь к файлу)


Имя: SI
Описание: размер в байтах


Имя: SL
Описание: текущее доступное число слотов


Имя: TO
Описание: метка
Saymon21
14.3.2011, 15:11 Описание Протокола ADC
Advanced Direct Connect Protocol
SCH

Синтаксис:

Код
SCH separator sid (separator param)+



Направления:

F, T, C, (U)


Описание:

Команда поиска. Каждый параметр данной команды состоит из имени и значения, следующего за именем. Имя параметра состоит из 2 символов (арабские буквы верхнего регистра и/или цифры). Клиенты должны игнорировать неизвестные параметры и производить поиск так, как будто они не передавались. Если все параметры для клиента являются неизветсными, то клиент должен проигнорировать команду и не искать ничего.


Параметры:

Параметры
Имя: AN, NO, EX
Описание: поисковый запрос, где AN - означает "и" т.е. включать (and), NO - не включать (and not), EX - расширение.
Поиск указанного файла (а также пути к нему) должен осуществляться регистронезависимым образом по подстроке, которая указана в параметре AN, при этом из результатов поиска нужно удалить результаты, которые содержат подстроку, указанную в параметре NO, и в конце оставить результаты с указанным в параметре EX расширением (если этот параметр указан). Параметр EX должен быть без символа '.' спереди


Имя: LE
Описание: верхняя граница размера файла (в байтах)


Имя: GE
Описание: нижняя граница размера файла (в байтах)


Имя: EQ
Описание: точный размер файла (в байтах)


Имя: TO
Описание: метка. Используется клиентом для того чтобы отличать один поиск от другого. Если этот параметр присутствует с команде поиска, то клиент, получивший эту команду, должен скопировать этот параметр в свою команду с ответом (результатом поиска)


Имя: TY
Описание: тип поиска. Если этот параметр не указан, то любой тип поиска, иначе 1 - поиск файла, 2 - поиск директории



Замечание:

Поиск по UDP может подменять IP адрес, и поэтому может быть средством для DDoS атаки. Поиск по UDP следует разрешать только для проверенных клиентов.


Примеры:

Пассивный поисковый запрос:
Код
FSCH AABO +TCP4-NAT0 TOauto TRI5YBDRKG6KEDTVZ6ABZDYSVURSSRUHKUHWZILGA


Активные поисковые запросы:
Код
BSCH AAAA TRTVHBXNPAJVRUDNCTJQ5CEACEG2JDEJNAYMH343Y TO3179684286
BSCH AACG TOauto TRQQHYGSUGZ5TWAOJWQNJ6RNA34T6LOSZSBHQ7V4Y
BSCH AACQ TRGTVC3IRS6J6QI2DXPFFAPFC6IQ7UAZ6AISSUEQY TOauto
Saymon21
14.3.2011, 15:10 Описание Протокола ADC
Advanced Direct Connect Protocol
MSG

Синтаксис:

Код
MSG separator sid (separator pm-sid)? separator text (separator ME1)? (separator PM sid)?



Направления:

F, T


Описание:

Сообщение чата. Клиент, который получает сообщение должен заключить ник в символы <>, для однотипного отображения.


Параметры:

Для отсылки личного сообщения указывается параметр pm-sid - это SID клиента, которому предназначено сообщение. Это поле должно содержать реальный SID если это нормальный личный разговор.

ME1 - сообщение должно быть отображено как /me в IRC ("*nick text")

TS1234567890 - unix время отправки сообщения


Примеры:

Сообщение чата:
Код
BMSG AAAA Всем\sпривет

Сообщение от третьего лица в чат:
Код
BMSG AAAA слушает\sхорошую\sмузыку ME1

Сообщение в личку:
Код
EMSG AAAA AAAB привет PMAAAA

Сообщение от третьего лица в личку:
Код
EMSG AAAA AAAB слушает\sхорошую\sмузыку ME1 PMAAAA
Saymon21
14.3.2011, 15:10 Описание Протокола ADC
Advanced Direct Connect Protocol
INF

Синтаксис:

Код
INF separator sid (separator param)+



Направления:

F, T, C


Стадии:

IDENTIFY, NORMAL


Описание:

Данная команда призвана помочь получить обновлённую информацию о клиенте. При её получении, соответствующие параметры добавляются или обновляются. Имя каждого параметра определяется при помощи двух символов, за которыми следуют данные, определяющие значение этого параметра. Значение того или иного параметра может быть стёрто путём отсылки одного только названия параметра (без данных). Клиенты должны игнорировать неизвестные им параметры. Большинство из параметров данной команды интересны только при клиент-хаб соединении. При соединении клиент-клиент данная команда в основном используется только для идентификации. Хабы могут требовать или игнорировать какие-либо или все параметры. Многие из параметров, такие как шара и версия клиента, носят чисто информативный характер и должны быть взяты как есть, ибо их очень легко можно подделать.
Однако, клиенты должны стремиться отсылать точные данные о себе для обеспечения общей целостности всей системы, так как неверная информация может раздражать некоторых людей. Для обновления каких-то параметров достаточно отослать только эти изменения, а не все параметры.


Параметры:

Параметры
Имя: ID
Тип: base32
Описание: CID клиента (необходим для соединения клиент-клиент).


Имя: PD
Тип: base32
Описание: PID клиента. Хабы должны проверять, что TigerHash(PID) == CID и удалять это поле прежде чем рассылать остальным клиентам. Данный параметр не должен отсылаться при соединении клиент-клиент.


Имя: I4
Тип: IPv4
Описание: IPv4 адрес без порта. Пустой адрес (0.0.0.0) означает, что хаб должен заменить его реальным IP адресом клиента. Хабы должны проверять соответствие между IP адресом в данном параметре и реальным IP адресом клиента чтобы избегать DDoS атак. Клиенты могут отсылать пустой адрес, а могут отсылать правильный IP адрес. Каждый клиент, который поддерживает прямое соединение TCPv4 (актив) должен отослать TCP4 в параметре SU.


Имя: I6
Тип: IPv6
Описание: IPv6 адрес без порта. Пустой адрес (:big_smile.gif означает, что хаб должен заменить его реальным IP адресом клиента. Каждый клиент, который поддерживает прямое соединение TCPv6 (актив) должен отослать TCP6 в параметре SU.


Имя: U4
Тип: целое число
Описание: UDP порт клиента. Все клиенты, которые поддерживают входящие UDPv4 пакеты должны отсылать UDP4 в параметре SU.


Имя: U6
Тип: целое число
Описание: UDP порт клиента. Все клиенты, которые поддерживают входящие UDPv6 пакеты должны отсылать UDP6 в параметре SU.


Имя: SS
Тип: целое число
Описание: размер расшаренных данных в байтах


Имя: SF
Тип: целое число
Описание: число расшаренных файлов


Имя: VE
Тип: строка
Описание: идентификатор клиента и версии (рекомендуется короткий идентификатор и точный номер версии)


Имя: AP
Тип: строка
Описание: идентификатор клиента (application)


Имя: US
Тип: целое число
Описание: максимальная скорость закачки (байт/сек)


Имя: DS
Тип: целое число
Описание: максимальная скорость скачки (байт/сек)


Имя: SL
Тип: целое число
Описание: максимальное число одновременных закачек (слоты)


Имя: AS
Тип: целое число
Описание: автоматический скоростной предел слота (байт/сек). Клиент держит открытым слот до тех пор, пока скорось загрузки не превысит указанную величину


Имя: AM
Тип: целое число
Описание: минимальное количество одновременных загрузок (автоматических режим)


Имя: EM
Тип: строка
Описание: E-mail адрес


Имя: NI
Тип: строка
Описание: ник (или имя хаба). Хаб должен гарантировать, что указанный ник уникален на хабе вплоть до регистра. Правильным считается ник, в котором все символы с юникодами больше 32, хотя хабы могут сами регулировать запрещённые символы в нике и выдавать соответствующее сообщение


Имя: DE
Тип: строка
Описание: описание. Правильным считается описание, в котором все символы с юникодами больше либо равны 32


Имя: HN
Тип: целое число
Описание: число хабов, на которых клиент является незарегистрированным пользователем в NORMAL состоянии


Имя: HR
Тип: целое число
Описание: число хабов, на которых клиент является зарегистрированным (должен отправить пароль) пользователем в NORMAL состоянии


Имя: HO
Тип: целое число
Описание: число хабов, на которых клиент является оператором в NORMAL состоянии


Имя: TO
Тип: строка
Описание: признак получения RCM/CTM команд при установке связи клиент-клиент


Имя: CT
Тип: целое число
Описание: Тип клиента. 1 - бот, 2 - зарегистрированный, 4 - оператор, 8 - супер юзер, 16 - владелец хаба, 32 - сам хаб (используется при отсылке INF команды самим хабом)


Имя: AW
Тип: целое число
Описание: состояние клиента. 1 - away, 2 - расширенный away - не заинтересован в чате хаба (хабы могут не рассылать массовые сообщения клиентам с таким флагом)


Имя: SU
Тип: строка
Описание: список характеристик, разделённых запятой. Данный параметр служит для уведомления о характеристиках соединенного клиента


Имя: RF
Тип: строка
Описание: URL для перенаправления (хаб или веб страница)



Замечание:

Обычно только один IP адрес (I4 or I6) используется для всех соединений. Нужно проявлять осторожность при приёме соединений с неизвестного IP. Только проверенным пользователям можно разрешать использовать различные IP адреса. Если пренебречь проверкой соответствия IP, то хаб может быть использован для организации DDoS атак.


Когда хаб получает данную команду на стадии IDENTIFY, он должен проверить параметры PD и ID, и либо перейти на стадию VERIFY, отослав команду PAS, либо перейти на стадию NORMAL, отослав собственную информацию командой INF (если это не было сделано раньше), затем отослать команды INF всех подключенных клиентов на стадии NORMAL, и в последнюю очередь отослать всем команду INF соединенного клиента. После того как хаб отослал свою команду INF, в параметре NI будет название хаба, в параметре VE - название платформы хаба и версия, и в параметре DE - топик хаба (описание хаба).

Когда клиент получает данную команду при соединении клиент-клиент на стадии IDENTIFY, он должен сопоставить параметры ID и TO, отосланные в команде INF и перейти на стадию NORMAL.


Примеры:
Код
IINF AAAA VEверсия\sхаба NIназвание\sхаба DEописание\sхаба

Код
BINF AAB3 IDWYCH3RE46Z3JX3J3P3P33NYMVQSSBNVERQTNFVA NIник SL5 SS184304078130 SF1339 HO0 VEApexDC++\s1.3.6 US65536 SUNAT0 I410.10.10.10 HN7 HR1 FS4
Saymon21
14.3.2011, 15:09 Описание Протокола ADC
Advanced Direct Connect Protocol
SID

Синтаксис:

Код
SID separator sid



Направления:

F


Стадии:

PROTOCOL


Описание:

Данная команда назначает SID пользователю, который входит на хаб. Хаб должен отослать эту команду после команды SUP, но до команды INF на стадии PROTOCOL. Клиент, получивший эту команду, должен отослать на хаб информацию о себе командой INF.
Saymon21
14.3.2011, 15:08 Описание Протокола ADC
Advanced Direct Connect Protocol
SUP

Синтаксис:

Код
SUP (separator ('AD' | 'RM') feature)+



Направления:

F, T, C


Стадии:

PROTOCOL, NORMAL


Описание:

Данная команда определяет какие характеристики будут использоваться со стороны хаба и со стороны клиента. Название характеристики должно состоять из четырёх латинских букв верхнего регистра, при этом последним символом может быть цифра, которая указывает на версию характеристики. Первые же три символа должны быть исключительно латинскими буквами в верхнем регистре, дабы избежать каких-либо конфузов между различными ПО. Все без исключения ADC клиенты должны поддерживать BASE характеристику (или какую-либо её версию). Как сервер, так и клиент могут использовать любую характеристику, указанною другой стороной в команде SUP.

Указанная команда также может использоваться для динамического добавления или удаления характеристик. Префикс AD перед характеристикой указывает на то, что характеристика добавляется, префикс RM - указывает на удаление характеристики.

Когда хаб получает данную команду на стадии входа PROTOCOL, он должен ответить клиенту такой же командой со своими характеристиками, а также назначить клиенту SID и опционально отослать командой INF информацию о себе, и далее перейти на стадию IDENTIFY.

Когда при взаимодействии клиент-клиент один из клиентов получает данную команду на стадии PROTOCOL, он должен ответит такой же командой со своими характеристиками, отправить команду INF о себе и перейти на стадию IDENTIFY.
Saymon21
14.3.2011, 15:06 Описание Протокола ADC
Advanced Direct Connect Protocol
STA

Синтаксис:

Код
STA separator code separator description



Направления:

F, T, C, U


Стадии:

Все


Описание:

Параметр code имеет формат "xyy", где x - это уровень ошибки, а yy - это код ошибки. Уровень и код ошибки обрабатываются отдельно, один о тот же код может быть на разных уровнях.


Уровни:
  • 0 - успешное выполнение (используется для подтверждения команд), код ошибки должен быть "00", а дополнительный флаг "FC" содержит в себе подтверждение команды FOURCC, если это необходимо;
  • 1 - исправимая ошибка (ошибка, но не дисконнект);
  • 2 - критическая ошибка (дисконнект).



Коды ошибок:
  • 00 - основная ошибка, показ описания;
  • x0 - то же самое, что и 00, но распределенное согласно грубой структуре установленной ниже;
  • 10 - основная ошибка хаба;
  • 11 - хаб переполнен;
  • 12 - хаб отключен (не принимает новые входящие соединения);
  • 20 - основная ошибка входа/доступа;
  • 21 - недопустимый ник;
  • 22 - ник занят;
  • 23 - недопустимый пароль;
  • 24 - CID занят;
  • 25 - доступ запрещён, флаг "FC" - это FOURCC последней команды. Отсылается когда пользователю не разрешается выполнить конкретную команду;
  • 26 - только для зарегистрированных пользователей;
  • 27 - недопустимый PID;
  • 30 - кик/бан/дисконнект;
  • 31 - постоянный бан;
  • 32 - временный бан, флаг "TL" показывает число оставшихся секунд (Также используется при кике);
  • 40 - ошибка протокола;
  • 41 - не поддерживаемый протокол передачи, флаг "TO" - признак, флаг "PR" - строка протокола. Клиент, отсылающий команду CTM или RCM, должен отослать эту ошибку, если нет поддержки;
  • 42 - ошибка направленного соединения, флаг "TO" - признак, флаг "PR" - строка протокола. Клиент, отсылающий команду CTM или RCM, должен отослать эту ошибку, если нет соединения;
  • 43 - команда INF содержит ошибки, флаг "FM" - поле команды, "FB" - ошибочное поле;
  • 44 - неправильное состояние, флаг "FC" показывает последнюю FOURCC команду;
  • 45 - ошибка в характеристике, флаг "FC" показывает FOURCC ошибку характеристики;
  • 46 - указан неверный IP в команде INF, флаг "I4" или "I6" показывает правильный IP;
  • 47 - нет одинаковых характеристик в командах SUP хаба и клиента;
  • 50 - клиент-клиент / ошибка передачи файла;
  • 51 - файл недоступен;
  • 52 - часть файла недоступна;
  • 53 - нет свободного слота;
  • 54 - нет одинаковых характеристик в командах SUP связываемых клиентов.



Замечания:

Параметр "description" содержит описание ошибки, для просмотра этого описания пользователем.

Даже если код ошибки неизвестен клиенту, он должен отображать текстовое сообщение. Коды ошибок используются для того, чтобы клиенты могли использовать различные действия на различные ошибки. Большинство кодов не содержат никаких параметров и могут использоваться только с типами команд C и I.
Saymon21
14.3.2011, 9:52 помогите найти скрипт для PtokaX Афаризмы
ORB, ну сообщения то ты можешь писать, какие проблемы полазить по форуму пару часов и посмотреть что к чему? Или тебя нужно забанить, чтобы ты не писал сразу, а поискал как следует!
Ksan
6.3.2011, 21:07 Antisearch
API 2
Версия 1.4

  1. Добавил таблицу профилей, для которых не применяется проверка.
  2. К причине добавил путь к запрещенному файлу (приписывается в скобках к причине наказания).
  3. Сделал переподключение к sql серверу в случае разрыва соединения.
  4. Добавлена отсылка причины дисконнекта (в личку).
mariner, Saymon21
4.3.2011, 18:04 Предложения для развития
Хочу сделать поддержку первой версии команды $UserIP
С событием мне кажется будет лучшем вариантом

Тут не идёт речь об автоматической отсылке ip адресов при входе на хаб - это поддерживает вторая версия команды. Речь идёт именно о клиентском запросе ip адреса командой $UserIP.

Почитай описание команды $UserIP.
Saymon21
4.3.2011, 10:14 DDD++ – лёгкий и быстрый DC++ клиент
Преднастроенный клиент с готовыми списками хабов
Думаю автору следует указать, что данный клиент - это очередной мод клиента GreyLink, чтобы не было не было подобных вопросов про баги и тд.

Invisible, по поводу багов следует обращаться к разработчикам GreyLink.
Invisible
1.3.2011, 18:22 От: Small DC HubList (Хаблист)
От темы с ID: 4709
EvilNico (91.206.126.125) == Mellon (91.206.126.125)

Отсюда и весь холивар.

Видимо сюда пришёл спамить.

Почитав на dchublist.ru, становится понятно, что всё наоборот, и это на http://dc.nicosoft.ru/ левотня стыренная big_smile.gif
Артём
27.2.2011, 11:01 ChatRanks
топ сообщений в чате
Поправил и перезалил скрипт
Otshelnik-Fm
25.2.2011, 17:05 Antisearch
API 2
Подправил некоторые баги с временем, плюс добавил глобальные функции в локальные таблицы (оптимизация).

Заменил хранимую функцию as_get_random_tth запросом. Сделал для того, чтобы, не имея доступ к хранимым функциям, можно было делать select запросы в бд (ограничения, позволяющие только получать данные из бд, но не добавлять/обновлять/удалять).

Для оптимизации ввёл кеширование (актуально при завале хаба результатами поиска).
Saymon21, ramzes
24.2.2011, 22:30 Antisearch
API 2
Название скрипта: Antisearch
Версия скрипта: 1.4
Версия API: 2
Автор: Setuper
Требования: Для работы скрипта требуется библиотека MySQL
Описание: Скрипт антипоиска. Скрипт хранит в mysql базе TTH запрещённых файлов.
Скрипт автоматически ищет у пользователей запрещённые TTH и даёт наказания за них.
Наказания могут быть следующих типов:

0 - без действий;
1 - дроп;
2 - кик;
3 - временный бан ника;
4 - временный бан IP;
5 - временный бан ника и IP;
6 - постоянной бан ника;
7 - постоянной бан IP;
8 - постоянной бан ника и IP.

Скрипт имеет меню в поиске и в файл-листах, то есть вводим и ищем в поиске то, что нужно запретить, и через меню одним щелчком добавляем TTH найденного в базу с одновременным наказание пользователя, у которого это нашли. Возможно даже выделить сразу несколько найденных файлов и одним щелчком добавить в бд big_smile.gif

Для того чтобы добавлять TTH в базу нужно чтобы было создано хотя бы одно наказание.
В настройках iDefaultPenaltyId - это id наказания по умолчанию (для менюшки "Быстрое добавление TTH", то есть для добавления в базу TTH с наказанием по умолчанию).


Прежде чем запускать скрипт нужно предварительно настроить базу данных на работу со скриптом:
1) Прописать в скрипте настройки коннекта к базе данных.
2) Создать базу
3) Выполнить запросы, которые находятся в файле Antisearch.sql

Также необходимо в настройках PtokaX указать какой-нибудь не нулевой UDP порт.


Особенностью скрипта является возможность гибкой настройки в mysql прав для юзера, который прописывается в настройках скрипта.
Пользователю mysql, который будет прописан в настройках скрипта достаточно будет дать права: SELECT и EXECUTE. Таким образом мы сохраним целостность базы данных. Делалось это с тем рассчётом, что с одной базой могут работать сразу несколько хабов, и для того чтобы админы хабов не могли ничего менять в базе, но при этом им был доступен полный функционал данного скрипта. Если кому-то не понятно сказанное, то разъясняю: право SELECT даёт право на выполнение запросов на получение данных из бд (select запросов), право EXECUTE даёт возможность на вызов хранимых функций. Все действия по вставке, обновлению и удалению какой-либо информации из бд в скрипте происходят исключительно при помощи хранимых функций.

Из менюшек думаю будут понятны прочие детали скрипта)))
Настраиваем правильно, юзаем и боремся с порнографией big_smile.gif


[attachment=5651:Antisearch.rar]
Nickolya, KauH™, Invisible, Артём, PomanoB, KT315, Kingston, MaxFox, Saymon21, DEN 007, ramzes, GULAM33
22.2.2011, 20:25 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
На lua.ru плохо написано.


"r" - открыть файл для чтения. Файл должен существовать.
"w" - создать пустой файл для записи. Если файл с таким именем уже существует, то его содержание будет удалено, а файл будет рассматриваться как новый пустой файл.
"a" - добавить в файл. Дописывает данные в конец файла. Файл создается, если он не существует.
"r+" - открыть файл как для чтения, так и для записи. Файл должен существовать.
"w+" - создать пустой файл для чтения и записи. Если файл с таким именем уже существует, то его содержание будет удалено, а файл будет рассматриваться как новый пустой файл.
"a+" - открыть файл для чтения и добавления. Все операции записи выполняются в конец файла. Файл создается, если он не существует.

Кроме этого, для работы с бинарными файлами существуют моды: "rb", "wb", "ab", "r+b", "w+b", "a+b", то есть теже самые моды но с буквой b на конце.
Буква b может также находится и в середине: "rb+", "wb+", "ab+".
MIKHAIL
24.1.2011, 18:05 Люди помогите!
помогите с компом
Очень часто так делают вирусы.
Поставь антивирус и проверь им комп
Something_Wild
18.1.2011, 14:46 Surdo_Isolation
Почти универсальный скрипт заглушек с богатым меню и возможностями
В русхабе на такой случай существует функция изменения протокольной команды Core.SetCmd(sData), таким образом, во все скрипты, которые находятся ниже данного, поступит уже изменённая команда big_smile.gif
Nickolya, Invisible
17.1.2011, 10:02 Функции Для Разработчиков
склад полезных функций
Вместо tprint наверное table.print ?
И если функция print стандартная lua функция, то наверное лучше в ней тоже не использовать конкатенацию, а сделать как в Serialize.
То есть, вместо
Код
print(a..b..c..d)
юзать
Код
print(a, b, c, d)
а на вставку табов между аргументами я думаю можно забить, хотя возможно будет кривовато отображаться big_smile.gif
Nickolya, Invisible, Sekretchik
16.1.2011, 23:00 RusHub
Кроссплатформенный консольный DC хаб
rushub v 2.2.14
lua plugin v 1.33


Added: Реализован стектрейс lua-ошибок: _TRACEBACK = debug.traceback.

Fixed: Устранен баг с уборкой мусора от UID.
Fixed: Устранен баг в функции закрытия соединения (poll функционал в select случае).
Fixed: Объединены функции Core.SendToNicks и Core.SendToUser (функция Core.SendToNicks осталась, но считается устаревшей)
Fixed: Усовершенствована функция Core.GetUsers. Разделились возвращаемые пользователи на группы: все и все вошедшие (Core.GetUsers(bAll), Core.GetUsers(sIP, bAll)).
Core.GetUsers() - вернёт только уже полностью вошедшие на хаб пользователей
Core.GetUsers(true) - вернёт всех пользователей
Аналогично и для случая возврата по ip: Core.GetUsers(sIP) и Core.GetUsers(sIP, true)

Fixed: Изменена кодировка в файле scripts.xml с windows-1252 на windows-1251.
Fixed: Подправлен путь до файла lua.hpp (lua/lua.hpp).
Fixed: Файл luaerr.log переменён в папку logs.
Nickolya, Jackson, Otshelnik-Fm, ExC0tiC, KT315, Sekretchik, Saymon21, Dimon21, LEXSOR
15.1.2011, 10:53 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Спасибо. Исправлю этот баг.
Что касается параметров WebID, то можно получать параметры: UID, sIP, sIPConn, iPort, iPortConn, iEnterTime
Nickolya
11.1.2011, 20:21 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
хехе.
Да да, я не клавишей ошибся, я языком ошибся. Написал как в с++ big_smile.gif
Sekretchik
11.1.2011, 15:51 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
У меня всё правильно написано. Если
Код
if #sMsg != 0 then
то отправляй, иначе пиши, что "не отправляю пустые сообщения"
Sekretchik
11.1.2011, 10:24 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Ещё один момент. Чтобы каждый раз не формировать строку с командами, лучше вынести её за предел функции:
Код
local sUserCommand = "$UserCommand 1 1 "..sMenu..UID.sNick.."  •  :::\\::: Сообщения  •  "..sHubName.."  •  :::\\::: Для Администрации :::$<%[mynick]> +opmess %[line:Введите текст сообщения]&#124;|"..
"$UserCommand 1 1 "..sMenu..UID.sNick.."  •  :::\\::: Сообщения  •  "..sHubName.."  •  :::\\::: Для Всех Юзеров :::$<%[mynick]> +massmes %[line:Введите текст сообщения]&#124;|"..
"$UserCommand 1 1 "..sMenu..UID.sNick.."  •  :::\\::: Сообщения  •  "..sHubName.."  •  :::\\::: Для Юзера от Бота :::$<%[mynick]> +frombot %[line:Ник] %[line:Введите текст сообщения]&#124;|"..
"$UserCommand 1 2 "..sMenu..UID.sNick.."  •  :::\\::: Сообщить этому Юзеру :::$<%[mynick]> +frombot %[nick] %[line:Введите текст сообщения]&#124;"

function OnUserEnter(UID)
    if tAccess[UID.iProfile] == 1 then
        Core.SendToUser(UID, sUserCommand)
    end
end


А функция OnChat опять написана плохо. Зачем опять второе регулярное выражение?
Код
local fbm = sData:match"^%b<>%s+%p%S+%s+(.+)"

Да и первое регулярное выражение немного по-другому должны быть написано:

Код
function OnChat(UID, sData)
  local sCmd, sArg = sData:match"^%b<> [%+!/](%S+)%s*(.*)$"
  if sCmd then
    if sCmd == "massmes" then
      if tAccess[UID.iProfile] == 1 then
        if #sArg == 0 then
          Core.SendToUser(UID, " *** Извините, пустые сообщения не отправляю. Попробуйте ещё раз.", sBot)
        else
          Core.SendToProfile({0, 1, 2, 3, -1}, "\r\n\r\n\t *** СООБЩЕНИЕ ДЛЯ ВСЕХ ***\r\n\r\n\t •  "..sArg.."  •\r\n", sBot, sBot)
          Core.SendToUser(UID, " *** Ваше сообщение  •  ДЛЯ ВСЕХ  •  успешно отправлено.", sBot)
        end
      else
        Core.SendToUser(UID, " *** У вас недостаточно прав для выполнения этой команды!", sBot)
      end
      return true
    elseif sCmd == "opmess" then
      if tAccess[UID.iProfile] == 1 then
        if #sArg == 0 then
          Core.SendToUser(UID, " *** Извините, пустые сообщения не отправляю. Попробуйте ещё раз.", sBot)
        else
          Core.SendToProfile({0,1}, "\r\n\r\n\t *** СООБЩЕНИЕ ДЛЯ АДМИНИСТРАЦИИ ***\r\n\r\n\t •  "..sArg.."  •\r\n", sBot, sBot)
          Core.SendToUser(UID, " *** Ваше сообщение  •  ДЛЯ АДМИНИСТРАЦИИ  •  успешно отправлено.", sBot)
        end
      else
        Core.SendToUser(UID, " *** У вас недостаточно прав для выполнения этой команды!", sBot)
      end
      return true
    elseif sCmd == "frombot" then
      if tAccess[UID.iProfile] == 1 then
        local sNick, sMsg = sArg:match"^(%S+)%s*(.*)"
        if sNick then
          if #sMsg ~= 0 then
            local tUser = Core.GetUser(sNick)
            if tUser then
              Core.SendToUser(tUser, "\r\n\r\n\t *** ВАМ ПЕРСОНАЛЬНОЕ СООБЩЕНИЕ ***\r\n\r\n\t •  "..sMsg.."  •\r\n", sBot, sBot)
              Core.SendToUser(UID,
                " *** Ваше сообщение для  •  "..sNick.."  •  от имени  •  "..sBot.."  •  успешно отправлено.", sBot
              )
            else
              Core.SendToUser(UID, " *** Ошибка: Юзер  •  "..sNick.."  •  на хабе не найден!", sBot)
            end
          else
            Core.SendToUser(UID, " *** Извините, пустые сообщения не отправляю. Попробуйте ещё раз.", sBot)
          end
        else
          Core.SendToUser(UID, " *** Не введён ник. Попробуйте ещё раз.", sBot)
        end
      else
        Core.SendToUser(UID, " *** У вас недостаточно прав для выполнения этой команды!", sBot)
      end
      return true
    end
  end
end
Sekretchik, Saymon21
10.1.2011, 18:38 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Код
local sBot = Config.sHubBot
local sNick = "ник"
Core.SendToUser(sNick, "Привет", sBot)
Sekretchik, мамин_парень
9.1.2011, 18:11 Несколько Слов О Захватах И Регулярных Выражениях
исключительно для разработчиков
Дело в том, что в регулярке lua, в отличие от перловской регулярки, нету знака "или", который обозначается в перле пайпом - "|".

Что касается указанного примера:
Код
"лож[е]?[ч]?ка"
то тут можно обойтись и без символьных классов:
Код
"ложе?ч?ка"
Ksan, Serx
9.1.2011, 17:57 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Лучше не вызывать функцию Core.SendToUser несколько раз, а сформировать строку полностью (разделяя команды знаком | ) и вызвать её 1 раз.
Код
function OnUserEnter(UID)
    if tAccess[UID.iProfile] == 1 then
        Core.SendToUser(UID, "$UserCommand 1 1 "..sMenu..UID.sNick.."  •  :::\\::: Сообщения  •  "..sHubName.."  •  :::\\::: Для Администрации :::$<%[mynick]> "..sPreff.."opmess %[line:Введите текст сообщения]&#124;|"..
        "$UserCommand 1 1 "..sMenu..UID.sNick.."  •  :::\\::: Сообщения  •  "..sHubName.."  •  :::\\::: Для Всех Юзеров :::$<%[mynick]> "..sPreff.."massmes %[line:Введите текст сообщения]&#124;")
        --Core.SendToUser(UID,"$UserCommand 1 2 "..sMenu..UID.sNick.."  •  :::\\::: Сообщение от имени бота :::$<%[mynick]> "..sPreff.."frombot %[nick] %[line:Введите текст сообщения]&#124;")
    end
end



Смысл конструкции ("%s"):format(sMsg) не понятен.
А вот это:
Код
    local _,_, sCmd = sData:find"^%b<>%s+%p(%S+)" -- ищем команду
    local _,_, sMsg = sData:find"%b<>%s+%S+%s+(.+)"
можно объединить в одну конструкцию.
Возвращаемым значением return true лучше тоже не загромождать код, а написать его в конце логического выражения.
В итоге получаем:

Код
function OnChat(UID, sData) -- сообщение в чат
    local sCmd, sMsg = sData:match"^%b<>%s+%p(%S+)%s*(.*)" -- ищем команду
    if sCmd then
        if sCmd == "massmes" then
            if tAccess[UID.iProfile] == 1 then
                if #sMsg == 0 then
                    Core.SendToUser(UID, "*** Извините, пустые сообщения не отправляю. Попробуйте ещё раз.", sBot)
                else
                    Core.SendToProfile({0, 1, 2, 3, -1}, "\r\n\r\n\t *** СООБЩЕНИЕ ДЛЯ ВСЕХ ***\r\n\r\n\t •  "..sMsg.."  •\r\n", sBot, sBot)
                    Core.SendToUser(UID, "*** Ваше сообщение  •  ДЛЯ ВСЕХ  •  успешно отправлено.", sBot)
                end
            else
                Core.SendToUser(UID, " *** У вас недостаточно прав для выполнения этой команды!", sBot)
            end
            return true
        elseif sCmd == "opmess" then
            if tAccess[UID.iProfile] == 1 then
                if #sMsg == 0 then
                    Core.SendToUser(UID, "*** Извините, пустые сообщения не отправляю. Попробуйте ещё раз.", sBot)
                else
                    Core.SendToProfile({0,1}, "\r\n\r\n\t *** СООБЩЕНИЕ ДЛЯ АДМИНИСТРАЦИИ ***\r\n\r\n\t •  "..sMsg.."  •\r\n", sBot, sBot)
                    Core.SendToUser(UID, "*** Ваше сообщение  •  ДЛЯ АДМИНИСТРАЦИИ  •  успешно отправлено.", sBot)
                end
            else
                Core.SendToUser(UID, "*** У вас недостаточно прав для выполнения этой команды!", sBot)
            end
            return true
        end
    end
end
Sekretchik, Saymon21
9.1.2011, 13:58 Несколько Слов О Захватах И Регулярных Выражениях
исключительно для разработчиков
Квадратные скобки обозначают так называемые символьные класса. Это означает, что на данном месте может стоять любой из символом, который указан в символьном классе.
В символьном классе возможно задать диапазоны символов: [А-Яа-я]. Так выглядит диапазон всех русских букв за исключением Ё и ё.
Что касается плюсика, то к символьному классу можно его применять.

Код
local s="baaabbbababbbaaaaab bababbbababbabbabbab"
print(s:match"([ab]+)") -- Результат: baaabbbababbbaaaaab
Nickolya, Serx
7.1.2011, 12:21 Несколько Слов О Захватах И Регулярных Выражениях
исключительно для разработчиков
Код
local sDescription, sTag = sDesc:match'^(.*)(<.*>)$'
if not sDescription then
  sDescription = sDesc
  sTag = ''
end
Sekretchik
7.1.2011, 1:48 Несколько Слов О Захватах И Регулярных Выражениях
исключительно для разработчиков
Не знаю зачем парсить это руками, когда обычно хаб парсит это дело, однако вот решение:

Код
local sNick, sDesc, sSpeed, sEmail, iShare = tUser.sMyINFO:match"%$MyINFO %$ALL (%S+)%s+(.-)%$ %$(.-)%$(.-)%$(%d+)%$"
Sekretchik
6.1.2011, 23:14 AntiPornoSearch
Блокирует поиск по прописанным в скрипте словам
Вместо функции SearchArrival нужно написать функцию OnSearch вот так:
Код
function OnSearch(tUser, sData)
  if tProfiles[tUser.iProfile] ~= 1 then
    local seach = sData:match"$Search .-%s%u%p%u%p%d%p%d+%p(%S+)"
    if seach and (tExceptions[String2Lower(seach)] == 1) then
      return true
    end    
  end    
end
Nickolya, Otshelnik-Fm, ramzes
6.1.2011, 15:32 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Всё правильно. Вот в чём загвоздка...
При поиске ты указал ник бота, следовательно результаты поиска будут приходить на ник бота, а хаб пытается найти по нику пользователя, а бот не является пользователем.
Nickolya
6.1.2011, 13:25 Вопросы по RusHub
Технические вопросы
Если хаб онлайн, а хаб лист показывает его как оффлайн, то это проблемы в хаблисте а не в хабе
по поводу отключения проверок смотри двумя постами выше

Список всех настроек написан тут: http://mydc.ru/topic2378.html
Список всех настроек можно также получить скриптом:
Код
for _, v in ipairs(Config.table()) do
  Core.SendToAll(v.." = "..Config[v])
end
Invisible, Sekretchik
6.1.2011, 12:18 ChatHistorySQL
История чата (MySQL)
функция lua_getfield будет в луа плагине только при статической линковке либы lua.a с луа плагином при сборке, а я так полагаю, что у вас lua линкуется как shared lib, поэтому не может идти речи о том чтобы луа плагин содержал функцию lua_getfield.

Поэтому нужно либо собирать луа плагин со статической линковкой lua, либо пересобирать либу mysql.so, подстраивая её под shared lib
Nickolya
2.1.2011, 19:16 С Новым Годом!
см название темы
С новым годом!!! feel_good.gif
Nickolya, Sekretchik
2.1.2011, 19:11 От: luasocket
От темы с ID: 2951
Эм... это наверное мои тестовые записи написаны.
Пардон

Перезалил
Nickolya, Invisible, Saymon21
2.1.2011, 18:53 Вопросы по RusHub
Технические вопросы
Настройки (1 - проверять, 0 - не проверять):
bCheckSRNick - проверять ник в $SR команде
bCheckRctmNick - проверять ли ник в RCTM команде
bCheckCTMIp - проверять ip в CTM команде
bCheckSearchIp - проверять ip при активном поиске
Nickolya, Infinity_Love
31.12.2010, 13:42 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
В общем буду разбираться
Saymon21
31.12.2010, 13:15 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Вот из-за чего падает хаб: http://www.lua.ru/doc/2.10.html

Цитата
Сборщик мусора обрабатывает все объекты Lua: таблицы, данные типа userdata, функции, потоки и строки.


Lua пытается сборщиком мусора удалить объект userdata. Подозреваю, что происходит это при использовании скрипта банов (функции GetGVal / SetGVal).

В новом году буду разбираться как это обойти
Nickolya, Saymon21
29.12.2010, 18:03 Ошибки текущей версии хаба
Обнаруженные ошибки публикуются в этой теме
Повторяю, что баг в луа, а не в хабе. Хаб падает потому, что луа интерпретатор работает из-под процесса хаба.
Баг возникает при попытке убрать мусор при закрытии луа состояния (остановка скрипта).

Возможное решение - это переход на lua 5.2
Nickolya

23 страниц V  < 1 2 3 4 5 > » 
RSS Сейчас: 19.4.2024, 5:57