Версия для печати темы
MyDC.ru _ Служебные скрипты [PtokaX] _ Chase_cmd
Автор: OtshelnikFm 23.3.2009, 23:39
Chase_Cmd_v.1.0.
Перенес в готовые скрипты т.к. никто не захотел больше.
На авторство никак не претендую.
Скрипт перехватывает команды которые используют юзеры на хабе. Информация приходит к тому чей ник прописан в скрипте.
Перехватывать команды которые посылают юзеры удобно вот по какой причине:
1. Администрация видит если юзер пытается отправить запрещенные ему команды (или неизвестные)
2. Ну и конечно же чтобы в какой-то мере представлять какие скрипты нравятся пользователям.
Api 2
Автор: Соколов Алексей 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
Не не пишет лог
Хоть убей
И ошибок нет ни каких
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
Вот, слепил из того что выше.
Автор: 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)
Вот, слепил из того что выше.
Думал с ограничением объема файла справлюсь сам, открыл скрипт История чата, посмотреть как там реализовано, оказалось все не так просто для меня...
Таким образом опять пришел за помощью:
- ограничить размер файла, если возможно писать отдельный файл на каждый день
- и из меню выводить определенное количество строк...идеально по дате.
Автор: 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 записей к примеру