Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
5.3.2013, 21:38 |
PtokaX 0.5.0.1 Mod Модификация PtokaX от alex82 |
Tsd Добавил конвертер в первый пост ------------------------------------------------- Выложил версию, хранящую пароли в зашифрованном виде. Подробности в первом посте. |
Tsd, Ksan, Karumo, мамин_парень | ||
4.3.2013, 19:30 |
PtokaX 0.5.0.1 Mod Модификация PtokaX от alex82 |
мамин_парень | |||
4.3.2013, 18:03 |
PtokaX 0.5.0.1 Mod Модификация PtokaX от alex82 |
Скрипт 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-клиенты от спамботов - последние в большинстве своем написаны ленивыми мартышками, и не имеют поддержки сжатия, а все современные клиенты - имеют. Тестовый скрипт: [attachment=6990:test_zpipe_var.lua]Ставить без переделки на живые хабы не рекомендуется Core.HideUser(tUser, bHide) Функция позволяет полностью скрыть юзера из списка. Если параметр bHide равен true, юзер будет скрыт, если false, то восстановлен в списке. Функция влияет на счетчики юзеров и общей шары - при скрытии юзера счетчики уменьшаются, а при восстановлении увеличиваются обратно. В таблице юзера имеется переменная bHidden, которая выставляется при скрытии юзера, и сбрасывается при его восстановлении. Код для функции Core.GetUserData - 65. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так: Код pcall(Core.GetUserData, tUser, 65) Если требуется скрыть юзера, входящего на хаб, то делать это следует не позже вызова скриптовой функции ValidateNickArrival. В противном случае хаб успеет отправить MyINFO юзера. Следует помнить, что при отключении скрипта все скрытые юзеры останутся таковыми до переподключения к хабу, поскольку информация о том, что юзер скрыт, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы скрытые юзеры появлялись в списке при остановке скрипта, отвечающего за скрытие, добавьте соответствующий код в функцию OnExit(). Тестовый скрипт: [attachment=6984:test_hide.lua] Core.HideUserKey(tUser, bHide) Функция позволяет скрыть ключ юзера. Если параметр bHide равен true, ключ юзера будет скрыт, если false, то восстановлен. В таблице юзера имеется переменная bHiddenKey, которая выставляется при скрытии ключа юзера, и сбрасывается при его восстановлении. Код для функции Core.GetUserData - 67. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так: Код pcall(Core.GetUserData, tUser, 67) Если требуется скрыть ключ юзера, входящего на хаб, то делать это следует не позже вызова скриптовой функции ValidateNickArrival. В противном случае хаб успеет добавить ник юзера в $OpList. Следует помнить, что при отключении скрипта все скрытые ключи юзеров останутся таковыми до переподключения к хабу, поскольку информация о том, что ключ скрыт, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы юзеры со скрытыми ключами появлялись в списке операторов при остановке скрипта, отвечающего за скрытие, добавьте соответствующий код в функцию OnExit(). Тестовый скрипт: [attachment=6986:test_hide_key.lua] 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 вызывается как обычно, его сообщения будут попадать в лог чата. Чтобы этого избежать, нужно перед обработкой сообщения проверять, изолирован ли юзер, отправивший его. Как это сделать, показано в предыдущем пункте. Тестовый скрипт: [attachment=6985:test_isolate.lua] Core.GetDCStats() и Core.GetNetStats() Функции предназначены для получения из Lua статистики, отображаемой в ответе на команду !stats. GetDCStats() возвращает таблицу со счетчиками команд протокола, а GetNetStats() - таблицу с сетевой статистикой. Список всех ключей этих таблиц можно найти в scripting-interface.txt. Если включить фантазию, можно найти достаточно способов использования этой информации. Можно, к примеру, рисовать графики использования хабом сети. Ну, или отслеживать переполнение канала с помощью iSendRests и iRecvRests, отображающих соответственно размер очереди отправки и очереди получения данных. А если он таки переполнится, предпринять какие-либо действия, способствующие его освобождению - отключить часть юзеров, заблокировать поиск, запретить хабу принимать входящие соединения, и т.д. Тестовый скрипт: [attachment=6987:test_stats.lua] BadPassArrival(tUser, sPassword) Вызывается при отправке юзером неправильного пароля. В отличии от других событий Lua, BadPassArrival получает в качестве второго аргумента не всю команду, а лишь пароль, отправленный юзером. Функция может быть использована для отслеживания попыток подбора паролей к аккаунтам операторов. Тестовый скрипт: [attachment=6988:test_arrivals.lua] ValidateDenideArrival(tUser, sNick) Вызывается тогда, когда на хаб пытается войти юзер, ник которого уже занят другим юзером. А именно - перед отправкой юзеру команды $ValidateDenide. Юзеры, как правило, сидят на многих хабах, и далеко не всегда они устанавливают для каждого из них отдельный ник. В результате, при слиянии крупных хабов получается очень много "клонов" - юзеров, пытающихся войти на хаб несколько раз под одним ником. При этом хаб, как и полагается, пускает одного из них, а всех остальных посылает подальше. Однако, терять драгоценных юзеров (за которых, между прочим, нынче платят деньги) не есть хорошо. Вместо этого можно отследить их, и пренаправить на другой хаб. Именно для этих целей в свое время и была добавлена данная функция. В отличии от других событий Lua, ValidateDenideArrival получает в качестве второго аргумента не команду целиком, а лишь ник юзера. При этом в таблице юзера ник отсутствует. Тестовый скрипт: [attachment=6988:test_arrivals.lua]Готовый скрипт перенаправления клонов: [attachment=6989:clone_redirect.rar] Почему при переходе на Ptokax mod некоторые скрипты начинают флудить в чат Если при переходе с оригинальной PtokaX на PtokaX mod Вы заметили какие-либо посторонние сообщения в чате (пример), которые видны лишь юзерам с профилем 0 (Master), то виновата в этом функция print. Дело в том, что некоторые функции скриптов могли отлаживаться их авторами в консоли Lua. В этом случае для вывода сообщений, как правило, используется функция print. И если по завершении отладки автор забыл удалить вывод отладочных сообщений, получится весьма забавная ситуация: при установке этого скрипта на оригинальную PtokaX, админ не заметит никаких странностей, поскольку в ней функция print отсутствует, а админ хаба под управлением PtokaX mod увидит флуд в главном чате. Решение данной проблемы простое и очевидное: пройтись поиском по всем скриптам, и, если в каких-то из них будут найдены вызовы функции print, закомментировать или удалить их |
Tsd, Ksan, мамин_парень, CyberGhost404 | ||
4.3.2013, 17:39 |
PtokaX 0.5.0.1 Mod Модификация PtokaX от alex82 |
Поскольку исходники 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 при выходе юзера. Кому-то функция может показаться бессмысленной, однако я знаю наверняка, для чего я ее добавил. Возможно, и вы когда-нибудь узнаете . [attachment=7239:0.5.0.1_mod11_x86.rar][attachment=7238:0.5.0.1_mod11_x64.rar][attachment=7237:0.5.0.1_mod11_src.zip] Старые версии [attachment=7243:0.5.0.1_mod10_x86.rar][attachment=7242:0.5.0.1_mod10_x64.rar][attachment=7241:0.5.0.1_mod10_src.zip] [attachment=7240:0.5.0.1_...hashpass.rar]Остальные версии можно найти в моей шаре на хабе 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 сама сконвертирует базу регистраций в бинарный формат, а также удалит все ненужные (и даже некоторые нужные ) настройки. ...с обычной версии на версию, хеширующую пароли: Просто заменяем бинарники, и запускаем хаб. При запуске все пароли будут хешированы автоматически. ...с версии, хеширующей пароли, на обычную версию: Останавливаем хаб, заменяем бинарники, удаляем базу регистраций, запускаем хаб, и просим всех юзеров зарегистрироваться по-новой. Ну да, а Вы что думали? Расшифровать хешированные пароли невозможно. Именно по этой причине включение хеширования паролей производится таким извращенным способом. Версия, хранящая пароли в зашифрованном виде:[attachment=7236:0.5.0.1_...hashpass.rar] Как это работает Пароли хранятся в виде Код |<Хэш пароля в hexadecimal-формате> Символ | в начале пароля нужен для того, чтобы PtokaX могла отличить шифрованные пароли от нешифрованных. Если при загрузке базы какие-либо пароли не соответствуют данному формату, они автоматически хешируются. Это позволяет не париться при переходе на шифрованную базу и при добавлении аккаунтов прямо в XML-файл.Следует помнить, что хешированные пароли расшифровать нельзя. Т.е вы не сможете сконвертировать базу обратно. Никак не сможете. СОВСЕМ никак. Также следует помнить, что зарегистрированных юзеров теперь нельзя редактировать с помощью PXControl, PRA, и им подобных. И да, если Ваш скрипт регистрации запрашивает старый пароль при его изменении, Вам придется прикрутить к нему библиотеку sha2. В архиве только exe'шник, все остальное берем из основного дистрибутива. Скрипт для конвертирования бинарной базы обратно в XML: [attachment=6665:GetBaseBack.lua] Если Вы переходите на данную версию с более новой, хранящей настройки и список скриптов в файлах .pxt, то Вам будет полезен конвертер: [attachment=7249:settings_back.lua] 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 - первый и последний адрес диапазона не считались его частью Исправлено: При нажатии кнопки "Принять" настройки не сохранялись в файл (подозреваю, что кое-кто считает это фичей, а не багом ) [attachment=6696:ptokax_0...mod3_x86.rar][attachment=6695:ptokax_0...mod3_x64.rar][attachment=6694:ptokax_0...mod3_src.z ip] Консольная версия, хранящая пароли в зашифрованном виде:[attachment=6697:ptokax_0...ass_sha2.rar] Предыдущая версия, шифрующая пароли алгоритмом MD5:[attachment=6666:PtokaX_c...hashpass.rar] Дополнительную информацию можно найти во втором сообщении данной темы |
Nickolya, Setuper, Tsd, Ksan, prapor, Артём, Karumo, rival, KT315, Drakula, PPA, Kingston, Saymon21, dimetro, Reanimator, WINS, Alexey5176, SKIFI, KCAHDEP, MIKHAIL, Booth, мамин_парень, 96username96, KMV, НЕMaster-Grow, Sezam | ||
18.2.2013, 23:15 |
Перепутал скрипты Поток сознания с комментариями |
GULAM33 Скрипт НЕ может отлавливать TTH, поскльку этот тип поиска скриптом игнорируется. Код if from and stype ~= "9" and (CheckString(sstring) or (bBlockOther and tBlock[UID.sNick])) then |
Артём, GULAM33 | ||
18.2.2013, 19:23 |
PXControl Удаленное управление PtokaX 0.4.x.x |
Изменил способ подключения LuaFileSystem. Теперь не должно быть проблем с разными названиями библиотеки. Текущая версия серверной части - 1.01a, скачать можно в первом сообщении данной темы. |
Артём, мамин_парень | ||
12.2.2013, 19:23 |
NoPedo API2 | Блокировка поиска детского порно |
NoPedo Версия: 1.00 Версия API: API2 (PtokaX 0.4.0/0.4.1, LUA 5.1) Автор: alex82 Описание: Скрипт блокирует поиск детского порно, используя заранее составленный список фраз. |
Nickolya, Ksan, HackFresse, rival, Alexey, Saymon21, striker, KCAHDEP, Littlemuk, GULAM33, tammi_0909, Yamakasi, Unique | ||
19.10.2012, 14:51 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
1) Нет, для этого нужно предварительно преобразовать строку в нужный регистр. 2) Видимо, автор того скрипта решил перестраховаться . Все таймеры скрипта удаляются при его остановке. PS. Возможно в ранних версиях птоки был баг с удалением таймеров при остановке скриптов, и автор скрипта "исправил" его таким нехитрым способом. Если не лень, можете пересмотреть чейнджлог птоки, особенно версий с припиской "RC". |
MIKHAIL | ||
10.3.2012, 17:48 |
PXControl Удаленное управление PtokaX 0.4.x.x |
Доступна версия 1.01. Изменения: * Изменен способ взаимодействия между потоками, благодаря чему удалось избавиться от регулярных падений программы. * Исправлены многочисленные ошибки в графическом интерфейсе. * Частично переписан код UDP-отладчика. * Добавлена возможность отключить UDP-отладчик, сохранив при этом сообщения об ошибках скриптов. * Оптимизирована работа с сокетами. |
mariner, Артём, rival, Alexey, darkangel17, Kingston, Milena, Saymon21, dimetro, DEN 007, Damaks | ||
2.3.2012, 14:20 |
Defend Chat API 2 | Полностью автоматическая защита чата от спама |
Могу подсказать еще один способ защиты чата от флудоботов (чтобы прочитать текст, вам необходимо стереть защитное покрытие с помощью монеты): Подавляющее большинство самописных флудоботов не имеют поддержки сжатия (ZPipe/ZPipe0), в отличие от нормальных клиентов. Вся проблема в том, что птока не добавляет в таблицу юзера информацию о поддержке сжатия, и тому, кто решится написать скрипт, блокирующий чат по этому принципу, придется заниматься мазохизмом, отлавливая отправку клиентом команды $Supports |
PomanoB, Enyby, мамин_парень | ||
30.8.2011, 2:24 |
Tiny Hublist Программа для создания хаблистов |
Ksan Адрес хаба можно? |
Milena | ||
15.6.2011, 23:45 |
Создание динамических страниц с помощью Lua Пишем сайты на Lua |
Saymon21 Даже не буду ходить по ссылке. После ковыряния в коде некоторых библиотек от Kepler Project, у меня появились серьезные сомнения отностиельно вменяемости его авторов. |
Milena | ||
16.5.2011, 22:33 |
Создание динамических страниц с помощью Lua Пишем сайты на Lua |
Давно хотел продолжить эту тему, но все никак руки не доходили. Итак, низкоуровневые функции: [attachment=5831:web.lua] Описание Таблицы: _SERVER - Окружение, полученное от web-сервера _HEADERS - Заголовки HTTP. По умолчанию в таблице содержится один заголовок: content-type: text/html. Все заголовки должны быть установлены до отправки каких-либо данных web-серверу. На момент первой отправки данных в таблице должен содержаться как минимум один заголовок, в противном случае web-сервер сообщит о внутренней ошибке. _GET - Переменные, полученные при помощи метода GET. _POST - Переменные, полученные при помощи метода POST. _REQUEST - Переменные, полученные при помощи методов GET и POST. _COOKIE - Куки, сохраненные на стороне клиента. _SET_COOKIE - Куки, которые необходимо сохранить на стороне клиента. Каждое значение должно быть таблицей, содержащей собственно значение куки и время истечения в формате unix-epoch. Если время истечения не указано, куки сохраняется до конца сессии. Для удаления куки, установите его заведомо просроченным. В таблицах _HEADERS,_GET,_POST,_REQUEST и _COOKIE все индексы хранятся в нижнем регистре. Таблицы _SERVER,_GET,_POST,_REQUEST и _COOKIE заполняются данными лишь при необходимости, поэтому к ним нельзя применять функции pairs и next. Функции: echo(...) - Функция, использующаяся для отправки данных клиенту. При первой отправке данных помимо самих данных отправляются заголовки, после чего добавление или изменение заголовков становится невозможным, а данная функция становится ссылкой на функцию io.write print(...) - Функция, использующаяся для отображения произвольных значений. Результат помещается в теги <pre><code></code></pre>. Данную функцию необходимо использовать только в целях отладки. tprint(tTable[, sTableName]) - Функция отображает содержимое таблицы tTable. Данную функцию необходимо использовать только в целях отладки. Переменные: _HEADERS_SENT - Переменная, определяющая, были ли отправлены заголовки. Менять значение этой переменной вручную не рекомендуется. Пример использования Код #!C:\Program Files\lua\lua.exe dofile("web.lua") if not _REQUEST.mode or _REQUEST.mode == "main" then echo("Hello world!!!") elseif _REQUEST.mode == "ip" then echo("Ваш IP: ",_SERVER.REMOTE_ADDR or "?") elseif _REQUEST.mode == "useragent" then echo("Ваш User-Agent: ",_SERVER.HTTP_USER_AGENT or "?") else echo("<center><h2>Кулхацкер, да?</h2><br>А ну-ка иди отседова по добру по здорову. Не то глазки красненькие повыковыриваю, да ручки шаловливые пообломаю.</center>") end |
Nickolya, Milena, Saymon21 | ||
21.4.2011, 17:47 |
Tiny Hublist Программа для создания хаблистов |
Ksan При отладке хаблиста я пинговал хабы из списка еще чаще. Если бы твой хаб был в списке во время отладки, я бы тоже оказался засранцем, идиотом, дебилом? |
Milena | ||
21.4.2011, 14:20 |
Tiny Hublist Программа для создания хаблистов |
Ksan Если тебя так напрягают сообщения о пингах, то почему бы просто не отключить их? Или, как вариант, вынести в личку бота. |
Milena | ||
18.4.2011, 20:15 |
Tiny Hublist Программа для создания хаблистов |
Цитата А как сделать что-бы хабы сами добавлялись? Или как сделать статистику типо этой? Хабов в списке: 161. Из них онлайн: 150, полностью проверено: 147. Пользователи оставили комментариев: 36. да,да... И кстати, если бы я выложил движок хаблиста BCETI, вы бы с ним все равно не справились, поскольку вы и с этим, простейшим хаблистом справляетесь с трудом. Sinsei А что мешает засунуть эту фигню в блок, и явно указать, по какой стороне выравнивать его содержимое? Код <div style="text-align: left"> <!-- Тут какая-то фигня --> </div> PS. Код '<ul><li>Всего хабов: '..hubs_count..'</li>'.. О боже . Не показывайте мне это - иначе мои глаза вытекут, и я больше не смогу выпускать новые версии.'<li>Онлайн хабов: '..online_hubs_count..'</li>'.. '<li>Общее число юзеров на хабах сети: '..total_users_count..'</li>'.. '<li>Общий размер шары: '..FormatSize(tonumber(total_share_size),true)..'</li>'.. '<li>В среднем на каждом хабе '..math.floor(total_users_count/online_hubs_count)..' юзеров и '..FormatSize(tonumber(total_share_size/online_hubs_count),true)..' шары</li>'.. '<li>Обновление информации происходит один раз в час.</li>'.. '</ul> |
Milena | ||
17.4.2011, 2:07 |
Tiny Hublist Программа для создания хаблистов |
Доступна версия 1.01 Изменения: Исправлено отображение символов $ и | в строках, полученных от хаба. Добавлена переменная path, которая позволит упростить запуск скрипта в тех случаях, когда интерпретатору не удалось определить рабочую директорию. Добавлена возможность установки ника, пароля и шары для каждого хаба. Весь HTML-код вынесен в шаблон. Добавлена возможность изменения сортировки списка хабов. Добавлена возможность быстрой смены шаблона. Добавлен альтернативный шаблон страницы. Добавлено автоматическое определение страны хаба по IP-адресу. Добавлена возможность создания хаблиста в формате XML. Добавлена возможность отправки списка хабов на удаленный FTP-сервер. а можно добавить строку в хаблист типо - локалка , локалка +нэт Можно в версии 1.01. Для этого меняем 125 строку:Код table.insert(hubs,{Addr = hub[1],Info = Ping(pingaddr,port,hub[2],hub[3],hub[4]),Time = os.time(),Country = tDNS[addr] and tGeoIP[tDNS[addr]] or "??",UserString = hub[5]}) Теперь добавляем где-то после 204 строки: Код :gsub("{USERSTRING}",v.UserString or "") Теперь можно использовать переменную {USERSTRING} внутри строки хаблиста. При этом настройки хаба должны выглядеть так: Код {"dc.example.com:411", [5] = "Какая-то строка"}, |
KauH™, Ksan, Артём, Milena, dj hoodo, Saymon21, Damaks, Underconstruction | ||
13.4.2011, 15:39 |
Tiny Hublist Программа для создания хаблистов |
Saymon21 Потому что большинству юзеров (в том числе мне) непонятно, зачем переходить со старого доброго NMDC на нечто невразумительное. Какие в нем преимущества? Чем оно лучше? |
Milena | ||
13.4.2011, 14:10 |
Tiny Hublist Программа для создания хаблистов |
Saymon21 Я об этом думал. Но есть одна проблема - насколько мне известно, ADC использует кодировку UTF8. А это значит что прежде чем добавлять его поддержку, необходимо переходировать все шаблоны страниц и базы данных. Для данного хаблиста это вполне возможно - тут нет БД, а шаблон всего один. А вот BCETI... Даже страшно подумать об этом. Тем более протокол ADC по сути мертворожденный. Даже не знаю, стоит ли браться за это. Цитата Теперь совет, который вам может пригодиться (не связан с моей вышеобозначенной проблемой) - ник бота - tiny - может быть занят или зареген на хабах, и в этих хабах пинг не прокатит, поэтому лучше изменить название бота-пингера для входа на что-то другое, менее распространённое. Я сменил на tinylist Ник нужно менять в любом случае, причем на что-нибудь оригинальное, и совпадающее с названием сайта. Хотя бы потому, что дефолтный ник со временем будет забанен на большинстве хабов благодаря |
Milena | ||
13.4.2011, 12:41 |
Tiny Hublist Программа для создания хаблистов |
Цитата У меня вопрос: программа может создавать html-файл на ftp-сервере? Текущая версия - нет. Но могу добавить в следующей.Ksan Тут используется модифицированная библиотека сокетов. Под какой сборкой Lua ты ее запускаешь? PS. В архиве есть исходник. Если желаешь, можешь попробовать пересобрать библиотеку самостоятельно. |
Milena | ||
13.4.2011, 7:02 |
Tiny Hublist Программа для создания хаблистов |
Tiny Hublist Версия: 1.01 Платформа: Win32 Автор: alex82 Описание: Для демонстрации работы этого пингера, я решил написать небольшую программу для создания хаблиста. Программа работает следующим образом: хабы из списка проверяются на работоспособность, после чего результат сохраняется в HTML-файл. Соответственно, для создания хаблиста требуется только сама программа, и любой Web-сервер. Скриншоты [attachment=5945:tinyhublist_1.02.rar] Старые версии: [attachment=5755:tinyhublist_1.01.zip][attachment=5746:tinyhublist_1.00.zip] |
Nickolya, ustas, KauH™, Ksan, Артём, Accelerator, KT315, Alexey, ЕгО_ТенЬ, darkangel17, Kingston, Milena, CrazyKiller, baltica, PSIX, Hammer, dj hoodo, Saymon21, dimetro, JumpEXZ, RAND(i)M, DEN 007, @_JuNiOr_@, Sinsei, Damaks, Гарик БатьковиЪ, STIVAN, Osimus, Underconstruction, Mustik, AltSide, мамин_парень | ||
11.4.2011, 18:12 |
Пингер NMDC-хабов Ударим опенсорсом по нездоровой шняге |
Эта "уязвимость" исправляется при помощи двух строк кода, и это может сделать сам юзер, если чувствует в себе зачатки паранойи. |
Milena | ||
8.4.2011, 20:22 |
Пингер NMDC-хабов Ударим опенсорсом по нездоровой шняге |
Stribog Теоретически возможно всё. Даже падение метеорита на башку в ясный летний день. Вы на практике это проделайте, а потом пишите об уязвимости. И кстати. Если Lua-скрипты работают на многих хабах, и хакнуть Lua так просто, то почему до сих пор ни один хаб не был взломан с использованием Вашего конгениального метода? Цитата ДА было бы тут что красть =) Ну да, это Вам не китайский код в 3-4 т строк, написанный хрен знает на чем, а файлик размером 365 строк, 85 из которых комментарии (но не смотря на это уверенно пингующий подавляющее большинство хабов). Его не украсть потому что его не продать, ибо лохи платят за количество. Да и не нужно его красть - он раздается бесплатно в первом посте темы. PS. Газификация лужи проходит как-то не совсем успешно. |
Taulalan, Ksan, Артём, Milena | ||
6.4.2011, 21:54 |
Пингер NMDC-хабов Ударим опенсорсом по нездоровой шняге |
Stribog А конкретнее? Где Вы там нашли слабые места БЕЗОПАСНОСТИ? Можете на номера строк указать? Или это всего лишь пук в лужу? |
Milena | ||
3.4.2011, 15:31 |
Хаблист BCETI.com |
У него клиническая смерть. Сегодня реанимируем. |
Milena | ||
3.4.2011, 7:03 |
RusHub and MySQL?! есть ли и как ... вопросы про mysql, md5 hash и т.д. |
Как можно понять из мануала по php, функция md5 имеет обе "реализации". Если вызвать ее так: Код md5($str, true) она вернет то же самое что и библиотека OpenSSL.Это же касается библиотеки md5 для Lua: Код md5.sum (message) Вернет бинарное представление md5 длиной 16 символов, а Код md5.sumhexa (message) вернет двоично-десятичное представление длиной 32 символа.Вывод: внимательно читаем мануалы. |
Kingston, Saymon21, DRUG_ADDICT | ||
1.4.2011, 22:45 |
Пингер NMDC-хабов Ударим опенсорсом по нездоровой шняге |
В последнее время появились нехорошие тенденции - рекламировать коммерческие проекты на некоммерческих ресурсах, выкладывать софт с закрытым кодом и встроенными шеллами, пытаться завлечь бесплатных Название: NMDC Hubs Pinger Версия: 1.00 Системные требования: Lua 5.1, LuaSocket Лицензия: GPL v3 Автор: alex82 Описание: Данный пингер не является самостоятельным программным продуктом, но может быть использован при написании хаблистов на Lua. Именно этот пингер (с небольшими изменениями) используется на Использование Код Ping(sAddress, iPort[, sNick, sPassword, sShare/iShare]) sAddress - Адрес хаба. Обязательный параметр. Правильность адреса не проверяется - Вам необходимо сделать это самостоятельно перед вызовом функции. Возвращаемые значения: Функция возвращает таблицу, которая содержит следующие индексы: Пример использования: Код dofile("pinger.lua") local info = Ping("dc.myhub.pp.ua",411) print("Hub online:",info.Online and "yes" or "no") if info.Online then print("Hub name:",info.Name or "?") print("Hub description:",info.Descr or "?") print("Users:",info.Users or "?") print("Share:",info.Share and info.Share.." kb" or "?") print("Max users:",info.MaxUsers or "?") print("Min share:",info.MinShare or "?") print("Min slots:",info.MinSlots or "?") print("Max hubs:",info.MaxHubs or "?") print("Hub soft:",info.HubSoft or "?") else print("Error:",info.LastErr or "?") end [attachment=5719:pinger.lua] Пингеры на других языках |
Nickolya, ustas, Invisible, Ksan, KT315, Alexey, Kingston, Milena, Saymon21, RAND(i)M, DEN 007, SKIFI, Mustik, AltSide | ||
28.3.2011, 16:57 |
Хаблист BCETI.com |
Там была переустановка софта. Всю ночь . А все баги движка, приводящие к ошибкам 500 я давно выловил. |
Milena | ||
28.3.2011, 0:58 |
Создание динамических страниц с помощью Lua Пишем сайты на Lua |
Цитата Apache/1.3.29 Server at localhost Port 80 Может дело не в руках вовсе? Бытует мнение что Apache 1 устарел. |
Milena | ||
23.3.2011, 10:47 |
Библиотека mtime Windows only | Время в миллисекундах |
...или Lua-AIO с wxLua. Или тот же Lua-AIO с созданием ветви и использованием ThreadWait() |
Milena | ||
22.3.2011, 10:19 |
Библиотека mtime Windows only | Время в миллисекундах |
Написал небольшую библиотеку, позволяющую получать время с момента запуска системы в миллисекундах. Библиотека может быть полезна для оценки производительности кода. [attachment=5686:mtime.rar][attachment=5687:mtime_src.rar] Пример использования: Код require"mtime" print( mtime.get() ) |
Nickolya, Invisible, PomanoB, Milena, Saymon21, AltSide | ||
17.3.2011, 9:55 |
Хаблист BCETI.com |
Milena | |||
17.3.2011, 3:28 |
Хаблист BCETI.com |
Измененения в работе хаблиста: *Исправлены ошибки пингера, из-за которых некоторые вполне работоспособные хабы не пинговались. Особо одаренный хаб Eximius теперь также пингуется нормально. *Теперь при добавлении хаба производится полный пинг, благодаря чему хаб появляется в списке сразу после добавления. Появление хаба в XML-списках и обновление статистики происходит как и раньше - с небольшой задержкой. *Добавлены рекорды посещаемости и размера шары. |
Milena | ||
15.3.2011, 23:49 |
Хаблист BCETI.com |
Кроме того, в пингере, проверяющем хаб при добавлении, есть небольшой косяк, из-за которого некоторые вполне нормальные хабы отваливаются с такой ошибкой. Основной пингер уже исправил, скоро доберусь и до этого. |
Milena | ||
15.3.2011, 10:54 |
Создание динамических страниц с помощью Lua Пишем сайты на Lua |
Setuper Веб-сервер (во всяком случае Апач) не будет этим заниматься. От тупо отправит те заголовки, что передал ему скрипт, добавив в них заголовок с информацией о себе. При полном отсутствии заголовков он выкинет ошибку 500 и запишет "Premature end of script headers" в лог ошибок. Так что переложить всю работу на него не получится . Но можно автоматизировать этот процесс чтобы не возиться с составлением заголовков при написании каждой страницы. Как только решусь писать продолжение, напишу об этом. |
Milena | ||
15.3.2011, 4:11 |
Создание динамических страниц с помощью Lua Пишем сайты на Lua |
Бытует мнение, что для создания динамических сайтов на языке, отличном от php, необходимо убить уйму времени на написание соответствующего модуля для вебсервера, и извести метр нервов на сборку этого модуля с помощью кривого компилятора от фирмы "Майкрософт". Однако, это далеко не так - писать сайты можно на любом языке, для которого имеется консольный интерпретатор. Теоретически, можно написать сайт на Ассемблере, собрав полученную программу как консольное приложение. Законченные извращенцы могут попробовать сделать сайт на том мерзопакостном "языке программирования", что используется в командной строке Windows. Но сегодня мы не будем заниматься извращениями, и попробуем написать сайт на каком-нибудь более простом и понятном языке. А именно - на Lua. Для этого нам понадобятся:
Итак, начнем. Для начала откроем файл конфигурации Apache, и убедимся, что для директории, в которой будут лежать наши скрипты, разрешено управление конфигом при помощи файлов .htaccess: Код AllowOverride All Далее откроем эту директорию, создадим в ней файл .htaccess, и пропишем в нем 2 заклинания: Код Options +ExecCGI Эта директива разрешает выполнение CGI-скриптов в данной директории.Код AddHandler cgi-script .lua Эта директива сообщает Апачу о том, что файлы с расширением .lua являются CGI-скриптами.Теперь создадим в этой же директории файл test.lua, и пропишем в первой строке путь к интерпретатору Lua (здесь и далее предполагается, что интерпретатор установлен в директорию C:\Program Files\lua): Код #!C:\Program Files\lua\lua.exe Далее попробуем вывести в окно браузера какую-нибудь строчку. Для тех кто не в курсе поясню - общение между Апачем и CGI-приложением происходит через стандартные потоки. Для передачи данных Апачу используется stdout, а для получения тела сообщения CGI-приложением - stdin. Итак, пишем скрипт: Код io.write("Hello world!!!") Пытаемся открыть наш скрипт в браузере, и... получаем ошибку 500 .Судорожно лезем в лог ошибок апача в надежде выяснить причину ошибки, и видим там следующее: Цитата [Sun Mar 15 02:35:07 2011] [error] [client 127.0.0.1] Premature end of script headers: test.lua Замечаем в сообщении знакомое слово "headers". Долго-долго думаем, что бы это могло означать... Нервничаем, кусаем бутерброд, запиваем его пивом... И тут нас осеняет: "Эврика, блеать, мы же не отправили заголовки!". Исправляем наш скрипт: Код io.write("content-type: text/html\n\nHello world!!!") Запускаем скрипт, и видим в окне браузера заветную строчку: Цитата Hello world!!! Ура!!! Оно работает!!! Бутерброды съедены не зря, и пиво выпито не напрасно. Продолжение следует... |
Nickolya, Setuper, Invisible, PomanoB, KT315, Alexey, Milena, Saymon21, RAND(i)M, DEN 007, AltSide | ||
14.3.2011, 21:12 |
Хаблист BCETI.com |
при добавлении хаба выдало ошибку: пустая страница с надписью: Исправилpages/add.lua:68: LuaSQL: Error executing query. MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Hub','dreamshub.freeddns.com','87.249.195.56',411,'no comment',1300102794,'87.' at line 1 Цитата Не дано было сделать регу пользователя и позволить самому управлять настройками для своего хаба? Типа как ником пингера? У меня была мысля сделать это даже без регистрации - разрешать настройку параметров пингера если IP-адрес хаба совпадает с IP-адресом юзера, просматривающего страницу.Я реал задолбался наблюдать подобную херню. Обычный сборщик статы справится лучше, чем эти ваши пинги пингерами. Как дети малые, ей-богу, будто примеров мёртвых хаблистов мало. Цитата 3. Вопрос - в самом деле у большинства хабов, даже самых больших, ограничение по минимуму шары отсутствует, или это пингер пока не может определить? (а то только у 2 хабов стоит лимит) Если пингер не смог определить ограниченияя хаба, отображаются знаки вопроса, а надпись "неограничено" появляется только в том случае, когда параметр равен нулю. Однако надпись "неограничено" тоже мало о чем говорит, поскольку ограничения могут быть отключены в настройках хаба, и реализованы альтернативным способом - при помощи скрипта. |
Milena | ||
14.3.2011, 11:23 |
Хаблист BCETI.com |
Мы строили, строили и наконец построили. Ура! © Чебурашка Мой проект-долгострой, начатый еще во времена существования хаба Titan, и возобновившийся в рамках проекта BCETI.com, наконец вошел в стадию бета-тестирования, и стал доступен широкой публике. Попасть на хаблист можно по адресам Все пожелания, возмущения и негодования можно оставлять в этой теме, либо в теме хаблиста на форуме BCETI.com (которая будет создана чуть позже ). Часто задаваемые вопросы Как добавить свой хаб в хаблист? Очень просто - с помощью Если мой хаб имеет несколько адресов, и я добавлю в хаблист их все, то будет ли мой хаб отображаться на нескольких страницах? В хаблист встроен весьма продвинутый алгоритм проверки адреса, и у Вас навряд-ли получится добавить несколько адресов для одного хаба даже в том случае, когда на хаб ссылаются несколько доменов, и он работает на нескольких портах. Но даже если у Вам удастся это сделать, при следующем пинге все страницы будут перенаправлены на тот адрес, который был добавлен первым. Как поступит хаблист в случае слияния моего хаба с другим? При слиянии нескольких хабов, их страницы перенаправляются на страницу того хаба, который был добавлен раньше, а в таблице с информацией о хабе появляется поле "Дополнительные адреса", в котором перечисляются адреса всех перенаправленных хабов. При этом, страницы перенаправленных хабов не удаляются, и если Вы решите забрать свой домен, и снова запустить отдельный хаб, он будет отображаться по старому адресу. Заметил что на страницах некоторых хабов отображаются их логотипы, а в ссылке на страницу хаба используется имя вместо ID. Можете сделать так же для моего хаба? Можем. Для этого Вам необходимо предоставить логотип в формате PNG (желательно на белом или прозрачном фоне) размером не более 400x100 пикселей. Файл логотипа можно прикрепить в этой теме, либо отправить мне в личку, указав при этом ID хаба, либо ссылку на страницу хаба. Данная функция не предоставляется для хабов, существующих менее одного месяца. Логотипы, содержащие ненормативную лексику или изображения порнографического характера, либо выполненные в стиле "Унылое говно", не принимаются. Может ли мой хаб оказаться в списке "Рекомендуем посетить"? Если Ваш хаб работает круглосуточно, и по вечерам на нем собирается не менее 1000 юзеров, мы можем добавить Ваш хаб в список рекомендуемых. Взамен Вы должны разместить в сообщении дня ссылку на хаблист: Цитата Хаблист BCETI.com - На каком языке написан хаблист? Оба компонента хаблиста (Web-интерфейс и пингер) написаны на Lua Я хочу себе такой же хаблист. Где можно скачать этот движок? На данный момент движок хаблиста существует в единственном экземпляре, и я не планирую выкладывать его в публичный доступ. |
Nickolya, Setuper, Invisible, Ksan, Accelerator, Milena, Saymon21, TiGRpp, RAND(i)M, ProGeTTo, AfLc | ||
7.3.2011, 18:39 |
CustomLocations + MySQL Определяем провайдера по IP-адресу |
Написал небольшой скрипт для импорта базы данных CustomLocations в бд MySQL: [attachment=5659:customlocations.lua]Перед использованием необходимо создать базу данных и вписать в скрипт путь к директории CustomLocations. Скрипт для тестирования: [attachment=5660:cl_test.lua] |
Nickolya, Tsd, Invisible, PomanoB, Milena, PSIX, Saymon21, DEN 007, AltSide, OCTAGRAM | ||
5.3.2011, 18:13 |
StarWars API1 | API2 |
sexynapku [attachment=5645:StarWars.rar] Артём Оно действительно не работало если имя бота равно имени главного бота. И виноваты в этом кривые руки. Твои. Посмотри внимательно на функцию OnStartup. |
sexynapku | ||
28.2.2011, 23:20 |
Small DC HubList (Хаблист) Создай свой хаблист. CMS для создания хаблиста. |
Полагаю что коммерческая реклама может быть размещена только по согласованию с администрацией. Согласование было? |
мамин_парень | ||
25.2.2011, 22:21 |
Вопрос по доработке срипта StatPX как переделать... |
Blazer [attachment=5619:statpx.rar] На будущее: создавай запросы в теме скрипта. |
|||
20.2.2011, 23:16 |
Stupid Pass API2 | Удаление аккаунтов с небезопасными паролями |
Ksan Т.е. долбежка в личку с интервалом 10 минут - это и есть забота о нервах юзеров? Объясните почему нельзя пользователю при регистрации использовать тот пароль, к которому он привык, с ним сроднился, который уже в памяти у него и он не хочет менять его? Потому что на большинстве хабов регистрация не обязательна, и используется только для защиты от спама. А юзер с паролем 123456 - потенциальная дыра в этой самой защите.Я проще смотрю у себя на это и оставляю выбор за пользователем! Если юзер не в состоянии придумать себе пароль, пусть сидит незарегистрированным. На файлообмен это никак не повлияет. |
Milena | ||
20.2.2011, 21:02 |
Stupid Pass API2 | Удаление аккаунтов с небезопасными паролями |
Неплохо было бы добавить функцию... А зачем, собственно? Это одноразовый скрипт, который нужно использовать перед установкой того самого продвинутого скрипта регистрации.Цитата ...которая при заходе юзера с некондиционным паролем позволяет ему зайти, но сообщает ему в чате и привате, чтоб поменял пароль на отвечающий требованиям безопасности (показать примеры)...и неплохо бы этому же юзеру, пока не исправит пароль, донимать псьмами в личку от бота (с тем же содержанием)...например, через каждые 10 минут. Как-то все слишком сложно получается. Куда проще удалить все аккаунты с такими паролями. Они как правило не имеют никаких полномочий, и перерегистрировать их - дело одной минуты. |
Milena | ||
20.2.2011, 15:35 |
Stupid Pass API2 | Удаление аккаунтов с небезопасными паролями |
DEN 007 Разумнее. Только до установки продвинутого скрипта регистрации, таких паролей могло набраться выше крыши. Не удалять же их вручную. |
Milena | ||
20.2.2011, 12:48 |
Функции Для Разработчиков склад полезных функций |
Функция проверки пароля на безопасность: Код tSequence = { {"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m",}, {"m", "n", "b", "v", "c", "x", "z", "l", "k", "j", "h", "g", "f", "d", "s", "a", "p", "o", "i", "u", "y", "t", "r", "e", "w", "q",}, {"й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю",}, {"ю", "б", "ь", "т", "и", "м", "с", "ч", "я", "э", "ж", "д", "л", "о", "р", "п", "а", "в", "ы", "ф", "ъ", "х", "з", "щ", "ш", "г", "н", "е", "к", "у", "ц", "й",}, {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0",}, {"0", "9", "8", "7", "6", "5", "4", "3", "2", "1",}, } function CheckPassword(pass) local passlen = #pass if passlen < 2 then return true end local tpass = {} for i = 1,passlen do table.insert(tpass,pass:sub(i,i)) end local success = false for i = 2,passlen do if tpass[i] ~= tpass[1] then success = true break end end if not success then return false, "Пароль не может состоять из одинаковых символов" end for i,v in ipairs(tSequence) do success = false local first for n,c in ipairs(v) do if c == tpass[1] then first = n break end end if first then for i = 2,passlen do first = first+1 if not v[first] or v[first] ~= tpass[i] then success = true break end end if not success then return false, "Пароль не может состоять из клавиатурных последовательностей (qwerty, 123456, и.т.д.)" end end end return true end Функция возвращает false и сообщене об ошибке, если пароль состоит из одинаковых символов или клавиатурной последовательности. В противном случае возвращает true. Обратите внимание: функция не приводит пароль к нижнему регистру. Вам необходимо сделать это самостоятельно перед вызовом функции. Пример использования функции |
Setuper, Saymon21 | ||
20.2.2011, 12:36 |
Stupid Pass API2 | Удаление аккаунтов с небезопасными паролями |
Stupid Pass Версия: 1.00 Версия API: API2 (PtokaX 0.4.0/0.4.1) Автор: alex82 Описание: Данный скрипт предназначен для удаления аккаунтов с небезопасными паролями. Небезопасными паролями считаются: * Пароли, совпадающие с ником [attachment=5605:StupidPass.rar] |
Invisible, Karumo, PomanoB, Kingston, Milena, Saymon21, Rei_Volia | ||
15.2.2011, 12:22 |
Luasocket win32 | Работа с сокетами |
Слегка модифицировал модули, отвечающие за отправку e-mail'ов по протоколу SMTP. Теперь можно отправлять письма через безопасные соединения. [attachment=5597:socket.rar] Пример использования: Код smtp.send{ Как видим, в таблице появился параметр secure, который включает использование безопасных соединений. Параметр может принимать следующие значения:from = "Blablabla <blablabla@mail.ru>", rcpt = "Some User <someuser@mail.ru>", source = smtp.message({headers = {['Content-Type'] = 'text/plain; charset="cp1251"',subject = "Test"},body = "Test message"}), user = "blablabla", password = "123456", server = "smtp.mail.ru", port = 465, secure = "sslv3", } Код sslv23 Если параметр отсутствует, отправка производится посредством обычного соединения.sslv3 tlsv1 Для нормальной работы модифицированных модулей требуется библиотека LuaSec |
Nickolya, PomanoB, Saymon21 | ||
18.1.2011, 2:07 |
Функции Для Разработчиков склад полезных функций |
Функция преобразования кодировки cp1251 в cp866, необходимая для правильного отображения символов кириллицы в консоли Windows: Код local CP866 = { [160] = 255, [161] = 246, [162] = 247, [164] = 253, [168] = 240, [170] = 242, [175] = 244, [176] = 248, [178] = 73, [179] = 105, [183] = 250, [184] = 241, [185] = 252, [186] = 243, [191] = 245, } function string.tooem(str) return (str:gsub("[Ђ-я]",function(c) c = c:byte() if c >= 192 and c <= 239 then return string.char(c-64) elseif c >= 240 then return string.char(c-16) elseif CP866[c] then return string.char(CP866[c]) else return "?" end end)) end |
Nickolya, Sekretchik, Saymon21 | ||
17.1.2011, 5:44 |
Функции Для Разработчиков склад полезных функций |
Оптимизированная функция Serialize: Код function Serialize(tTable, sTableName, hFile, sTab) sTab = sTab or "" hFile:write(sTab,sTableName," = {\n") for key, value in pairs(tTable) do local sKey = (type(key) == "string") and ("[%q]"):format(key) or ("[%d]"):format(key) if type(value) == "table" then Serialize(value, sKey, hFile, sTab.."\t") else hFile:write(sTab,"\t",sKey," = ",(type(value) == "string") and ("%q"):format(value) or tostring(value)) end hFile:write(",\n") end hFile:write(sTab,"}") end Функция, выводящая содержимое таблицы в консоль: Код function table.print(tTable, sTableName, sTab, bComma) Параметр sTableName указывать не обязательно. Параметры sTab и bComma используются при рекурсивном вызове функции. Следовательно, не нужно указывать их при вызове вручную.sTab = sTab or "" print(sTableName and sTab..sTableName.." = {" or sTab.."{") for key, value in pairs(tTable) do local sKey = (type(key) == "string") and ("[%q]"):format(key) or ("[%d]"):format(key) if type(value) == "table" then table.print(value, sKey, sTab.."\t",true) else print(sTab.."\t"..sKey.." = "..((type(value) == "string") and ("%q"):format(value) or tostring(value))..",") end end print(sTab.."}"..(bComma and "," or "")) end |
Nickolya, Setuper, Alexey, Sekretchik, Saymon21 | ||
8.1.2011, 2:42 |
ChatAfterLoginLocker API2 | Доступ к чату после N минут онлайн |
Примерно так: Код tUsers = {} function UserConnected(user) tUsers[user.sNick] = os.time() end RegConnected = UserConnected function UserDisconnected(user) tUsers[user.sNick] = nil end RegDisconnected = UserDisconnected function ChatArrival(user) if tUsers[user.sNick] and tUsers[user.sNick] > os.time()-600 then Core.SendToUser(user,"<"..SetMan.GetString(21).."> В данный момент Вы не можете отправлять сообщения в чат. Пожалуйста подождите.") return true end end |
Nickolya, мамин_парень | ||
5.1.2011, 18:54 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
-slava- Открыть mainstat.tpl, и убрать ненужное. |
-slava- | ||
13.11.2010, 6:13 |
PXControl Удаленное управление PtokaX 0.4.x.x |
dimajak За это отвечает UDP-отладчик. Если сообщения об ошибках не отображаются, значит он отключен, либо ты вручную отписался от него, либо он не может пробиться через фаервол. |
Milena | ||
7.11.2010, 11:26 |
StatPX API1, API2 | Статистика хаба |
ProGeTTo Для этого нужно поставить веб-сервер |
ProGeTTo | ||
31.10.2010, 5:35 | У вас нет прав на просмотр этой темы | У вас нет прав на просмотр этого сообщения |
viperrr | ||
28.10.2010, 21:28 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
Pank1, ProGeTTo | |||
24.10.2010, 15:38 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
Доступна версия 1.01 beta Изменения: Исправлено отображение символов $ и | в веб-логе чата |
Nickolya, Ksan, Saymon21 | ||
22.10.2010, 20:04 |
StatPX API1, API2 | Статистика хаба |
Доступна версия 1.06 Изменения: Добавлено округление среднего времени на хабе при отображении статистики юзера |
KauH™, Milena, Saymon21, lankmv | ||
22.10.2010, 19:07 |
Menu Organizer API2 | Скрипт отправки меню |
Menu Organizer Версия: 1.00 Версия API: API2 (PtokaX 0.4.x.x, Lua 5.1) Автор: alex82 Описание: Скрипт предназначен для отправки юзер-команд на хабе. Особенности скрипта: Все юзер-команды находятся в текстовых файлах и не содержат каких-либо элементов синтаксиса Lua. Описание синтаксиса файлов меню Секция. Обозначается квадратными скобками и содержит номера профилей или группы прав доступа, разделенные пробелами. Элементы секции можно комбинировать в произвольном порядке. Например: [IsOp 2] - Меню будут отправляться юзерам с ключом, и юзерам с профилем 2 Группы прав доступа нечувствительны к регистру. Например, записи IsOp, isop и ISOP идентичны. Юзер-команды. Каждая юзер-команда должна находиться на новой строке. Добавление символа | в конце юзер-команд не обязательно. Двойные обратные слеши автоматически заменяются на одинарные. Пример юзер-команды: Код $UserCommand 1 3 [HUB_MENU]Помощь$<%[mynick]> [PREFIX]help| Все строки, не содержащие символа $ в начале или шаблона секции, считаются комментариями и не обрабатываются. Юзер-команды, найденные до обьявления первой секции, также игнорируются. Группы прав доступа All - Все юзеры Reg - Зарегистрированные юзеры IsOP - Юзеры с ключом (операторы) MassMsg - Рассылка массовых сообщений Topic - Установка топика TempBan - Временный бан TempUnban - Снятие временного бана RefreshTxt - Перезапуск текстовых файлов DelRegUser - Удаление регистрации юзера AddRegUser - Регистрация юзера ClrPermBan - Очистка списка постоянных банов ClrTempBan - Очистка списка временных банов GetInfo - Просмотр информации о юзере GetBans - Просмотр списка банов RestartScripts - Управление скриптами RestartHub - Перезапуск хаба TempOP - Временный оператор Gag - Заглушка/снятие заглушки Redirect - Перенаправление Ban - Бан Unban - Снятие бана Kick - Кик Drop - Дроп AllowedOPChat - Доступ к ОпЧату SendFullMyinfos - Отправка полного MyINFO SendAllUserIP - Отправка IP всех юзеров RangeBan - Бан диапазона RangeUnban - Снятие бана диапазона RangeTempBan - Временный бан диапазона RangeTempUnban - Снятие временного бана диапазона GetRangeBans - Просмотр списка банов диапазонов ClearRangePermBans - Очистка списка банов диапазонов ClearRangeTempBans - Очистка списка временных банов диапазонов Close - Отключение юзера [attachment=5137:MenuOrganizer_1.00.zip] |
Nickolya, KauH™, Taulalan, Invisible, Karumo, Kingston, Milena, Saymon21, WINS, RAND(i)M, DEN 007, Cyber_voodoo, EvgenyL, мамин_парень | ||
18.10.2010, 1:07 |
Luasocket win32 | Работа с сокетами |
Несколько слов относительно модуля http. В модуле имеется возможность работы через http-proxy, однако реализована она несколько странно - прокси необходимо указывать непосредственно в запросе. Это приводит к тому, что при необходимости использования прокси-сервера при выполнении запросов, приходится модифицировать каждый скрипт, работающий с модулем. Однако, этого можно избежать, если внести в модуль небольшие изменения: Перед строкой 280: Код local nreqt = adjustrequest(reqt) добавитьКод if PROXY then reqt.proxy = PROXY end После этого можно вписать адрес прокси-сервера непосредственно в настройки модуля: Код -- connection timeout in seconds TIMEOUT = 60 -- default port for document retrieval PORT = 80 -- user agent field sent in request USERAGENT = socket._VERSION -- proxy-server PROXY = "http://localhost:8080" |
Nickolya, Saymon21 | ||
15.10.2010, 20:52 |
StatPX API1, API2 | Статистика хаба |
RAND(i)M Логично. Только так наверное проще: Код tCopy[i] = {Name = v.sNick, Sort = v.bOperator and "\1"..v.sNick:lower2() or v.sNick:lower2(), Share = v.iShareSize, Profile = v.iProfile, Client = client or "?", Version = version or "", Descr = Descr or "",Email = Email, Mode = Mode, Hubs = hubs or "?", Slots = slots or "?", Limit = GetNormalSpeed(limit)} bahodiruz Попробуй так: Код Path = "", Файлы будут сохраняться в корне FTP-сервера. |
Milena | ||
15.10.2010, 10:16 |
Модуль GeoCity Определяем местоположение по IP с точностью до города |
Доступен GeoCity Updater 1.02 Изменения: Переписан интерфейс программы.Утилита совместима с модулем GeoCity 1.01, и не совместима с версией 1.00 |
Milena, Saymon21 | ||
15.10.2010, 10:05 |
StatPX API1, API2 | Статистика хаба |
alex82 1. Юзеров с ключом не получится переместить вверх без изменения формата БД, а сортировку хотел исправить, но забыл. Исправлю в следующей версии.1. Было бы неплохо приблизить список пользователей в WEB-статистике к привычному списку юзеров в ДЦ. т.е. сделать сортировку нечувствительной к регистру, и может даже поместить "ключканутых" вверх списка. 2. Скрипт создаёт пусту папку htdocs на диске C:, вроде все папки поменял, но он продолжает создавать, где именно в скрипте - я так и не нашёл. 2. Проверил. Папка создается именно там где надо, а не на диске C. -------------------------------------------------------- Исправление сортировки: Открываем Raw.lua. Находим (около 30 строки): Код table.insert(tCopy, {sEnter = v.Enter, iSessionTime = tonumber(v.SessionTime), iOnline = v.Online, iTotalTime = tonumber(v.TotalTime), Заменяем на sLeave = v.Leave, sNick = v.Name, iProfile = v.Profile, sIP = i, sRank = GetRank(i) } ) Код table.insert(tCopy, {sEnter = v.Enter, iSessionTime = tonumber(v.SessionTime), iOnline = v.Online, iTotalTime = tonumber(v.TotalTime), sLeave = v.Leave, sNick = v.Name, sSort = v.Name:lower2(), iProfile = v.Profile, sIP = i, sRank = GetRank(i) } ) Далее несколькими строками ниже находим: Код table.sort(tCopy, function(a, b) return (a.sNick < b.sNick) end) Заменяем на:Код table.sort(tCopy, function(a, b) return (a.sSort < b.sSort) end) Находим (около 94 строки): Код tCopy[i] = {Name = v.sNick, Share = v.iShareSize, Profile = v.iProfile, Заменяем на:Client = client or "?", Version = version or "", Descr = Descr or "",Email = Email, Mode = Mode, Hubs = hubs or "?", Slots = slots or "?", Limit = GetNormalSpeed(limit)} Код tCopy[i] = {Name = v.sNick, Sort = v.sNick:lower2(), Share = v.iShareSize, Profile = v.iProfile, Client = client or "?", Version = version or "", Descr = Descr or "",Email = Email, Mode = Mode, Hubs = hubs or "?", Slots = slots or "?", Limit = GetNormalSpeed(limit)} Далее несколькими строками ниже находим: Код table.sort(tCopy,function(a,b) return(a.Name<b.Name) end) Заменяем на:Код table.sort(tCopy,function(a,b) return(a.Sort<b.Sort) end) |
Milena, RAND(i)M | ||
14.10.2010, 13:14 |
От: StatPX От темы с ID: 1269 |
infection С помощью меню |
infection | ||
14.10.2010, 12:42 |
StatPX API1, API2 | Статистика хаба |
Доступна версия 1.06 beta Список изменений: Добавлена возможность отправки сгенерированных страниц на удаленный FTP-сервер |
Milena, Saymon21 | ||
12.10.2010, 12:46 |
Unknown Blocker API2 | Блокировка неизвестных команд |
Unknown Blocker Версия: 1.00 Версия API: API2 (Lua 5.1) Автор: alex82 Описание: Скрипт предназначен для блокирования неизвестных команд в главном чате и личке главного бота хаба. При создании скрипта преследовались следующие цели: * Исключить возможность "пробивания" скриптов блокировки главного чата при помощи произвольной команды. Внимание! Скрипт должен находиться в самом низу списка скриптов. При запуске он самостоятельно переместится на последнюю позицию списка. Однако следует помнить, что если Вы не выполняете полный перезапуск скриптов при их установке, Вам необходимо самостоятельно переместить данный скрипт на последнюю позицию после установки нового скрипта. [attachment=5096:Unknown_...ker_1.00.rar] |
Nickolya, rus.region78, Tsd, Invisible, Accelerator, PomanoB, OVERLORD1979, Kingston, Milena, Saymon21, Dimon21, TiGRpp, RAND(i)M, DEN 007, shur49, AfLc | ||
11.10.2010, 3:37 |
StatPX API1, API2 | Статистика хаба |
Ameet Полная совместимость будет только тогда, когда появитcя библиотека Lua-GD для Win64. А пока что придется отключить графики. |
Milena | ||
11.10.2010, 2:49 |
Заготовки скриптов для PtokaX Делимся болванками скриптов |
1) В этой таблице хранятся функции, отвечающие за обработку команд. Подробное описание есть в комментариях. 2) Ага. Зачем при каждой отправке меню выполнять десятки конкатенаций, если можно сделать это при запуске скрипта, а при подключении юзера просто отправлять готовую строку? |
Saymon21 | ||
11.10.2010, 1:57 |
Заготовки скриптов для PtokaX Делимся болванками скриптов |
Ksan Я не претендую на эксклюзивность, так что можешь выкладывать свою. ----------------------------------------------------------------------- Небольшие исправления в заготовке #1 - теперь алгоритм обработки команд стал еще ближе к встроенному обработчику птоки. Также добавил пару комментариев для кода, который может показаться новичкам темным лесом. Выложил заготовку #2 |
Saymon21 | ||
10.10.2010, 22:29 |
ChatHistorySQL История чата |
Решение проблемы: заменяем 125 строку на эту: Код if me or not data:find("^["..SetMan.GetString(29):gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1").."]"..tCfg.CmdPattern) and not data:find("^%s*is%s+kicking%s+%S+%s+because:") then |
Kingston, Milena, Saymon21, WINS, shullz | ||
10.10.2010, 14:12 |
Заготовки скриптов для PtokaX Делимся болванками скриптов |
Думаю, ни для кого не секрет, что скрипты далеко не всегда пишутся с нуля - многие скрипты, предназначенные для какой-либо определенной программы (в данном случае под "определенной программой" следует понимать PtokaX) содержат много практически идентичного кода (обработчик команд в чате, отправка меню, и.т.д), переписывать который в каждом скрипте не имеет смысла. Некоторые, наверное, даже догадываются о том, что в арсенале скриптеров со стажем имеются заранее написанные "болванки" скриптов, содержащие тот самый повторяющийся код, и позволяющие быстро сваять нужный скрипт. Предлагаю выкладывать подобные заготовки в этой теме. Для затравки выкладываю одну из своих заготовок: [attachment=5091:script_template_1.lua] Еще одна заготовка: [attachment=5092:script_template_2.lua]Отличается от первой тем, что позволяет устанавливать разные права доступа для команд. Тем, кто ковырялся в моих скриптах, данный код может показаться знакомым, и в этом нет ничего удивительного - прочитайте еще раз первый абзац этого сообщения, и вы поймете почему . |
Nickolya, Tsd, Invisible, Ksan, Артём, HackFresse, rival, Kingston, Milena, Saymon21, Dimon21, Antibiotic | ||
10.10.2010, 11:38 |
CmdToAdmin Скрипт посылает в приват владельцу хаба команды | API2 |
Можно несколько упростить код отлова команды в чате: Код function ChatArrival(user,data) Префиксы команд берутся из настроек хаба. Соответственно отпадает необходимость в таблице команд и цикле, проверяющем наличие команды в таблице. И чистка памяти, я думаю, здесь лишняя.if Core.GetUser(sNick) and user.sNick ~= sNick then local pre,cmd = data:match("%b<>%s+(["..SetMan.GetString(29):gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1").."])(%S+)") if pre then if not (pre == "+" and cmd:find("^%d+")) then -- Не реагируем на "+5", к примеру. cmd = cmd:lower() for i = 1,#tIgnoreCmd do if cmd == tIgnoreCmd[i] then return end end Core.SendPmToNick(sNick, sBot, "\tПослана команда хабу: "..data:sub(1,-2)) end end end end Код ToArrival = ChatArrival А это лучше удалить, поскольку во-первых, подавляющее большинство юзеров вообще не знают о возможности отправки команд главному боту хаба, во-вторых, будут проверяться все лички, а не только те, что были отправлены боту, а в третьих, при текущей реализации функции отлова команд, в лог будет попадать вся команда $To. Будет что-то вроде этого:Цитата <bot> Послана команда хабу: $To: bot From: user $<user> !command |
Invisible, Saymon21 | ||
5.10.2010, 17:48 |
Модуль GeoCity Определяем местоположение по IP с точностью до города |
Таки выложил обещанный класс php. В архиве также имеется тестовый скрипт. Подробности в первом посте. |
Milena, Saymon21 | ||
5.10.2010, 2:03 |
Модуль GeoCity Определяем местоположение по IP с точностью до города |
У меня вопрос к форумчанам. Найдутся ли добровольцы, знающие географию России, и желающие помочь проекту? Если да - обьясню суть проблемы подробнее. Добровольцы могут отписываться в этой теме. |
Milena | ||
4.10.2010, 0:39 |
StatPX API1, API2 | Статистика хаба |
Можно взять скин для StatPX Lite (пока что их всего 2), и переделать под StatPX. А можно самому сверстать. Если с веб-дизайном плохо, то можно сделать скин на основе какого-нибудь готового HTML-шаблона. |
Milena | ||
3.10.2010, 5:17 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Наверное потому что надо Код local _,_,information,fd=string.find( вместоКод local _,information,fd=string.find( PS. Цитата А мыши плакали, кололись, но продолжали жрать кактус Я решительно не понимаю, зачем вновь и вновь использовать эту хрень с прочерками (и делать в ней ошибки), если есть string.match() |
Saymon21 | ||
2.10.2010, 6:09 |
Anekbot API2 | Анекдоты из Интернета |
Чтобы не было пустых вопросов? В этом случае пустые вопросы все равно будут, ибо переменная Core определяется при запуске хаба. Соответственно, если скрипт запустить при остановленном хабе, он выкинет ошибку. Если уж менять, то на это: Код path = debug.getinfo(1).source:match("^@?(.+[/\\]).-$"):gsub("\\","/") |
Milena | ||
30.9.2010, 21:38 |
StatPX API1, API2 | Статистика хаба |
Идея действительно хороша, и уже реализована в StatPX Lite. Если когда-нибудь решусь на выпуск очередной версии, обязательно добавлю. |
Milena, Saymon21 | ||
21.9.2010, 12:24 |
string.gsub string.gsub замена > < аналогом < > |
Функция обработки смайлов из StatPX: Код tSmiles = { ["biggrin.gif"] = {":D", ":-D", ":=D"}, ["blink.gif"] = {"oO", "o.O", "o_O", "оО", "о.О", "о_О"}, ["confused.gif"] = {":S", ":-S", ":=S", ":confused:"}, ["cry.gif"] = {":'(", ":'-(", ":'=(", ":cry:"}, ["lol.gif"] = {":lol:", ":LOL:", "LOL"}, ["sad.gif"] = {":(", ":-(", ":=("}, ["shock.gif"] = {"O.O", "O_O", "О.О", "О_О", ":shock:"}, ["smiley.gif"] = {":)", ":-)", ":=)"}, ["tongue.gif"] = {":P", ":-P", ":=P"}, ["wink.gif"] = {";)", ";-)", ";=)"}, ["woohoo.gif"] = {"8-D", "8=D", ":woohoo:"}, } function string.Smiles(str) for i,v in pairs(tSmiles) do local rep = "<img src=\"smiles/"..i.."\" border=\"0\" alt=\"%1\" />" for _,smile in ipairs(v) do str = str:gsub(smile:gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1"),rep) end end return str end Используется так: Код src=src:Smiles() PS. Изобретать велосипед - на редкость неблагодарное занятие. |
foXDEvil | ||
21.9.2010, 12:07 |
string.gsub string.gsub замена > < аналогом < > |
Nickolya Код tMagic = { Вся эта лабуда делается при помощи одного метода:["%^"] = "%%%^", ["%["] = "%%%[", ["%)"] = "%%%)", ["%("] = "%%%(", ["%+"] = "%%%+", ["%*"] = "%%%*", ["%$"] = "%%%$", ["%?"] = "%%%?", ["%."] = "%%%.", ["%-"] = "%%%-", } function MakeNormMagicCharacters(sData) local sData = string.gsub(sData, "%%", "%%%%") for sFrom, sTo in pairs(tMagic) do sData = string.gsub(sData, sFrom, sTo) end return sData end Код :gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1") Об этом я уже писал здесь. |
Saymon21 | ||
20.9.2010, 20:08 |
string.gsub string.gsub замена > < аналогом < > |
Наверное, в качестве аргумента при втором вызове нужно указывать zamena, а не data. А еще лучше так: Код zamena = data:gsub("<", "<"):gsub( ">", ">") |
foXDEvil | ||
20.9.2010, 12:08 |
Модуль GeoCity Определяем местоположение по IP с точностью до города |
Доступна версия 1.01. Подробности в первом посте. PS. Чуть позже выложу класс php для работы с GeoCity. |
Milena, Saymon21 | ||
20.9.2010, 11:24 |
PXControl Удаленное управление PtokaX 0.4.x.x |
[02:58:27] <Bot> *** Error, script PXControl_Server.lua start failed. Попробуй закомментировать Код if path:find("^/") then -- OS detection Если после этого скрипт запустится, проблема в неправильно установленной LFSrequire "lfs" -- Linux bLinux = true else require"pxlfs" -- Windows end |
Milena | ||
18.9.2010, 13:26 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
Напиши в shortstat.tpl: Код <a href="/hubstat/stat.php">Хаб <font color="red">( (Юзеров: [TOTALUSERS], шара: [TOTALSHARE]) )</font></a> Потом в настройках скина включи страницу краткой статистики:Код ShortStat = y, -- Генерировать страницу краткой статистики для размещения на главной странице сайта (шаблон shortstat.tpl) Потом пропиши абсолютный путь и имя файла в переменной tWebFiles.ShortStat.PS. Принцип работы краткой статистики был таким изначально, так что это актуально для любой версии. |
Invisible, Saymon21 | ||
13.9.2010, 18:44 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
Мдя, и в самом деле, фигню сморозил. Ладно, теперь серьезно. Находим в Raw.lua: Код local f = io.open (tWebFiles.ChatRank, "w") перед этим добавляем:Код if tTemp[1] then sTopChat = tTemp[1][1].." ("..tTemp[1][2].." сообщ.)" end Теперь вместо той фигни, что ты процитировал, пишем: Код :gsub("%[TOPCHAT%]",sTopChat or "?") |
Invisible, Saymon21 | ||
12.9.2010, 18:27 |
Ваши Вопросы И Предложения По Поводу Форума |
В свое время настраивал подсветку кода Lua для highlight.js (цвета а-ля Notepad++). Если надо - могу скинуть. |
Invisible | ||
12.9.2010, 18:18 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
Saymon, Ksan Это мусор, оставшийся от StatPX. Правильным будет удалить эти строки: Код if not(tWebCfg.Enable) then UpdateUserStats() end |
Saymon21 | ||
11.9.2010, 18:42 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
Saymon Открываем Raw.lua, находим: Код local f = io.open (tWebFiles.TopShare , "w") перед этим добавляем:Код if tCopy[1] then sTopShare = tCopy[1].Name.." ("..FormatSize(tCopy[1].Share)..")" end Открываем Web.lua, находим: Код :gsub("%[BANNED%]",sBanned) после чего добавляемКод :gsub("%[TOPSHARE%]",sTopShare or "?") :gsub("%[TOPCHAT%]",tCountryStats and tCountryStats[1] and tCountryStats[1][1].." ("..tCountryStats[1][1].." сообщ.)" or "?") И заменяем: Код WebstatUpdateTime=FormatDate2(os.time()) наBuildMainStat(user) BuildOnline() Код WebstatUpdateTime=FormatDate2(os.time()) BuildOnline() BuildMainStat(user) PS. Работоспособность не проверял. PPS. Для сообщения дня напишу чуть позже |
Invisible, Saymon21 | ||
11.9.2010, 1:36 |
Переименовка Ptokax Dc Hub 0.3.6.0 можно ли переименовать |
Удаление копирайта PtokaX Открываем SettingManager.cpp, находим (в районе 1400 строки): Код if(sTexts[SETTXT_HUB_TOPIC] == NULL) { Заменяем на:iLen = sprintf(msg, "$HubName %s|<%s> %s %s (%s: ", sTexts[SETTXT_HUB_NAME], sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_THIS_HUB_IS_RUNNING], sTitle.c_str(), LanguageManager->sTexts[LAN_UPTIME]); } else { iLen = sprintf(msg, "$HubName %s - %s|<%s> %s %s (%s: ", sTexts[SETTXT_HUB_NAME], sTexts[SETTXT_HUB_TOPIC], sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_THIS_HUB_IS_RUNNING], sTitle.c_str(), LanguageManager->sTexts[LAN_UPTIME]); } Код if(sTexts[SETTXT_HUB_TOPIC] == NULL) { iLen = sprintf(msg, "$HubName %s|", sTexts[SETTXT_HUB_NAME]); } else { iLen = sprintf(msg, "$HubName %s - %s|", sTexts[SETTXT_HUB_NAME], sTexts[SETTXT_HUB_TOPIC]); } Открываем utility.cpp, находим (в районе строки 973): Код int GetWlcmMsg(char * sWlcmMsg) { Заменяем на:#ifdef _WIN32 int iLen = sprintf(sWlcmMsg, "%s%I64d %s, %I64d %s, %I64d %s / %s: %I32d)|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_NAME_WLCM], #else int iLen = sprintf(sWlcmMsg, "%s%" PRIu64 " %s, %" PRIu64 " %s, %" PRIu64 " %s / %s: %u)|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_NAME_WLCM], #endif iDays, LanguageManager->sTexts[LAN_DAYS_LWR], iHours, LanguageManager->sTexts[LAN_HOURS_LWR], iMins, LanguageManager->sTexts[LAN_MINUTES_LWR], LanguageManager->sTexts[LAN_USERS], ui32Logged); if(CheckSprintf(iLen, 1024, "GetWlcmMsg2") == false) { sWlcmMsg[0] = '\0'; return 0; } return iLen; } Код int GetWlcmMsg(char * sWlcmMsg) { int iLen = sprintf(sWlcmMsg, "%s", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_NAME_WLCM]); if(CheckSprintf(iLen, 1024, "GetWlcmMsg2") == false) { sWlcmMsg[0] = '\0'; return 0; } return iLen; } Далее качаем Borland Developer Studio или Borland C++ Builder, и собираем PtokaX.exe из исходников. А пока качается, размышляем о том, имеем ли мы моральное право удалять копирайты. PS. А для особо ленивых выкладываю модифицированную GUI-версию: [attachment=5006:PtokaX_n...opyright.rar] файл раздается на правах лулзов |
Invisible, Alexey, dembel | ||
10.9.2010, 16:08 |
StatPX Lite API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров |
Ksan Вообще-то время запуска хаба устанавливается в строке 36, и только при первом запуске: Код if not tHubStat.Start then tHubStat.Start = os.time() end А 267 строка - это и есть та самая функция установки времени запуска в "удобоваримом" формате. В связи с этим у меня предложение: давайте будем хоть немного вникать в суть прежде чем писать сообщения. И еще. Давайте не будем устанавливать километровые подписи. |
мамин_парень | ||
|
Сейчас: 23.11.2024, 1:36 |