Textfiles_manager_and_updater, API1, API2 | Обновление TXT файлов по интервалу |
Здравствуйте, гость ( Вход | Регистрация )
Textfiles_manager_and_updater, API1, API2 | Обновление TXT файлов по интервалу |
27.1.2009, 13:40
Сообщение
#1
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Название: Textfiles_Manager_And_Updater
Версия API: API 1, 2 Автор: Nickolya Описание: Скрипт обновляет файлы по интервалу (только с расширением txt), можно поменять папку с которой работает скрипт (путь указан от главной папки хаба), указывается куда отсылаются данные: в приват или общий чат. Библиотеку кладем в папку с PtokaX.exe textfilesmanagerandupdater_api1.lua ( 1.8 килобайт ) Кол-во скачиваний: 84 PXLFS.rar ( 53.84 килобайт ) Кол-во скачиваний: 72 |
|
|
4.2.2009, 22:20
Сообщение
#2
|
|
Освоившийся участник Группа: Пользователи Сообщений: 314 Регистрация: 13.10.2008 Пользователь №: 791 Спасибо сказали: 9 раз |
можно под Api2? только не отсылай к переводчику.
|
|
|
5.2.2009, 13:04
Сообщение
#3
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
На скорую руку перевел под 2 апи:
CODE sTextFilesPath = "texts" -- папка с текстовыми файлами iTime = 60 -- время в секундах на обновление файлов bPm = false -- отсылать сообщение в приват (true) или нет (false) function OnStartup() sBot = SetMan.GetString(21)--frmHub:GetHubBotName() require("pxlfs") tFiles = {} sHubPath = Core.GetPtokaXPath()--frmHub:GetPtokaXLocation():g("/", "\\") sFilesPath = sHubPath..sTextFilesPath --SetTimer(1000 * iTime) --StartTimer() TmrMan.AddTimer(1000 * iTime, "LoadFiles") LoadFiles() end function string.g(sData, s1, s2) return sData:gsub(s1, Return(s2)) end function Return(sData) if type(sData) == "function" then return sData end return function() return sData end end --[[ function OnTimer() LoadFiles() end ]]-- function ChatArrival(tUser, sData) sData = sData:sub(1, -2) local _,_, sCmd = sData:find("^%b<>%s+%p(%S+)") if not sCmd then return end local sText = tFiles[sCmd] if sText then if bPm then --tUser:SendPM(sBot, sText.data) Core.SendPmToUser(tUser, sBot, sText.data) else Core.SendToUser(tUser, "<"..sBot.."> "..sText.data) --tUser:SendData(sBot, sText.data) end return true end end function LoadFiles() tFiles = attrdir(sFilesPath) end function attrdir(path) local tData = {} for file in lfs.dir(path) do if file ~= "." and file ~= ".." then local _,_, sFileName, sExt = file:find("(.+)(%.txt)$") if sExt then local f = path.."/"..file local attr = lfs.attributes(f) assert (type(attr) == "table") if attr.mode ~= "directory" then tData[sFileName] = { modification = attr.modification, data = OpenTextFile(f), } end end end end return tData end function OpenTextFile(sFileWay) local sMessage = "[ can not open file ]" local sFile = io.open(sFileWay, "r") if sFile then sMessage = sFile:read("*all") sMessage = sMessage:g("\n", "\r\n") sFile:close() end if sMessage then sMessage = "[ no data in file ]" end return sMessage end Библиотеку надеюсь найдете
Причина редактирования: Был косяк в коде в OnStartup, поправил...
|
|
|
26.5.2010, 22:16
Сообщение
#4
|
|
Продвинутый участник Группа: Пользователи Сообщений: 162 Регистрация: 19.8.2009 Из: Москва Пользователь №: 4 201 Спасибо сказали: 24 раза |
Приветствую.
Подскажите как в текстовых файлах учесть количество просмотров? Код ... №12. Чужая 17.06.2010 №13. Двойной КОПец 17.06.2010 №14. Стервозные штучки 01.07.2010 Скоро в нашем меню будет Огромный список Всех новинок за год. Количество просмотров: 97 [23:07:54] *** Юзер ушёл [Hub-Security] Например известно, что для отправки сообщения в окно чата, в текстовом файле помещают текст со знаком "|" Код |<Information> *** Список МАГНЕТ-ссылок был отправлен в личку бота. Благодарю. |
|
|
28.5.2010, 9:32
Сообщение
#5
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Вообще говоря, знак | нужно заменять его кодовым html аналогом. В противном случае это потенциальная уязвимость, котором можно воспользоваться для отсылки любой команды, а не только команды чата.
Код function LoadText(sFile) local hFile = base.io.open(sFile, "r") if hFile then local sMsg = hFile:read"*a" sMsg = sMsg:gsub("&#(%d+);", "&#%1;") sMsg = sMsg:gsub("|", "|") hFile:flush() hFile:close() return sMsg end return nil, "Не удалось открыть файл "..sFile end Подсчёт количества просмотров нужно производить в функции загрузки файла и хранить в lua, и выводить текст, к которому приклеивать сообщение с количеством просмотров. Код tCounts = {} sBot = "Бот" function ChatArrival(tUser, sData) local sCmd = sData:match"^[!/+](%S+)" if sCmd then local sMsg = LoadText(Core.GetPtokaXPath().."texts/"..sCmd..".txt") if sMsg then tCounts[sCmd] = (tCounts[sCmd] or 0) + 1 Core.SendToUser(tUser, ("<%s> %s\n\nКоличество просмотров: %d"):format(sBot, sMsg, tCounts[sCmd])) return true end end end Сохранение таблицы tCounts в файл и загрузка из файла при старте скрипта, для того чтобы статистика не сбивалась при перезагрузке скрипта, я надеюсь сам реализуешь. |
|
|
28.5.2010, 22:23
Сообщение
#6
|
|
Продвинутый участник Группа: Пользователи Сообщений: 162 Регистрация: 19.8.2009 Из: Москва Пользователь №: 4 201 Спасибо сказали: 24 раза |
Nickolya, прошу прощения за дублирование...показалось, что на этот пост не обратили внимания...
Setuper, благодарю за ответ, к функции "function ChatArrival", как я понял, нужно дописать сохранение таблицы tCounts, а затем весь фрагмент поместить в менюху, которая оперирует командами вывода текстовых файлов. Я выбрал у себя небольшой скриптик Chase_Cmd_v.1.0.lua и посмотрел function OpenTextFile(sFileWay)...как мне представляется, именно об этом идет речь. Однако без понимания сути я вряд ли справлюсь с этим. К сожалению я на том этапе, когда самостоятельно могу только написать менюху, сделать разметку текстового сообщения и поправить путь - чисто потребительские задачи для обеспечения работы скриптов на хабе...Потому нуждаюсь не только в полном коде скрипта, но и в пошаговом разъяснении его использования. Сделай, если не сложно... Может быть найдутся админы, которым это будет интересно...тешу себя мыслью, что чайник не я один... В части function LoadText(sFile) неясностей еще больше. Кажется я не четко выразил мысль. Если по порядку, то: - текстовый файл по команде !файл.txt отправляется в личку, - чтобы в окне чата возникло сообщение для юзера, который вызвал этот файл, что "Файл отправлен в личку бота", в самом TXT-файле, в конце, я добавляю строку: Код |<Information> *** Файл отправлен в личку бота. В этой связи непонятен источник уязвимости, если '|' используется не как команда, а как служебный символ в txt-файле, перенаправляющий последующий за ним текст в окно чата. В любом случае мне не понятно как и где использовать function LoadText(sFile) взамен символа '|' Просто прикрепляю пример текстового файла для иллюстрации.
Прикрепленные файлы
|
|
|
29.5.2010, 13:42
Сообщение
#7
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Добавил нужную тебе фишку в скрипт, надеюсь все как надо, плюс совместил апи 1 и 2 в одном скрипте и профиксил один глюк там.
Прикрепленные файлы
|
|
|
22.10.2010, 20:44
Сообщение
#8
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 1 Регистрация: 22.10.2010 Пользователь №: 7 939 Спасибо сказали: 0 раз |
Nickolya, Setuper,
Привет я ниче не понял можеш обьяснит где библиотека, где папка с текстом куда ставит? что делать нефига не понял ну скрипт нужен очень |
|
|
22.10.2010, 22:54
Сообщение
#9
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Для 2 апи библиотека находится здесь. Папка указывается относительно корневой папки хаба, по умолчанию в скрипте
Код sTextFilesPath = "texts" -- папка с текстовыми файлами т.е. стандартная папка текстовых файлов. Вроде ничего сложного. Если так нужен скрипт - изучи конфиг и тему повнимательней. А что не получилось и какие ошибки были желательно бы описывать!
|
|
|
|
Сейчас: 26.11.2024, 23:02 |