myDC.ru

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

 
История благодарностей участнику alex82. Спасибо сказали: 1406
Дата поста: В теме: За сообщение: Спасибо сказали:
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
Цитата(Saymon21 @ 4.3.2013, 17:24) *
Зачем?
Проще редактировать, при необходимости можно откатиться на старую версию без плясок с бубном.

Цитата
А что там насчет лицензии? Она позволяет делать такие фокусы?
Там же GNU GPL bad_smile.gif
мамин_парень
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]Ставить без переделки на живые хабы не рекомендуется bad_smile.gif
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), у многих анонимусов
руки так и чешутся запилить форк сего замечательного хабсофта.
Я оказался в их числе big_smile.gif

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.
Изменено: Положение и размеры кнопок на вкладке "Статистика".
Изменено: Отключено открытие скрипта по двойному клику в списке. Глубокого смысла в этом нет, просто мне так удобнее big_smile.gif.
Исправлено: Доведен до ума файл русской локализации.
Добавлено: В профиль зарегистрированного юзера добавлены дата регистрации, дата последнего входа и один текстовый параметр для хранения произвольных данных. В связи с этим в таблицу зарегистрированного юзера были добавлены поля 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 при выходе юзера. Кому-то функция может показаться бессмысленной, однако я знаю наверняка, для чего я ее добавил. Возможно, и вы когда-нибудь узнаете big_smile.gif.
Были собраны версии для Windows x86 и x64, однако 64-разрядная версия мной практически не тестировалась. В сборке x86 присутствуют библиотеки Lua на все случаи жизни.
[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>
После этого можно обновлять бинарники и запускать хаб. Новые настройки добавятся в конфиг автоматически при первом же сохранении настроек. Поскольку оригинальная PtokaX имеет весьма подлый алгоритм сохранения настроек, в котором, к тому же, имеется один нехороший баг, рекомендуется после первого же запуска пробежаться по настройкам, и исправить все, что не понравится. И да, не следует забывать, что имена виндовых библиотек в оригинальной версии могут отличаться от таковых в mod.

Если Вы обновляетесь с версии 0.4.x.x, работавшей под Windows, у Вас может возникнуть еще одна проблема: в списке зарегистрированных юзеров обнаружится большое число юзеров с одним и тем же ником, но в разных регистрах. При удалении каждого повторяющегося юзера, GUI-версия PtokaX будет выдавать сообщение. Если Вам лень клацать кнопку "OK" 10500 раз, можете убить птоку диспетчером задач, и использовать для первого запуска консольную версию - она удалит дублирующихся юзеров тихо, а сообщения об удалении сохранит в файл system.log

...с PtokaX 0.5.0.0 mod3 на PtokaX 0.5.0.1 mod:
Останавливаем хаб, добавляем в настройки профиль незарегистрированных юзеров (см. предыдущий пункт), запускаем хаб. Всё big_smile.gif

...с mod на оригинальную версию:
Останавливаем хаб, удаляем из конфига профиль незарегистрированных юзеров. После этого можно обновлять бинарники и запускать хаб - PtokaX сама сконвертирует базу регистраций в бинарный формат, а также удалит все ненужные (и даже некоторые нужные bad_smile.gif ) настройки.

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

...с версии, хеширующей пароли, на обычную версию:
Останавливаем хаб, заменяем бинарники, удаляем базу регистраций, запускаем хаб, и просим всех юзеров зарегистрироваться по-новой. Ну да, а Вы что думали? Расшифровать хешированные пароли невозможно. Именно по этой причине включение хеширования паролей производится таким извращенным способом.


Версия, хранящая пароли в зашифрованном виде:[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
Изменено: Положение и размеры кнопок на вкладке "Статистика"
Изменено: Отключено открытие скрипта по двойному клику в списке. Глубокого смысла в этом нет, просто мне так удобнее big_smile.gif
Исправлено: Доведен до ума файл русской локализации
Изменено: Настройки по умолчанию. Строковые параметры переведены на русский
Изменено: Список стран IP-To-Country: Добавлены коды стран, названия стран переведены на русский
Добавлено: В никах запрещены символы от \0 до \31
Добавлено: Блокировка неизвестных команд. Отключается на вкладке "Дополнительно"
Добавлено: Проверка прав доступа для команд !stats и !memstats
Добавлено: События BadPassArrival и ValidateDenideArrival
Добавлено: Параметр bZPipe, отображающий поддержку юзером сжатия. Код для Core.GetUserData - 64
Изменено: При сохранении настроек в файл записываются все параметры, а не только те, значения которых отличаются от значений по умолчанию
Добавлено: Возможность отключения приветствия (Этот хаб работает под управлением...). Включается на вкладке "Дополнительно" Имя параметра в настройках - ShowWelcome, ID для SetMan.(S/G)etBool - 57
Изменено: К черту бинарный бред. Список зарегистрированных юзеров снова хранится в файле XML
Исправлено: Ошибка IPToCountry - первый и последний адрес диапазона не считались его частью
Исправлено: При нажатии кнопки "Принять" настройки не сохранялись в файл (подозреваю, что кое-кто считает это фичей, а не багом big_smile.gif)

[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) Видимо, автор того скрипта решил перестраховаться big_smile.gif. Все таймеры скрипта удаляются при его остановке.

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

Даже не буду ходить по ссылке. bad_smile.gif

После ковыряния в коде некоторых библиотек от 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
Программа для создания хаблистов
Цитата
Цитата(Hammer @ 17.4.2011, 16:31) *
А как сделать что-бы хабы сами добавлялись? Или как сделать статистику типо этой? Хабов в списке: 161. Из них онлайн: 150, полностью проверено: 147.
Пользователи оставили комментариев: 36.

да,да...
Я понимаю что вам нравится хаблист BCETI, и Вы хотите чтобы этот имел такой же функционал - самостоятельное добавление хабов, статистика, комментарии, блекджек, шлюхи, и.т.д. Но извините, тот движок работает под управлением MySQL, а страницы генерируются cgi-скриптами. Здесь же выложен простейший хаблист, требующий для работы только вебсервер. Вы слишком много от него хотите.

И кстати, если бы я выложил движок хаблиста 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>
О боже extreme_sexy_girl.gif . Не показывайте мне это - иначе мои глаза вытекут, и я больше не смогу выпускать новые версии.
Milena
17.4.2011, 2:07 Tiny Hublist
Программа для создания хаблистов
Доступна версия 1.01

Изменения:
Исправлено отображение символов $ и | в строках, полученных от хаба.
Добавлена переменная path, которая позволит упростить запуск скрипта в тех случаях, когда интерпретатору не удалось определить рабочую директорию.
Добавлена возможность установки ника, пароля и шары для каждого хаба.
Весь HTML-код вынесен в шаблон.
Добавлена возможность изменения сортировки списка хабов.
Добавлена возможность быстрой смены шаблона.
Добавлен альтернативный шаблон страницы.
Добавлено автоматическое определение страны хаба по IP-адресу.
Добавлена возможность создания хаблиста в формате XML.
Добавлена возможность отправки списка хабов на удаленный FTP-сервер.

Цитата(ЕгО_ТенЬ @ 16.4.2011, 23:03) *
а можно добавить строку в хаблист типо - локалка , локалка +нэт
Можно в версии 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 из которых комментарии (но не смотря на это уверенно пингующий подавляющее большинство хабов). Его не украсть потому что его не продать, ибо лохи платят за количество. Да и не нужно его красть - он раздается бесплатно в первом посте темы. big_smile.gif

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 символа.

Вывод: внимательно читаем мануалы. big_smile.gif
Kingston, Saymon21, DRUG_ADDICT
1.4.2011, 22:45 Пингер NMDC-хабов
Ударим опенсорсом по нездоровой шняге
В последнее время появились нехорошие тенденции - рекламировать коммерческие проекты на некоммерческих ресурсах, выкладывать софт с закрытым кодом и встроенными шеллами, пытаться завлечь бесплатных лохов бетатестеров в закрытые собственнические проекты, и.т.д. И я решил слегка ударить по этой шняге нехорошим тенденциям выкладыванием софта с аналогичным функционалом, но открытого и бесплатного.

Название: NMDC Hubs Pinger
Версия: 1.00
Системные требования: Lua 5.1, LuaSocket
Лицензия: GPL v3
Автор: alex82

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

Использование

Код
Ping(sAddress, iPort[, sNick, sPassword, sShare/iShare])

sAddress - Адрес хаба. Обязательный параметр. Правильность адреса не проверяется - Вам необходимо сделать это самостоятельно перед вызовом функции.
iPort - Порт хаба. Обязательный параметр. Порт должен быть числом. Правильность порта не проверяется.
sNick - Ник пингера. Если ник не указан или равен nil, используется ник, указанный в настройках.
sPassword - Пароль. Если пароль не указан и при подключении хаб потребует его, пингер отключится от хаба.
sShare/iShare - Шара. Если шара не указана, используется шара, указанная в настройках.


Возвращаемые значения:
Функция возвращает таблицу, которая содержит следующие индексы:
Online - true если хаб онлайн, или false если пингеру не удалось соединиться с хабом
State - Состояние пинга:
-1 - Неизвестная ошибка,
1 - Не удалось соединиться,
2 - Хаб не отправил $Lock",
3 - Пинг запрещен настройками хаба,
4 - Хаб не поддерживает $BotINFO/$HubINFO (поскольку некоторые хабы поддерживают пинг, но не сообщают об этом в $Supports, код, проверяющий $Supports, закомментирован, и статус 4 никогда не устанавливается),
5 - Хаб полон,
6 - Проверка ника не пройдена,
7 - Хаб не ответил на команду $BotINFO,
8 - Ошибка в строке $HubINFO,
9 - Полностью проверен


Также в таблице могут содержаться индексы:
Users - Число юзеров на хабе
Share - Общая шара хаба, килобайт
Name - Название хаба
Descr - Описание хаба
MaxUsers - Максимум юзеров
MinShare - Минимальная шара
MinSlots - Минимум слотов
MaxHubs - Максимум хабов
Info.Email - Адрес e-mail владельца хаба
HubSoft Софт хаба

LastMsg - Последнее сообщение, отправленное хабом
LastErr - Сообщение об ошибке

Пример использования:
Код
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
Там была переустановка софта. Всю ночь big_smile.gif.

А все баги движка, приводящие к ошибкам 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
Цитата(Ksan @ 17.3.2011, 4:31) *
Это как это так резко число украинских хабов так далеко обогнало российских? big_smile.gif
Это я проверял новый пингер big_smile.gif
Цитата(Ksan @ 17.3.2011, 4:31) *
И что за хаб, который в статистике со шкалами обозначен как "Другой"? имею в виду - что за софт там..
Я полагаю, это FlexHubBeta
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" в лог ошибок. Так что переложить всю работу на него не получится big_smile.gif.

Но можно автоматизировать этот процесс чтобы не возиться с составлением заголовков при написании каждой страницы. Как только решусь писать продолжение, напишу об этом.
Milena
15.3.2011, 4:11 Создание динамических страниц с помощью Lua
Пишем сайты на Lua
Бытует мнение, что для создания динамических сайтов на языке, отличном от php, необходимо убить уйму времени на написание соответствующего модуля для вебсервера, и извести метр нервов на сборку этого модуля с помощью кривого компилятора от фирмы "Майкрософт". Однако, это далеко не так - писать сайты можно на любом языке, для которого имеется консольный интерпретатор. Теоретически, можно написать сайт на Ассемблере, собрав полученную программу как консольное приложение. Законченные извращенцы могут попробовать сделать сайт на том мерзопакостном "языке программирования", что используется в командной строке Windows. Но сегодня мы не будем заниматься извращениями, и попробуем написать сайт на каком-нибудь более простом и понятном языке. А именно - на Lua.

Для этого нам понадобятся:
  • Web-сервер Apache с включенным модулем mod_cgi.
  • Интерпретатор Lua. В качестве интерпретатора можно взять сборку LuaForWindows - она предельно простая в установке, и содержит практически все библиотеки, которые могут понадобиться для написания сайта.
  • Редактор исходного кода для редактирования конфигов и написания скриптов.
  • Бутерброды, пиво.
  • Ну и конечно же прямые руки, растущие из плеч.

Итак, начнем.

Для начала откроем файл конфигурации 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 doubt.gif .

Судорожно лезем в лог ошибок апача в надежде выяснить причину ошибки, и видим там следующее:
Цитата
[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
Цитата(Serx @ 14.3.2011, 13:43) *
при добавлении хаба выдало ошибку: пустая страница с надписью:
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, наконец вошел в стадию бета-тестирования, и стал доступен широкой публике. Попасть на хаблист можно по адресам hublist.bceti.com или hubs.bceti.com.

Все пожелания, возмущения и негодования можно оставлять в этой теме, либо в теме хаблиста на форуме BCETI.com (которая будет создана чуть позже big_smile.gif ).

Часто задаваемые вопросы
Как добавить свой хаб в хаблист?
Очень просто - с помощью этой страницы. На момент добавления хаб должен быть онлайн, и корректно отвечать на команду $BotINFO

Если мой хаб имеет несколько адресов, и я добавлю в хаблист их все, то будет ли мой хаб отображаться на нескольких страницах?
В хаблист встроен весьма продвинутый алгоритм проверки адреса, и у Вас навряд-ли получится добавить несколько адресов для одного хаба даже в том случае, когда на хаб ссылаются несколько доменов, и он работает на нескольких портах. Но даже если у Вам удастся это сделать, при следующем пинге все страницы будут перенаправлены на тот адрес, который был добавлен первым.

Как поступит хаблист в случае слияния моего хаба с другим?
При слиянии нескольких хабов, их страницы перенаправляются на страницу того хаба, который был добавлен раньше, а в таблице с информацией о хабе появляется поле "Дополнительные адреса", в котором перечисляются адреса всех перенаправленных хабов. При этом, страницы перенаправленных хабов не удаляются, и если Вы решите забрать свой домен, и снова запустить отдельный хаб, он будет отображаться по старому адресу.

Заметил что на страницах некоторых хабов отображаются их логотипы, а в ссылке на страницу хаба используется имя вместо ID. Можете сделать так же для моего хаба?
Можем. Для этого Вам необходимо предоставить логотип в формате PNG (желательно на белом или прозрачном фоне) размером не более 400x100 пикселей. Файл логотипа можно прикрепить в этой теме, либо отправить мне в личку, указав при этом ID хаба, либо ссылку на страницу хаба. Данная функция не предоставляется для хабов, существующих менее одного месяца. Логотипы, содержащие ненормативную лексику или изображения порнографического характера, либо выполненные в стиле "Унылое говно", не принимаются.

Может ли мой хаб оказаться в списке "Рекомендуем посетить"?
Если Ваш хаб работает круглосуточно, и по вечерам на нем собирается не менее 1000 юзеров, мы можем добавить Ваш хаб в список рекомендуемых. Взамен Вы должны разместить в сообщении дня ссылку на хаблист:
Цитата
Хаблист BCETI.com - http://hublist.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 минут - это и есть забота о нервах юзеров?

Цитата(Marc @ 20.2.2011, 22:09) *
Объясните почему нельзя пользователю при регистрации использовать тот пароль, к которому он привык, с ним сроднился, который уже в памяти у него и он не хочет менять его?
Я проще смотрю у себя на это и оставляю выбор за пользователем!
Потому что на большинстве хабов регистрация не обязательна, и используется только для защиты от спама. А юзер с паролем 123456 - потенциальная дыра в этой самой защите.

Если юзер не в состоянии придумать себе пароль, пусть сидит незарегистрированным. На файлообмен это никак не повлияет.
Milena
20.2.2011, 21:02 Stupid Pass
API2 | Удаление аккаунтов с небезопасными паролями
Цитата(Ksan @ 20.2.2011, 17:12) *
Неплохо было бы добавить функцию...
А зачем, собственно? Это одноразовый скрипт, который нужно использовать перед установкой того самого продвинутого скрипта регистрации.
Цитата
...которая при заходе юзера с некондиционным паролем позволяет ему зайти, но сообщает ему в чате и привате, чтоб поменял пароль на отвечающий требованиям безопасности (показать примеры)...и неплохо бы этому же юзеру, пока не исправит пароль, донимать псьмами в личку от бота (с тем же содержанием)...например, через каждые 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

Описание:
Данный скрипт предназначен для удаления аккаунтов с небезопасными паролями.
Небезопасными паролями считаются:
* Пароли, совпадающие с ником
* Пароли, состоящие менее чем из n символов
* Пароли, состоящие из одинаковых символов. Например: 111111, qqq, и.т.д.
* Пароли, состоящие из клавиатурных последовательностей. Например: qwerty, 123456, и.т.д.

[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{
    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",
}
Как видим, в таблице появился параметр secure, который включает использование безопасных соединений. Параметр может принимать следующие значения:
Код
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)
    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
Параметр sTableName указывать не обязательно. Параметры sTab и bComma используются при рекурсивном вызове функции. Следовательно, не нужно указывать их при вызове вручную.
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 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров
Цитата(LOPD @ 28.10.2010, 21:08) *
Ошибка StatPX_Lite.lua:206: attempt to call global 'GetChatRank' (a nil value) не понел в чём проблема вроде работал норм и тут ошибка.
Заменяем в строке 206
Код
GetChatRank
на
Код
GetRank

Pank1, ProGeTTo
24.10.2010, 15:38 StatPX Lite
API2 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров
Доступна версия 1.01 beta

Изменения:
Исправлено отображение символов $ и | в веб-логе чата
Добавлена возможность отправки сгенерированных страниц на удаленный FTP-сервер
Переписаны некоторые функции (обработка команд, отправка меню)
Исправлена ошибка, приводящая к увеличению числа сообщений в графиках главного чата при отправке команд
В чат-лог добавлена фильтрация kick-сообщений
Исправлена ошибка, не позволявшая просматривать статистику хаба при отключенной веб-статистике
Исправлено определение адресов локальной сети при генерации некоторых страниц веб-статистики
Добавлена возможность изменения стиля ссылки на текущую страницу
Исправлено экранирование символов переноса строки в веб-логе чата
И еще много-много мелких изменений
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&#124;


Все строки, не содержащие символа $ в начале или шаблона секции, считаются комментариями и не обрабатываются. Юзер-команды, найденные до обьявления первой секции, также игнорируются.
Группы прав доступа
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 | Статистика хаба
Цитата(RAND(i)M @ 15.10.2010, 0:49) *
alex82
1. Было бы неплохо приблизить список пользователей в WEB-статистике к привычному списку юзеров в ДЦ. т.е. сделать сортировку нечувствительной к регистру, и может даже поместить "ключканутых" вверх списка.
2. Скрипт создаёт пусту папку htdocs на диске C:, вроде все папки поменял, но он продолжает создавать, где именно в скрипте - я так и не нашёл.
1. Юзеров с ключом не получится переместить вверх без изменения формата БД, а сортировку хотел исправить, но забыл. Исправлю в следующей версии.
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-сервер
Добавлен топ пользователей по числу сообщений в чате
Добавлена возможность отключения сообщений о достижении рекордов
Переписаны некоторые функции (обработка команд, отправка меню, получение ранга)
Исправлена ошибка, не позволявшая удалять лог главного чата из сообщения дня
Исправлена ошибка, приводящая к увеличению числа сообщений в графиках главного чата при отправке команд
В чат-лог добавлена фильтрация kick-сообщений
И еще много-много мелких изменений
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

Я не претендую на эксклюзивность, так что можешь выкладывать свою. big_smile.gif

-----------------------------------------------------------------------

Небольшие исправления в заготовке #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]Отличается от первой тем, что позволяет устанавливать разные права доступа для команд.

Тем, кто ковырялся в моих скриптах, данный код может показаться знакомым, и в этом нет ничего удивительного - прочитайте еще раз первый абзац этого сообщения, и вы поймете почему big_smile.gif.
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 | Анекдоты из Интернета
Цитата(DEN 007 @ 2.10.2010, 4:26) *
Чтобы не было пустых вопросов?
В этом случае пустые вопросы все равно будут, ибо переменная 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
Цитата(xproffx @ 20.9.2010, 2:15) *
[02:58:27] <Bot> *** Error, script PXControl_Server.lua start failed.
Попробуй закомментировать
Код
if path:find("^/") then    -- OS detection
    require "lfs"    -- Linux
    bLinux = true
else
    require"pxlfs"    -- Windows
end
Если после этого скрипт запустится, проблема в неправильно установленной LFS
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 | Веб-статистика хаба, чат-ранг, статистика местоположения юзеров
Мдя, и в самом деле, фигню сморозил. extreme_sexy_girl.gif

Ладно, теперь серьезно. Находим в 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 строка - это и есть та самая функция установки времени запуска в "удобоваримом" формате.


В связи с этим у меня предложение: давайте будем хоть немного вникать в суть прежде чем писать сообщения.

И еще. Давайте не будем устанавливать километровые подписи.
мамин_парень

14 страниц V  < 1 2 3 4 5 > » 
RSS Сейчас: 25.4.2024, 11:17