Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Служебные скрипты [PtokaX] _ Chase_cmd

Автор: OtshelnikFm 23.3.2009, 23:39

Chase_Cmd_v.1.0.

Перенес в готовые скрипты т.к. никто не захотел больше.
На авторство никак не претендую.

Скрипт перехватывает команды которые используют юзеры на хабе. Информация приходит к тому чей ник прописан в скрипте.

Перехватывать команды которые посылают юзеры удобно вот по какой причине:
1. Администрация видит если юзер пытается отправить запрещенные ему команды (или неизвестные)
2. Ну и конечно же чтобы в какой-то мере представлять какие скрипты нравятся пользователям.

Api 2

 Chase_Cmd_v.1.0.lua ( 866 байт ) : 250
 

Автор: Соколов Алексей 25.3.2009, 11:56

API какой?

Автор: Setuper 25.3.2009, 12:11

Автору просьба оформить тему подобающим образом.
Посмотри правила оформления тем!

Автор: DrakonSP 24.1.2010, 17:14

А за что отвечает вот эта часть функции?

Код
        else
            local hFile = io.open ("log.txt" , "a+")
                if hFile then
                    hFile:write("Послана команда хабу: "..sData.."\r\n")
                    hFile:close()
                end

Чё то ни как не врублюсь...

Автор: Wariner 24.1.2010, 19:26

этот кусок отвечает за запись найденной команды в лог.

Автор: DrakonSP 24.1.2010, 21:06

Цитата(Wariner @ 24.1.2010, 19:26) *
этот кусок отвечает за запись найденной команды в лог.

Тогда вопрос такой...
Где этот лог?
Я лично ничего не обнаружил =)
Может надо добавить строчку типа...
hFile = path.."log.txt"
Если я туплю пните меня!

P.S. Файл log.txt в директории scripts создавать пробовал, но он оставался пустым.
Скрипт стоит в самом верху, т.к. иначе он не отлавливает команды скриптов, которые стоят выше него.
Идеи?

Автор: Wariner 24.1.2010, 21:17

посмотреть этот файл в папке с экзешником птоки))))

а вообще немного подредактировал))) вот:

Раскрывающийся текст

Код
local sBot = SetMan.GetString(21) -- имя бота
local sAdminNick = "Otshelnik-Fм" -- пишем ник хозяина хаба
local sFile = Core.GetPtokaXPath().."scripts/Hub files/CmdLog.txt"        

function ChatArrival(tUser,sData)
    local sData = sData:sub(1,-2)
    local sCmd = sData:match"%b<>%s+([%!%+%-/%*]%S+)"
    if sCmd and tUser.sNick~=sAdminNick then
        if Core.GetUser(sAdminNick) then
            Core.SendPmToNick(sAdminNick,sBot,"Послана команда хабу: "..sData)
        else
            local hFile = io.open (sFile , "a+")
            if hFile then
                hFile:write("Послана команда хабу: "..sData.."\r\n")
                hFile:close()
            end
        end
    end
end
ToArrival=ChatArrival


Автор: DrakonSP 24.1.2010, 21:27

Не не пишет лог
Хоть убей
И ошибок нет ни каких doubt.gif
P.S. Рядом exe-шником тоже ничего

Автор: Wariner 24.1.2010, 21:33

мда...
поясняю суть скрипта.
он сканирует каждое написанное в чат сообщение. при нахождении команды он смотрит если админ(ник которого прописан в начале скррипта) на хабе, то посылает ему сообщение, если нет, то пишет в лог.

PS: папочку прописаную в скрипте создать наверно забыл?

Автор: DrakonSP 24.1.2010, 21:51

Цитата
PS: папочку прописаную в скрипте создать наверно забыл?

Нет не забыл даже файл создал =)
Вообщем действительно, если Админ отсутствует то пишет в лог
А правильно я переправил скрипт что бы он и туда и туда вообщем информировал?
Тыкай =))
Код
local sBot = SetMan.GetString(21)                    -- Ник Бота
local sAdminNick = "DrakonSP"                        -- Ник Админа
local sFile = Core.GetPtokaXPath().."scripts/Chase_Cmd/CmdLog.txt"    -- Путь к файлу лога

function ChatArrival(tUser,sData)
    local sData = sData:sub(1,-2)
    local sCmd = sData:match"%b<>%s+([%!%+%-/%*]%S+)"
    if sCmd and tUser.sNick~=sAdminNick then
        if Core.GetUser(sAdminNick) then
            Core.SendToNick(sAdminNick,"<"..sBot.."> Послана команда хабу: "..sData)
        end
    local hFile = io.open (sFile , "a+")
        if hFile then
            hFile:write("Послана команда хабу: "..sData.."\r\n")
            hFile:close()
        end
    end
end
ToArrival=ChatArrival

И какой код времени? Хочу что бы ещё время в лог закидывало...

Автор: Wariner 24.1.2010, 22:19

Код
os.date("%Y-%m-%d %H:%M:%S")


Код
%Y - год
%m - месяц
%d  - день
%H - часы
%M - минуты
%S - секунды

Автор: DrakonSP 24.1.2010, 22:40

Цитата(Wariner @ 24.1.2010, 22:19) *
Код
os.date("%Y-%m-%d %H:%M:%S")


А куда её собственно? вписывать?
Всё разобрался =))
Спасибо!

Автор: TiGRpp 16.2.2010, 11:21

Цитата(Wariner @ 24.1.2010, 23:19) *
Код
os.date("%Y-%m-%d %H:%M:%S")

Цитата(DrakonSP @ 24.1.2010, 23:40) *
А куда её собственно? вписывать?

Поделись куда, что-то не получается...

Каким образом добавить меню просмотра лога?

Автор: DrakonSP 16.2.2010, 20:02

Раскрывающийся текст
Код
local sBot = SetMan.GetString(21)                    -- Ник Бота
local sAdminNick = "DrakonSP"                        -- Ник Админа
    
local sFile = Core.GetPtokaXPath().."scripts/Chase_Cmd/CmdLog.txt"    -- Путь к файлу лога

function ChatArrival(tUser,sData)
    local sData = sData:sub(1,-2)
    local sCmd = sData:match"%b<>%s+([%+]%S+)"
    if sCmd and tUser.sNick~=sAdminNick then
        if Core.GetUser(sAdminNick) then
            Core.SendToNick(sAdminNick,"<"..sBot.."> *** Послана команда хабу: "..sData)
        end
    local hFile = io.open (sFile , "a+")
        if hFile then
            hFile:write("["..os.date("%d.%m.%Y в %H:%M").."] "..sData.."\n")
            hFile:close()
        end
    end
end
ToArrival=ChatArrival

Так добавить меню и действие по команде
Раскрывающийся текст
Код
local Prefix = "!"        -- Префикс команды

local tProfile = {        -- Профили, которым доступно меню
    [0] = 1,            -- Master
    [1] = 1,            -- Operator
    [2] = 0,            -- Vip
    [3] = 0,            -- Reg
    [-1] = 0,            -- UnReg
}

function UserConnected(tUser)
    if tProfile[tUser.iProfile] == 1 then
        Core.SendToUser(tUser, "$UserCommand 1 3 Команды хабу\\Лог$<%[mynick]> "..Prefix.."cmdlog|")
end

OpConnected = UserConnected
RegConnected = UserConnected

function ChatArrival(tUser, sData)
    local cmd = sData:match"%b<>%s+(%S+).*|"
    if cmd == ""..Prefix.."cmdlog" then
        Core.SendToUser(tUser,"<"..sBot.."> "..содержимое_текстового_файла)
        return true
    end    
end

А вот как вывести содержимое файла я ещё пока незнаю =))
Может знатоки помогут =))

Автор: Nickolya 16.2.2010, 22:58

Вот, слепил из того что выше.

 CmdsLogger.lua ( 1.73 килобайт ) : 50
 

Автор: TiGRpp 17.2.2010, 2:20

Цитата(Nickolya @ 16.2.2010, 23:58) *
Вот, слепил из того что выше.

Отлично. То, что надо.
Благодарю, Nickolya

Сам добавил имя бота без ключика:
Код
local sBot = "»»»CMD" -- имя бота
.
.
.
function OnStartup()
    Core.RegBot(tbot,"","",false)
end

Автор: DrakonSP 17.2.2010, 21:26

А как настроить так что бы он реагировал только на префикс +
Я не использую другие префиксы и хотелось бы избавиться от всяких не нужных.
Он даже реагирует на =)) (смайл)

Автор: Nickolya 17.2.2010, 22:01

Это уже моя вольность, простите, привычка. Чтобы сделать только + замени следующее

Код
local sCmd = sData:match"^%b<>%s+%p(%S+)"
на
Код
local sCmd = sData:match"^%b<>%s+%+(%S+)"

Автор: TiGRpp 18.2.2010, 0:30

Цитата(Nickolya @ 16.2.2010, 23:58) *
Вот, слепил из того что выше.

Думал с ограничением объема файла справлюсь сам, открыл скрипт История чата, посмотреть как там реализовано, оказалось все не так просто для меня...big_smile.gif

Таким образом опять пришел за помощью:
- ограничить размер файла, если возможно писать отдельный файл на каждый день
- и из меню выводить определенное количество строк...идеально по дате.

Автор: TiGRpp 19.2.2010, 12:17

Цитата(Nickolya @ 17.2.2010, 23:01) *
Это уже моя вольность, простите, привычка. Чтобы сделать только + замени следующее
Код
local sCmd = sData:match"^%b<>%s+%p(%S+)"
на
Код
local sCmd = sData:match"^%b<>%s+%+(%S+)"

Nickolya, а где найти таблицу значений переменных типа - %s %p ...?
Ну вообще, если не сложно, систематизированный (или не очень) перечень ссылок по луа.

Спасибо.

Автор: Wariner 19.2.2010, 12:21

это не переменные! читать здесь http://mydc.ru/topic266.html

Автор: DrakonSP 22.2.2010, 1:06

А добавьте пожалуйста отчистку лога

Автор: DrakonSP 25.2.2010, 22:03

Или что бы сохранялось последние 50 записей к примеру