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

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

MyDC.ru _ Помощь по скриптам для PtokaX _ невыполненные команды в чате

Автор: степашка 13.3.2010, 11:53

здравствуйте. есть скрипт (какой говорить не буду и не знаю как его тут прикрепить, ибо он запрещён правилами, могу только отправить в мыло или скайп, пусть администраторы сами решат судьбу его размещения на данном сайте, мною уважаемом). используется часто для вылова рекламы из ЛС, ибо множество других скриптов всё же не в состоянии справиться с изобретательностью спамеров, нужно человеческое участие в массе случаев, все фильтры предусмотреть нереально. скрипт работает замечательно, однако при запросе несуществующего лога (то есть при выполнении инвалидной команды) пропускает её в чат на всеобщее обозрение. как этого избежать и что там нужно дописать? пытался сделать по аналогии с другими скриптами, в лучшем случае сыпет кучу ошибок или же просто перестаёт работать. сам не справлюсь. спасибо за ответ и за помощь

Автор: Wariner 13.3.2010, 12:33

ну тут естественно надо сказать ай-ай-ай типа нехорошо это xDDD

скрипт в самый конец списка

Код
local tExCmd = {   -- команды исключения
    ["help"] = 1,
}

function ChatArrival(tUser, sData)
    local sData = sData:sub(1,-2)
    local sCmd = sData:match"%b<>%s+[%!%+%-%/%*](%S+)"
    if sCmd and not tExCmd[sCmd] then
        Core.SendToOps("в чат поступила неизвестная (невыполненая) команда!") -- оповещение убирается этой строчкой
        return true
    end
end

PS: всё таки пользовать такие скрипты не хорошо
PPS: не забудь команды исключения прописать, все системные имеется в виду!

Автор: степашка 13.3.2010, 13:55

спасибо за ответ, но я немного не об этом. сейчас я приведу команду, которая проходит в чат, не выполняясь по причине отсутствия самого вызываемого ею лога, и всё станет понятно что это за скрипт )))

пример: [12:44:17] <Cmenawka> !pmlog 2009_10_10

птока пишет такую ошибку: [12:44] Синтакс C:\Program Files\-=ХАБ=-\scripts\Pm-viewer.lua:35: attempt to concatenate a nil value
я так понимаю скрипт не может выполнить операцию ввиду отсутствия запрашиваемого лога.
однако в самом скрипте есть функция сброса невыполненной и прошедешей в чат команды всвязи с неправильным указанием формата времени:

Код
function getFullPMLog(sUser,arg)
    local fdate = GetArg(arg);
    if fdate == nil then
    sUser:SendPM(BotName, "*** Ошибка! Неправильный формат даты! Правильно: гггг_мм_дд")
    return 1
    end
    local msg ="\r\n"..string.rep("«»",25).."\r\n"
    msg = msg .. "\tЛог приватов за число: "..fdate
    msg = msg .."\r\n"..string.rep("«»",25).."\r\n\r\n"
    msg = msg .. loadtext(PM_FOLDER..fdate..".log")
    msg = msg .. "\r\n"..string.rep("«»",25).."\r\n\tКонец лога\r\n"..string.rep("«»",25)
    sUser:SendPM(BotName,msg)
    CollectTrash();    
    return 1    
end

function SendCmdErr(sUser)
    sUser:SendPM(BotName, "*** Ошибка: У Вас нет доступа к данной команде!");
end


вот эту-то функцию я и пытался довольно долго, но безуспешно прикрутить применительно к тому случаю, что я описывал вначале,
хотел сделать чтобы вместо прохождения в чат невыполненой команды поиска лога, запрашивающему (в данном случае это Cmenawka) этот лог высвечивалось бы типа "Лог не найден", а не "<Cmenawka> !pmlog 2009_10_10" в чат

PS апи1 /// PPS насчёт ай-я-яй я понимаю, но к сожалению нереально никакими фильтрами убрать спамеров из привата. они всё более изощрёныеуыееуыееуые

Автор: Nickolya 13.3.2010, 18:20

Надо было указать строку в которой вылетает ошибка, а то так не очень ясно. А 35 строка тут явно не при чем. Если это строка

Код
    msg = msg .. loadtext(PM_FOLDER..fdate..".log")
то попробуй заменить ее на
Код
    msg = msg .. (loadtext(PM_FOLDER..fdate..".log") or "*** Лог отсутствует ***")

Автор: степашка 13.3.2010, 23:20

о май гат! неужели всё так просто? просто надо было дописать что лог отсутствует в скобках! я в полном а__е. а я несколько часов пытался присунуть функции аргументов и прочие захваты всякой хрени... огромное спасибо, теперь всё работате исправно. вот что значит когда профи берутся за дело