myDC.ru

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

 
 
Ответить в данную темуНачать новую тему

> Textfiles_manager_and_updater, API1, API2 | Обновление TXT файлов по интервалу

Теги
Нет тегов для показа
Setuper
сообщение 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


Спасибо сказали:
Go to the top of the page
+Quote Post
MEXAHuK
сообщение 4.2.2009, 22:20
Сообщение #2


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 314
Регистрация: 13.10.2008
Пользователь №: 791
Спасибо сказали: 9 раз




можно под Api2? только не отсылай к переводчику.
Go to the top of the page
+Quote Post
Nickolya
сообщение 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


Библиотеку надеюсь найдете big_smile.gif
Причина редактирования: Был косяк в коде в OnStartup, поправил...


Спасибо сказали:
Go to the top of the page
+Quote Post
TiGRpp
сообщение 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> *** Список МАГНЕТ-ссылок был отправлен в личку бота.


Благодарю.
Go to the top of the page
+Quote Post
Setuper
сообщение 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+);", "&#38;#%1;")
    sMsg = sMsg:gsub("|", "&#124;")
    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 в файл и загрузка из файла при старте скрипта, для того чтобы статистика не сбивалась при перезагрузке скрипта, я надеюсь сам реализуешь.
Go to the top of the page
+Quote Post
TiGRpp
сообщение 28.5.2010, 22:23
Сообщение #6


Продвинутый участник
****

Группа: Пользователи
Сообщений: 162
Регистрация: 19.8.2009
Из: Москва
Пользователь №: 4 201
Спасибо сказали: 24 раза




Nickolya, прошу прощения за дублирование...показалось, что на этот пост не обратили внимания... after_boom.gif

Setuper, благодарю за ответ, к функции "function ChatArrival", как я понял, нужно дописать сохранение таблицы tCounts, а затем весь фрагмент поместить в менюху, которая оперирует командами вывода текстовых файлов.
Я выбрал у себя небольшой скриптик Chase_Cmd_v.1.0.lua и посмотрел function OpenTextFile(sFileWay)...как мне представляется, именно об этом идет речь. Однако без понимания сути я вряд ли справлюсь с этим. К сожалению я на том этапе, когда самостоятельно могу только написать менюху, сделать разметку текстового сообщения и поправить путь - чисто потребительские задачи для обеспечения работы скриптов на хабе...Потому нуждаюсь не только в полном коде скрипта, но и в пошаговом разъяснении его использования. Сделай, если не сложно... Может быть найдутся админы, которым это будет интересно...тешу себя мыслью, что чайник не я один...big_smile.gif

В части function LoadText(sFile) неясностей еще больше.
Кажется я не четко выразил мысль. Если по порядку, то:
- текстовый файл по команде !файл.txt отправляется в личку,
- чтобы в окне чата возникло сообщение для юзера, который вызвал этот файл, что "Файл отправлен в личку бота", в самом TXT-файле, в конце, я добавляю строку:
Код
|<Information> *** Файл отправлен в личку бота.

В этой связи непонятен источник уязвимости, если '|' используется не как команда, а как служебный символ в txt-файле, перенаправляющий последующий за ним текст в окно чата. В любом случае мне не понятно как и где использовать function LoadText(sFile) взамен символа '|'
Просто прикрепляю пример текстового файла для иллюстрации.

Прикрепленные файлы
Прикрепленный файл  072010.txt ( 469 байт ) Кол-во скачиваний: 18
 
Go to the top of the page
+Quote Post
Nickolya
сообщение 29.5.2010, 13:42
Сообщение #7


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Добавил нужную тебе фишку в скрипт, надеюсь все как надо, плюс совместил апи 1 и 2 в одном скрипте и профиксил один глюк там.
Прикрепленные файлы
Прикрепленный файл  Textfiles_Manager_And_Updater_api1_2_v2.lua ( 3.44 килобайт ) Кол-во скачиваний: 44
 


Спасибо сказали:
Go to the top of the page
+Quote Post
Rasim
сообщение 22.10.2010, 20:44
Сообщение #8


Абсолютный новичок


Группа: Пользователи
Сообщений: 1
Регистрация: 22.10.2010
Пользователь №: 7 939
Спасибо сказали: 0 раз




Nickolya, Setuper,

Привет confuse.gif
я ниче не понял можеш обьяснит где библиотека, где папка с текстом куда ставит? что делать нефига не понял ну скрипт нужен очень big_smile1.gif
Go to the top of the page
+Quote Post
Nickolya
сообщение 22.10.2010, 22:54
Сообщение #9


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Для 2 апи библиотека находится здесь. Папка указывается относительно корневой папки хаба, по умолчанию в скрипте
Код
sTextFilesPath = "texts"    -- папка с текстовыми файлами
т.е. стандартная папка текстовых файлов. Вроде ничего сложного. Если так нужен скрипт - изучи конфиг и тему повнимательней. А что не получилось и какие ошибки были желательно бы описывать!


Спасибо сказали:
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 19.4.2024, 4:59