PtokaX 0.5.0.1 Mod, Модификация PtokaX от alex82 |
Здравствуйте, гость ( Вход | Регистрация )
PtokaX 0.5.0.1 Mod, Модификация PtokaX от alex82 |
4.3.2013, 17:39
Сообщение
#1
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Поскольку исходники PtokaX нынче доступны в полном объеме (включая проекты Visual Studio), у многих анонимусов руки так и чешутся запилить форк сего замечательного хабсофта. Я оказался в их числе PtokaX 0.5.0.1 Mod Версия: 0.5.0.1 Модификация: mod 11 Операционная система: Windows, Linux Описание: Решил выложить на всеобщее обозрение свою модификацию PtokaX под кодовым названием PtokaX Mod. Список изменений относительно оригинальной версии выглядит так: mod 11 Добавлено: Расширение протокола CTM2HUB. Добавлено: Задержка перед отправкой $Lock (которая якобы помогает при DDoS-атаках). mod 10 Исправлено: Неверные названия некоторых стран, возвращаемые функцией IP2Country.GetCountryName. Добавлено: Возможность получения названия страны по коду с помощью функции IP2Country.GetCountryName. Исправлено: Предупреждения при компиляции версии, хранящей пароли в зашифрованном виде. Исправлено: Компиляция библиотеки SHA-2 под новыми версиями gcc. mod 9 Исправлено: Профиль юзера устанавливался до успешной проверки пароля, что представляло собой потенциальную уязвимость (перенесено из тестовой версии). Исправлено: Неполный IP-адрес отображался как некорректный в тех случаях, когда юзер, использующий IPv6, отправлял адрес IPv4 в команде (перенесено из тестовой версии несмотря на то, что суть бага мне не совсем ясна). Исправлено: Права доступа для файлов и папок в *nix (перенесено из тестовой версии). Исправлено: Возможные падения GUI-версии хаба при закрытии окон (перенесено из тестовой версии). Исправлено: Неверные размеры массивов в коде редактора скриптов (перенесено из тестовой версии). Исправлено: Невозможность использования в командах адресов IPv6, чья длина превышает 15 символов (перенесено из тестовой версии). Исправлено: Ошибки в командах !rangeban и !rangeunban. Добавлено: Автозапуск скрипта locale.lua. mod 8 Изменено: Отныне юзеры с одинаковыми профилями не смогут банить друг друга. Данное изменение не относится к юзерам с профилем 0 (Master): эти засранцы по-прежнему могут банить кого угодно. Добавлено: Ограничение продолжительности временных банов. В GUI данная опция находится на вкладке "Настройки банов". ID для SetMan.(G/S)etNumber - 114. Добавлено: Опция, позволяющая менять интервал между служебными циклами. Уменьшение интервала снижает скорость отклика хаба на действия юзеров, однако это также приводит к некоторому повышению нагрузки на процессор. В GUI данная опция находится на вкладке "Больше настроек". ID для SetMan.(G/S)etNumber - 115. Исправлено: Ошибка в linux-версии хаба, приводившая к некорректной работе таймеров с интервалом, не кратным одной секунде. Исправлено: Окончательное решение вопроса локалей. Теперь локаль устанавливается изнутри Ptokax. В связи с этим былы добавлены 2 параметра настроек. ID для SetMan.(G/S)etString - 37 (Windows) и 38 (NIX). В GUI доступна только локаль Windows. Поскольку в Windows локаль устанавливается только для текущего модуля (т.е. выполняем setlocale() в PtokaX.exe - локаль меняется только для PtokaX.exe, выполняем setlocale() в lua.dll - локаль меняется только для lua.dll), необходимость в скрипте locale.lua никуда не делась. Добавлено: Установка автозапуска хаба при выполнении make install. Добавлено: Цели uninstall, on и off в makefile. Цели make on и make off позволяют включить и отключить автозагрузку хаба соответственно. Цель make uninstall используется для удаления файлов хаба (при этом удаляются только исполняемые файлы и ссылки автозапуска, рабочую директорию необходимо удалить вручную). mod 7 Исправлено: Проверка прав доступа при создании банов с помощью команды $Kick. mod 6 Добавлено: Команда !reloadcountry, позволяющая перезагрузить базы IP-To-Country. Команда доступна юзерам с профилем 0. Добавлено: Функция Core.BotMyINFO(sBotNick, sBotMyINFO), позволяющая изменить $MyINFO бота, зарегистрированного из скрипта. Полная проверка синтаксиса $MyINFO не производится. Исправлено: Максимальное значение параметра "Ограничение входа юзеров" в GUI. Удалено: Бессмысленная опция "Отключать клиенты, отправляющие $Supports с ошибками". При ближайшем рассмотрении выяснилось, что "ошибками" считается лишний пробел в конце команды. Код, отвечающий за определение этой "ошибки" сохранен, поскольку он влияет на обработку магического байта, и в этом, возможно, есть некий смысл. Добавлено: Опция, позволяющая отключить обработку магического байта. При включении заработает отображение пола в GreylinkDC, но могут появиться ошибки коммуникации между разными клиентами, поскольку при использование старшей половины байта каждый разработчик DC-клиента извращался как мог. Исправлено: Функция os.clock под Linux. Теперь она работает так же, как под Windows - возвращает время с момента запуска хаба с точностью до миллисекунды. По умолчанию данный костыль включен, отключается в stdinc.h. Изменено: При корректной остановке хаба всем юзерам рассылается сообщение о перезапуске. Раньше это сообщение отправлялось лишь при выполнении команды !restart. Изменено: Время последнего входа зарегистрированного юзера обновляется не только при его входе на хаб, но и при выходе. Добавлено: Переменная iOnlineTime, отображающее время, проведенное зарегистрированным юзером на хабе (в секундах). Переменная обновляется при выходе юзера, а также при вызове RegMan.UpdateTimes() (см. ниже). Добавлено: Функция RegMan.UpdateTimes(), обновляющая значения iLastEnter и iOnlineTime в профилях зарегистрированных юзеров, находящихся на хабе. iOnlineTime вычисляется с учетом текущего времени и значения iLastEnter, а iLastEnter устанавливается равным текущему времени. Добавлено: Функция RegMan.SetTimes(sNick, iRegDate, iLastEnter, iOnlineTime), позволяющая вручную установить время регистрации, время последнего входа и время онлайн для указанного зарегистрированного юзера. Перенесены некоторые изменения из PtokaX 0.5.0.2 mod 5 Исправлено: Падение хаба при загрузке банов. (перенесено из тестовой версии) Исправлено: Корректное завершение работы при помощи os.exit(). (перенесено из тестовой версии) Добавлено: В makefile добавлена рекурсия для компиляции tinyxml. Теперь его не нужно собирать отдельно перед сборкой PtokaX (перенесено из тестовой версии) Исправлено: Ошибка в скрипте init.d Исправлено: Ошибки в русском языковом файле. Его можно пилить вечно, и все равно будет кривой :( mod 4 Исправлено: Ошибки в функции Core.HideUserKey Исправлено: Несколько ошибок в настройках прав доступа для незарегистрированных. Испорчено: Опция "Не проверять IP в командах DC" в профиле незарегистрированного юзера. Теперь она игнорируется, и, как следствие, IP всегда проверяется. Это не баг, это фича. Добавлено: Костыль, исправляющий регистрочувствительность кириллических ников в некоторых версиях Linux. По умолчанию отключен, включается в stdinc.h Исправлено: Команда restart скрипта init.d mod 3 Добавлено: Обработка ошибок при загрузке XML-файлов. Если в одном из файлов есть синтаксическая ошибка, программа сообщает об этом и аварийно завершает работу вместо того, чтобы втихую загрузить значения по умолчанию. Исправлено: Кодировка, указанная в заголовках XML-файлов. Исправлено: Если хаб не смог запуститься (например, по причине занятости всех указанных портов), настройки будут сохранены, что даст возможность исправить их. Добавлено: Функция Core.HideUserKey(tUser, bHide), позволяющая скрыть ключ юзера. Исправлено: Добавление/удаление ключей при изменении зарегистрированных юзеров. Исправлено: Несколько ошибок в настройках прав доступа для незарегистрированных. Добавлено: Функция Core.IsolateUser(tUser, bState), позволяющая изолировать юзера от главного чата. Изолированный юзер не видит сообщений других юзеров, а они, соответственно, не видят сообщения изолированного юзера. Добавлено: Функция Core.SendToNonisolated(sData), отправляющая данные всем неизолированным юзерам (см. предыдущий пункт). Используется аналогично Core.SendToAll(sData). Исправлено: В сборке x64 отключено использование больших адресов. Теперь хаб не падает при запуске скриптов. Как результат - в сборке нельзя использовать библиотеки, предназначенные для оригинальной PtokaX 0.5.0.1. Исправлено: Компиляция под Debian и Ubuntu различных архитектур. Надеюсь, в этот раз исправил правильно. Исправлено: В скрипте для init.d исключена возможность повторного запуска демона, а также исправлена передача ему переменных окружения. mod 2 Изменено: В сборках x86 отключено использование инструкций SSE для совместимости с некоторыми не очень свежими процессорами от AMD. Исправлено: Установка размеров окон при различных размерах системных шрифтов. Исправлено: Компиляция под Debian. Исправлено: Небольшая ошибка в makefile при выполнении цели install. Исправлено: Скрипт locale.lua Исправлено: Пропущенные функции и параметры в scripting-interface.txt mod Исправлено: При нажатии кнопки "Принять" настройки не сохранялись в файл (подозреваю, что кое-кто считает это фичей, а не багом). Изменено: К черту бинарный бред. Список зарегистрированных юзеров снова хранится в файле XML. Изменено: Для 32-разрядной версии метод вызова функций изменен на cdecl, что позволило испльзовать библиотеки, предназначенные для Lua-AIO и RusHub. Изменено: Положение и размеры кнопок на вкладке "Статистика". Изменено: Отключено открытие скрипта по двойному клику в списке. Глубокого смысла в этом нет, просто мне так удобнее . Исправлено: Доведен до ума файл русской локализации. Добавлено: В профиль зарегистрированного юзера добавлены дата регистрации, дата последнего входа и один текстовый параметр для хранения произвольных данных. В связи с этим в таблицу зарегистрированного юзера были добавлены поля iRegDate, iLastEnter и sCustom. Для установки поля sCustom используется функция RegMan.SetCustom(sNick, sString). Поле sCustom может отсутствовать. Изменено: При сохранении настроек в файл записываются все параметры, а не только те, значения которых отличаются от значений по умолчанию. Добавлено: Проверка прав доступа для команды !stats. Добавлено: Блокировка неизвестных команд. Отключается на вкладке "Дополнительно". Добавлено: Возможность отключения приветствия (Этот хаб работает под управлением...). Включается на вкладке "Дополнительно" Имя параметра в настройках - ShowWelcome, ID для SetMan.(S/G)etBool - 57. Изменено: Отключение проверки ключа вынесено в настройки. В связи с этим был удален ключ командной строки /nokeycheck. Добавлено: Возможность отключения сжатия zlib. Отключается на вкладке "Больше настроек". Изменено: Профиль по умолчанию для юзеров, регистрируемых с помощью GUI. Добавлено: Функция print. В GUI-версии функция выводит текст в окно ошибок скриптов, в консольной - в главный чат юзерам с профилем Master. Исправлено: Самодеятельность TinyXML, касающаяся обработки пустых символов. Несколько пустых символов подряд заменялись одним пробелом. По непонятной причине неразрывный пробел также считался пустым символом. Исправлено: При запуске принудительно устанавливается локаль "C" для чисел. Это поможет избежать проблем с сохранением дробных чисел если сервер, на котором работает хаб, настраивали жопой. Добавлено: Версия PtokaX, хранящая пароли в зашифрованном (SHA-256) виде. Изменено: Настройки по умолчанию. Строковые параметры переведены на русский. Изменено: Список стран IP-To-Country: Добавлены коды стран, названия стран переведены на русский. Добавлено: Сообщения об ошибках скриптов отправляются операторам. Добавлено: Возможность отключения отображения трассировки стека Lua в ошибках скриптов. Добавлено: Параметр bZPipe, отображающий поддержку юзером сжатия. Код для Core.GetUserData - 64 Исправлено: Устранено мелькание окна консоли при вызове функций os.execute и io.popen. Добавлено: Настройка прав доступа для незарегистрированных юзеров. Добавлено: Альтернативный синтаксис для функции регистрации бота: Core.RegBot(sNick, sMyINFOString, bHaveKey). Полная проверка синтаксиса $MyINFO не производится. Добавлено: Функция Core.HideUser(tUser, bHide), позволяющая скрыть юзера из списка. Добавлено: Функции Core.GetDCStats, Core.GetNetStats. Добавлено: События BadPassArrival и ValidateDenideArrival. Исправлено: При загрузке настроек из файла строковые настройки заменялись настройками по умолчанию в тех случаях, когда длина сохраненной строки равна нулю, а длина строки по умолчанию больше нуля. По этой причине в предыдущих версиях мода было невозможно переключить язык на английский, а в оригинальной версии - удалить адрес перенаравления. Исправлено: Изменение паролей зарегистрированных юзеров. Исправлено: Если длинные MyINFO отправляются только разрешенным профилям, а профиль юзера позволяет ему получать полные MyINFO, то боты, зарегистрированные скриптами, становились видны ему только после переподключения к хабу. Добавлено: Функция Core.UserNoQuit(tUser, bState), позволяющая подавить команду $Quit при выходе юзера. Кому-то функция может показаться бессмысленной, однако я знаю наверняка, для чего я ее добавил. Возможно, и вы когда-нибудь узнаете . 0.5.0.1_mod11_x86.rar ( 7.36 мегабайт ) Кол-во скачиваний: 65 0.5.0.1_mod11_x64.rar ( 6.3 мегабайт ) Кол-во скачиваний: 71 0.5.0.1_mod11_src.zip ( 1.05 мегабайт ) Кол-во скачиваний: 66 Старые версии
0.5.0.1_mod10_x86.rar ( 7.38 мегабайт )
Кол-во скачиваний: 2 0.5.0.1_mod10_x64.rar ( 6.3 мегабайт ) Кол-во скачиваний: 2 0.5.0.1_mod10_src.zip ( 1.05 мегабайт ) Кол-во скачиваний: 4 0.5.0.1_mod10_hashpass.rar ( 3.85 мегабайт ) Кол-во скачиваний: 2 Остальные версии можно найти в моей шаре на хабе MyDC Как правильно обновляться... ...с оригинальной версии на mod: Первым делом конвертируем базу из бинарного формата в xml. Делать это нужно на оригинальной версии, поскольку скрипт использует для конвертирования API хаба. Затем останавливаем хаб, открываем файл cfg/Profiles.xml, и добавляем профиль для незарегистрированных юзеров: Длиннокод Код <Profile> <Name>Unreg</Name> <Permissions>00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 0000000000000000000</Permissions> </Profile> Если Вы обновляетесь с версии 0.4.x.x, работавшей под Windows, у Вас может возникнуть еще одна проблема: в списке зарегистрированных юзеров обнаружится большое число юзеров с одним и тем же ником, но в разных регистрах. При удалении каждого повторяющегося юзера, GUI-версия PtokaX будет выдавать сообщение. Если Вам лень клацать кнопку "OK" 10500 раз, можете убить птоку диспетчером задач, и использовать для первого запуска консольную версию - она удалит дублирующихся юзеров тихо, а сообщения об удалении сохранит в файл system.log ...с PtokaX 0.5.0.0 mod3 на PtokaX 0.5.0.1 mod: Останавливаем хаб, добавляем в настройки профиль незарегистрированных юзеров (см. предыдущий пункт), запускаем хаб. Всё ...с mod на оригинальную версию: Останавливаем хаб, удаляем из конфига профиль незарегистрированных юзеров. После этого можно обновлять бинарники и запускать хаб - PtokaX сама сконвертирует базу регистраций в бинарный формат, а также удалит все ненужные (и даже некоторые нужные ) настройки. ...с обычной версии на версию, хеширующую пароли: Просто заменяем бинарники, и запускаем хаб. При запуске все пароли будут хешированы автоматически. ...с версии, хеширующей пароли, на обычную версию: Останавливаем хаб, заменяем бинарники, удаляем базу регистраций, запускаем хаб, и просим всех юзеров зарегистрироваться по-новой. Ну да, а Вы что думали? Расшифровать хешированные пароли невозможно. Именно по этой причине включение хеширования паролей производится таким извращенным способом. Версия, хранящая пароли в зашифрованном виде: 0.5.0.1_mod11_hashpass.rar ( 3.84 мегабайт ) Кол-во скачиваний: 12 Как это работает Пароли хранятся в виде Код |<Хэш пароля в hexadecimal-формате> Символ | в начале пароля нужен для того, чтобы PtokaX могла отличить шифрованные пароли от нешифрованных. Если при загрузке базы какие-либо пароли не соответствуют данному формату, они автоматически хешируются. Это позволяет не париться при переходе на шифрованную базу и при добавлении аккаунтов прямо в XML-файл.Следует помнить, что хешированные пароли расшифровать нельзя. Т.е вы не сможете сконвертировать базу обратно. Никак не сможете. СОВСЕМ никак. Также следует помнить, что зарегистрированных юзеров теперь нельзя редактировать с помощью PXControl, PRA, и им подобных. И да, если Ваш скрипт регистрации запрашивает старый пароль при его изменении, Вам придется прикрутить к нему библиотеку sha2. В архиве только exe'шник, все остальное берем из основного дистрибутива. Скрипт для конвертирования бинарной базы обратно в XML: GetBaseBack.lua ( 1.22 килобайт ) Кол-во скачиваний: 102 Если Вы переходите на данную версию с более новой, хранящей настройки и список скриптов в файлах .pxt, то Вам будет полезен конвертер: settings_back.lua ( 7.42 килобайт ) Кол-во скачиваний: 27 TODO По-человечески исправить отрисовку GUI. Думаю, многие заметили, что внешний вид окна оригинальной птоки сильно портится если по нему провести окном другого приложения. Сильнее всего эффект заметен в Windows 7 на упрощенных темах оформления. Связано это с тем, что PPK не до конца осилил создание GUI с помощью чистого WinAPI. Проблема в том, что я знаю WinAPI еще хуже, поэтому я даже не представляю, как это исправить. Поэтому я поступил следующим образом - убрал свойство WS_CLIPCHILDREN главного окна. После этого глюки с перерисовкой дочерних элементов исчезли, но они стали сильно мигать при изменении размеров окна. Перенести из PtokaX 0.5.0.0 mod 4 (этот мод никогда не выкладывался, поскольку я не закончил его) событие IsRegistered(). Оно используется для хранения аккаунтов во внешних БД, и в вышеназванной модификации вполне себе работало. Но в версии 0.5.0.1 PPK так отрефакторил ту часть кода, что добавить его стало некуда. Возможно, когда-нибудь я таки решусь на переделку. Исправить странные глюки в работе функции SendToNonisolated. Иногда при изменении прав профилей сообщения, отправленные с помощью этой функции начинают получать все юзеры, включая изолированных. Причину пока не выяснил. P.S. Не забывайте сообщать о найденных ошибках Версии, основанные на PtokaX 0.5.0.0 mod 3 Исправлено: При изменении настроек главного бота или ОпЧата из GUI, бот со старым ником оставался в списке юзеров до перезапуска хаба. Изменено: Профиль по умолчанию для юзеров, регистрируемых с помощью GUI. Добавлено: Альтернативный синтаксис для функции регистрации бота: Core.RegBot(sNick, sMyINFOString, bHaveKey). Полная проверка синтаксиса $MyINFO не производится. Добавлено: Возможность отключения сжатия zlib. Отключается на вкладке "Больше настроек". Изменено: Отключение проверки ключа вынесено в настройки. В связи с этим был удален ключ командной строки /nokeycheck. Исправлено: Незначительные исправления в языковом файле. Изменения в библиотеках: Устранено мелькание окна консоли при вызове функций os.execute и io.popen. mod 2 Исправлено: Самодеятельность TinyXML, касающаяся обработки пустых символов. Несколько пустых символов подряд заменялись одним пробелом. По непонятной причине неразрывный пробел также считался пустым символом. Добавлено: Функции Core.GetDCStats, Core.GetNetStats и Core.GetMemStats. Добавлено: Консольная версия PtokaX, хранящая пароли в зашифрованном (SHA-256) виде. Добавлено: Функция print. В GUI-версии функция выводит текст в окно ошибок скриптов, в консольной - в главный чат юзерам с профилем Master. Добавлено: Сообщения об ошибках скриптов отправляются юзерам с профилем Master. Исправлено: Пропущенные строки в языковом файле. Изменения в библиотеках: В библиотеке Lua параметры LUA_PATH_DEFAULT и LUA_CPATH_DEFAULT изменены на более каноничные, что позволит избежать проблем при подключении некоторых библиотек. Из Lua удалены костыли, добавленные для совместимости с библиотеками Lua-AIO. В связи с этим были удалены библиотеки iup, tcps и udps. Заменена библиотека iconv. Добавлены библиотеки sha1 и sha2. mod 1 Изменено: Для 32-разрядной версии метод вызова функций изменен на cdecl, что позволило испльзовать библиотеки, предназначенные для Lua-AIO и RusHub Изменено: Положение и размеры кнопок на вкладке "Статистика" Изменено: Отключено открытие скрипта по двойному клику в списке. Глубокого смысла в этом нет, просто мне так удобнее Исправлено: Доведен до ума файл русской локализации Изменено: Настройки по умолчанию. Строковые параметры переведены на русский Изменено: Список стран IP-To-Country: Добавлены коды стран, названия стран переведены на русский Добавлено: В никах запрещены символы от \0 до \31 Добавлено: Блокировка неизвестных команд. Отключается на вкладке "Дополнительно" Добавлено: Проверка прав доступа для команд !stats и !memstats Добавлено: События BadPassArrival и ValidateDenideArrival Добавлено: Параметр bZPipe, отображающий поддержку юзером сжатия. Код для Core.GetUserData - 64 Изменено: При сохранении настроек в файл записываются все параметры, а не только те, значения которых отличаются от значений по умолчанию Добавлено: Возможность отключения приветствия (Этот хаб работает под управлением...). Включается на вкладке "Дополнительно" Имя параметра в настройках - ShowWelcome, ID для SetMan.(S/G)etBool - 57 Изменено: К черту бинарный бред. Список зарегистрированных юзеров снова хранится в файле XML Исправлено: Ошибка IPToCountry - первый и последний адрес диапазона не считались его частью Исправлено: При нажатии кнопки "Принять" настройки не сохранялись в файл (подозреваю, что кое-кто считает это фичей, а не багом ) ptokax_0.5.0.0_mod3_x86.rar ( 8.69 мегабайт ) Кол-во скачиваний: 284 ptokax_0.5.0.0_mod3_x64.rar ( 4.79 мегабайт ) Кол-во скачиваний: 92 ptokax_0.5.0.0_mod3_src.zip ( 1.06 мегабайт ) Кол-во скачиваний: 52 Консольная версия, хранящая пароли в зашифрованном виде: ptokax_0.5.0.0_mod3_hashpass_sha2.rar ( 1.79 мегабайт ) Кол-во скачиваний: 7 Предыдущая версия, шифрующая пароли алгоритмом MD5: PtokaX_console_hashpass.rar ( 278.28 килобайт ) Кол-во скачиваний: 11 Дополнительную информацию можно найти во втором сообщении данной темы
|
|
|
4.3.2013, 18:03
Сообщение
#2
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Скрипт locale.lua - что это, и зачем оно нужно Скрипт locale.lua используется под Windows для установки локали lua.dll, поскольку сменить локаль библиотеки непосредственно из PtokaX.exe невозможно. Также скрипт выполняет диагностику корректности работы функций сравнения строк и преобразования регистров (как под Windows, так и под *NIX). Расшифровка сообщений, выдаваемых скриптом: Цитата Неверно установлена локаль для следующих категорий: collate (установлена C, должна быть ru_RU.CP1251), ctype (установлена C, должна быть ru_RU.CP1251) Данное сообщение говорит нам о том, что требуемая локаль не установлена в системе. В Ubuntu локаль можно добавить командой:Код locale-gen ru_RU.CP1251 Чтобы добавить локаль в Debian, наберите в консоли dpkg-reconfigure locales, а затем включите нужную локаль при помощи стрелок и клавиши "Пробел"Цитата Неверно установлена локаль для следующих категорий: numeric (установлена <something>, должна быть C) Скорее всего причина в том, что на вашем хабе имеется скрипт, меняющий локаль. Сама по себе смена локали для категории numeric не является ошибкой, однако, если в качестве <something> окажется локаль, предусматривающая в качестве разделителя между целой и дробной частью чисел не точку, а запятую (например, наша, родная Russian_Russia.1251), то в качестве бонуса вы получите некорректную работу скриптов, сохраняющих в файлы дробные числа. Поэтому никогда так не делайте:Код os.setlocale("Russian_Russia.1251") А если все же очень хочется, то после этого непременно устанавливайте правильную локаль для категории numeric:Код os.setlocale("C","numeric") И вообще, не нужно дергать локаль хаба по каждому удобному случаю. Нужно установить ее один раз при запуске, и в дальнейшем не трогать.Цитата Некорректно работает преобразование регистров Вы установили неправильную локаль в настройках хаба. Для корректной работы функций string.upper() и string.lower() нужно установить локаль ru_RU.CP1251 для *NIX, либо Russian_Russia.1251 если хаб работает под Windows.Цитата Некорректно работает функция strcasecmp Несмотря на то, что Вы все сделали правильно, функция strcasecmp, используемая при проверке хабом ников работает неправильно, считая разными одни и те же кириллические ники, написанные в разных регистрах. Данный глюк встречается в некоторых сборках Linux, и причины его возникновения до сих пор не выяснены. Чтобы исправить его, вы можете включить специально предназначенный для этого костыль. Чтобы сделать это, раскомментируйте следующую строку в файле core/stdinc.h:Код //#define FIX_STRCASECMP После этого вам, естественно, потребуется пересобрать PtokaX.Описание некоторых изменений в интерфейсе Lua Переменная bZPipe в таблице юзера Данная переменная отображает поддержку юзером сжатия zlib, и выставляется в том случае, когда юзер отправил в $Supports характеристику ZPipe (или ZPipe0). По этой переменной можно с большой долей вероятности отличать DC-клиенты от спамботов - последние в большинстве своем написаны ленивыми мартышками, и не имеют поддержки сжатия, а все современные клиенты - имеют. Тестовый скрипт: test_zpipe_var.lua ( 365 байт ) Кол-во скачиваний: 12 Ставить без переделки на живые хабы не рекомендуется Core.HideUser(tUser, bHide) Функция позволяет полностью скрыть юзера из списка. Если параметр bHide равен true, юзер будет скрыт, если false, то восстановлен в списке. Функция влияет на счетчики юзеров и общей шары - при скрытии юзера счетчики уменьшаются, а при восстановлении увеличиваются обратно. В таблице юзера имеется переменная bHidden, которая выставляется при скрытии юзера, и сбрасывается при его восстановлении. Код для функции Core.GetUserData - 65. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так: Код pcall(Core.GetUserData, tUser, 65) Если требуется скрыть юзера, входящего на хаб, то делать это следует не позже вызова скриптовой функции ValidateNickArrival. В противном случае хаб успеет отправить MyINFO юзера. Следует помнить, что при отключении скрипта все скрытые юзеры останутся таковыми до переподключения к хабу, поскольку информация о том, что юзер скрыт, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы скрытые юзеры появлялись в списке при остановке скрипта, отвечающего за скрытие, добавьте соответствующий код в функцию OnExit(). Тестовый скрипт: test_hide.lua ( 586 байт ) Кол-во скачиваний: 10 Core.HideUserKey(tUser, bHide) Функция позволяет скрыть ключ юзера. Если параметр bHide равен true, ключ юзера будет скрыт, если false, то восстановлен. В таблице юзера имеется переменная bHiddenKey, которая выставляется при скрытии ключа юзера, и сбрасывается при его восстановлении. Код для функции Core.GetUserData - 67. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так: Код pcall(Core.GetUserData, tUser, 67) Если требуется скрыть ключ юзера, входящего на хаб, то делать это следует не позже вызова скриптовой функции ValidateNickArrival. В противном случае хаб успеет добавить ник юзера в $OpList. Следует помнить, что при отключении скрипта все скрытые ключи юзеров останутся таковыми до переподключения к хабу, поскольку информация о том, что ключ скрыт, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы юзеры со скрытыми ключами появлялись в списке операторов при остановке скрипта, отвечающего за скрытие, добавьте соответствующий код в функцию OnExit(). Тестовый скрипт: test_hide_key.lua ( 595 байт ) Кол-во скачиваний: 14 Core.IsolateUser(tUser, bState) Функция позволяет изолировать юзера от главного чата - изолированный юзер не будет видеть сообщений других юзеров, а они - сообщений изолированного юзера. По сути, функция является виртуальным аналогом сурдокамеры, в которую в реальном мире помещаются люди, страдающие буйной формой шизофрении. Она с одной стороны изолирует больного от внешних раздражителей, способных вызвать очередной приступ буйства головного мозга, а с другой - защищает здоровых людей от внешних проявлений болезни данного пациента. Если параметр bState равен true, юзер будет изолирован, а если false - изоляция будет отключена. В таблице юзера имеется переменная bIsolated, которая выставляется при изоляции юзера, и сбрасывается при восстановлении нормального режима чата. Код для функции Core.GetUserData - 68. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так: Код pcall(Core.GetUserData, tUser, 68) Следует помнить, что при отключении скрипта все изолированные юзеры останутся таковыми до переподключения к хабу, поскольку информация о том, что юзер изолирован, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы при остановке скрипта, отвечающего за скрытие, восстанавливался нормальный режим чата для всех юзеров, добавьте соответствующий код в функцию OnExit(). При использовании данной функции могут возникать конфликты со следующими скриптами Различные обработчики сообщений юзеров - антикапсы, "лечащие" антиматы, и т.д. Если обычный юзер отправил сообщение, которое обработал один из таких скриптов, его увидят все изолированные юзеры. Чтобы этого избежать, необходимо использовать вместо Core.SendToAll(sData) функцию Core.SendToNonisolated(sData). Если хочется сохранить совместимость с оригинальной PtokaX, можно использовать следующую конструкцию: Код Core[Core.SendToNonisolated and "SendToNonisolated" or "SendToAll"](sData) Также следует запретить скриптам обрабатывать сообщения изолированных юзеров - иначе их будут видеть все юзеры. Для этого сначала нужно вызвать Core.GetUserData(tUser, 68), поскольку изначально параметр bIsolated отсутствует в таблице юзера, а затем проверить его значение. Код проверки, совместимый как с оригинальной, так и с модифицированной PtokaX выглядит так: Код pcall(Core.GetUserData, tUser, 68) if not tUser.bIsolated then -- Здесь выполняем проверку и обработку сообщения end Скрипты логов чата. Поскольку при отправке сообщения изолированным юзером событие ChatArrival вызывается как обычно, его сообщения будут попадать в лог чата. Чтобы этого избежать, нужно перед обработкой сообщения проверять, изолирован ли юзер, отправивший его. Как это сделать, показано в предыдущем пункте. Тестовый скрипт: test_isolate.lua ( 531 байт ) Кол-во скачиваний: 18 Core.GetDCStats() и Core.GetNetStats() Функции предназначены для получения из Lua статистики, отображаемой в ответе на команду !stats. GetDCStats() возвращает таблицу со счетчиками команд протокола, а GetNetStats() - таблицу с сетевой статистикой. Список всех ключей этих таблиц можно найти в scripting-interface.txt. Если включить фантазию, можно найти достаточно способов использования этой информации. Можно, к примеру, рисовать графики использования хабом сети. Ну, или отслеживать переполнение канала с помощью iSendRests и iRecvRests, отображающих соответственно размер очереди отправки и очереди получения данных. А если он таки переполнится, предпринять какие-либо действия, способствующие его освобождению - отключить часть юзеров, заблокировать поиск, запретить хабу принимать входящие соединения, и т.д. Тестовый скрипт: test_stats.lua ( 596 байт ) Кол-во скачиваний: 6 BadPassArrival(tUser, sPassword) Вызывается при отправке юзером неправильного пароля. В отличии от других событий Lua, BadPassArrival получает в качестве второго аргумента не всю команду, а лишь пароль, отправленный юзером. Функция может быть использована для отслеживания попыток подбора паролей к аккаунтам операторов. Тестовый скрипт: test_arrivals.lua ( 174 байт ) Кол-во скачиваний: 26 ValidateDenideArrival(tUser, sNick) Вызывается тогда, когда на хаб пытается войти юзер, ник которого уже занят другим юзером. А именно - перед отправкой юзеру команды $ValidateDenide. Юзеры, как правило, сидят на многих хабах, и далеко не всегда они устанавливают для каждого из них отдельный ник. В результате, при слиянии крупных хабов получается очень много "клонов" - юзеров, пытающихся войти на хаб несколько раз под одним ником. При этом хаб, как и полагается, пускает одного из них, а всех остальных посылает подальше. Однако, терять драгоценных юзеров (за которых, между прочим, нынче платят деньги) не есть хорошо. Вместо этого можно отследить их, и пренаправить на другой хаб. Именно для этих целей в свое время и была добавлена данная функция. В отличии от других событий Lua, ValidateDenideArrival получает в качестве второго аргумента не команду целиком, а лишь ник юзера. При этом в таблице юзера ник отсутствует. Тестовый скрипт: test_arrivals.lua ( 174 байт ) Кол-во скачиваний: 26 Готовый скрипт перенаправления клонов: clone_redirect.rar ( 1.15 килобайт ) Кол-во скачиваний: 14 Почему при переходе на Ptokax mod некоторые скрипты начинают флудить в чат Если при переходе с оригинальной PtokaX на PtokaX mod Вы заметили какие-либо посторонние сообщения в чате (пример), которые видны лишь юзерам с профилем 0 (Master), то виновата в этом функция print. Дело в том, что некоторые функции скриптов могли отлаживаться их авторами в консоли Lua. В этом случае для вывода сообщений, как правило, используется функция print. И если по завершении отладки автор забыл удалить вывод отладочных сообщений, получится весьма забавная ситуация: при установке этого скрипта на оригинальную PtokaX, админ не заметит никаких странностей, поскольку в ней функция print отсутствует, а админ хаба под управлением PtokaX mod увидит флуд в главном чате. Решение данной проблемы простое и очевидное: пройтись поиском по всем скриптам, и, если в каких-то из них будут найдены вызовы функции print, закомментировать или удалить их |
|
|
4.3.2013, 18:24
Сообщение
#3
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Цитата К черту бинарный бред. Список зарегистрированных юзеров снова хранится в файле XML Зачем? |
|
|
4.3.2013, 19:19
Сообщение
#4
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
А что там насчет лицензии? Она позволяет делать такие фокусы?
|
|
|
4.3.2013, 19:30
Сообщение
#5
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Зачем? Проще редактировать, при необходимости можно откатиться на старую версию без плясок с бубном.Цитата А что там насчет лицензии? Она позволяет делать такие фокусы? Там же GNU GPL
|
|
|
5.3.2013, 11:46
Сообщение
#6
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
To alex82
Возможно ли добавить в настройках, что бы был выбор между бинарным и XML файлами сохранения/чтения зарегистрированных пользователей? Например: если стоит галочка на "Бинарный формат" - запись/чтение происходит как на оригинальной версии PtokaX 0500, если нет - запись/чтение происходит в формате XML. Многие уже перешли на 0500 и как такового XML файла уже не существует, поэтому есть определённые трудности переноса из бинарного формата в XML списка зарегистрированных. Или может есть какое-либо решение по этой проблеме? |
|
|
5.3.2013, 21:38
Сообщение
#7
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Tsd
Добавил конвертер в первый пост ------------------------------------------------- Выложил версию, хранящую пароли в зашифрованном виде. Подробности в первом посте. |
|
|
5.3.2013, 23:12
Сообщение
#8
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
md5 deprecated imho.
|
|
|
15.3.2013, 18:58
Сообщение
#9
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
выложил mod 2
|
|
|
15.3.2013, 19:10
Сообщение
#10
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Цитата в консольной - в главный чат юзерам с профилем Master. Я думаю логично выводить тут на stdout, если оно не запущено в качестве демона/сервиса. И зы. Может пора на гитхабе или битбаскете репозиторий? |
|
|
15.3.2013, 19:32
Сообщение
#11
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Я думаю логично выводить тут на stdout, если оно не запущено в качестве демона/сервиса. Не думаю. Логичнее всего наблюдать вывод print там, где производится запуск/остановка скриптов. В GUI-версии это удобнее всего делать на вкладке скриптов. Консольная версия не понимает команды в stdin, поэтому единственный способ запуска скриптов - команды в чате.И зы. Может пора на гитхабе или битбаскете репозиторий? Если бы я еще знал, что это такое...-------------------------------------- Кстати, makefile пишлось удалить, поскольку в проект добавились новые файлы, а я не знаю, как правильно добавить их туда. Буду благодарен, если кто-нибудь из линуксоидов поможет исправить ситуацию. |
|
|
15.3.2013, 19:37
Сообщение
#12
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Цитата Консольная версия не понимает команды в stdin, поэтому единственный способ запуска скриптов - команды в чате. Смотря как подпилить же. stdin - это стандартный поток ввода данных. Насколько я думаю, он тут мало нужен. stdout - стандартный поток вывода данных. Например в том-же русхабе print выводит какраз на терминал. Для отсылки ошибки, лучше например реализовать отсылку стек-трейса в чат (Или ещё куда-нить. Хоть на багтреккер). Всё зависит от желания девелопера тут. Тот-же пример в русхабе кстати. Цитата Если бы я еще знал, что это такое... Последний вот сам использую уже не первый месяц.. По большей части конечно приватные репозитории. |
|
|
15.3.2013, 19:52
Сообщение
#13
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Смотря как подпилить же. stdin - это стандартный поток ввода данных. Насколько я думаю, он тут мало нужен. Подпилить print - не проблема. Я тут немножко о другом. Даже если вывод будет в консоль, скрипты-то все равно из консоли не запустишь. Не стоит забывать что print - сугубо отладочная функция.stdout - стандартный поток вывода данных. Например в том-же русхабе print выводит какраз на терминал. Для отсылки ошибки, лучше например реализовать отсылку стек-трейса в чат (Или ещё куда-нить. Хоть на багтреккер). А нафига? Я не раз видел такое в Lua. В том же Lua-AIO это реализовано. А PXControl вообще подробнейший дамп. Только вот не нужно оно. Lua - очень простой язык, и ошибки находятся безо всяких стек-трейсов. ИМХО, достаточно простого сообщения, чтобы ленивая скотина вроде меня (которой лень постоянно лазить в лог) знала о том, что скрипт косячит
|
|
|
16.3.2013, 11:20
Сообщение
#14
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Кстати. Включать хеширование паролей надо хорошо обдумав. Если в дальнейшем будет всётаки переход на ADC, базу сохранить не выйдет. В адц хранение паролей в захешированном виде не возможно.
Цитата Lua - очень простой язык, и ошибки находятся безо всяких стек-трейсов Как минимум будет видно, откуда вызывалась та или инная функция. Порой это тоже надо. И да, Код function OnError(msg) Core.SendToProfile(0,msg, botname) end Уже не подходит? |
|
|
16.3.2013, 16:53
Сообщение
#15
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Перезалил версию, использующую шифрование паролей.
Исходники заменю чуть позже - когда закончу с запиливанием их под линукс. |
|
|
17.3.2013, 8:38
Сообщение
#16
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Перезалил исходники. Изменения:
Исправлены ошибки в linux'овой части кода. Добавлен makefile для PtokaX. Добавлены makefile для библиотек SHA-1 и SHA-2. |
|
|
24.3.2013, 14:22
Сообщение
#17
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Выложил mod 3. Всем, кто использует предыдущие версии x64, настоятельно рекомендуется обновиться.
|
|
|
26.3.2013, 10:58
Сообщение
#18
|
|
Начинающий Группа: Пользователи Сообщений: 10 Регистрация: 25.1.2012 Пользователь №: 10 222 Спасибо сказали: 0 раз |
Что заметил, если консольную версию добавлять в службы с помощью anyserv, хаб запускается, но если выйдешь, потом обратно он не пускал и в логах не чего, а если сделать, как описано тут http://mydc.ru/topic248.html полёт нормальный. Это на win 7. А так юзаю с выходных эту версия mod 2, вроде всё норм. Вот на mod 3 обновлюсь.
|
|
|
26.3.2013, 11:44
Сообщение
#19
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Booth
anyserv - приблуда используемая для тех приложений, которые не поддерживают установку в качестве системной службы. А PtokaX это поддерживает. Мало того, она умеет устанавливать сама себя системной службой. И да, в дистрибутиве есть скрипты, с помощью которых это можно сделать в два клика. Вопрос: зачем использовать левые приблуды для того, что можно сделать встроенными средствами? |
|
|
26.3.2013, 13:07
Сообщение
#20
|
|
Начинающий Группа: Пользователи Сообщений: 10 Регистрация: 25.1.2012 Пользователь №: 10 222 Спасибо сказали: 0 раз |
Вопрос: зачем использовать левые приблуды для того, что можно сделать встроенными средствами? Я не вникал в эту тему до этого, и нагуглил только это по и решил попробовать, вышла не так, как ожидал. Тогда почитал больше и уже разобрался, что можно и консолью и скриптами. |
|
|
Похожие темы
|
Сейчас: 23.12.2024, 0:32 |