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

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

MyDC.ru _ VerliHub _ Фильтр команды

Автор: foXDEvil 5.10.2010, 13:33

Вот начал писать скрипт и застрял на пустяках :(

Код
botname = "R[Bot]"

function VH_OnUserCommand(sNick, sCmd)
    if (string.find(sCmd, "+msgsend")) then
        if (string.find(sCmd, "+msgsend R[Bot]")) or
            (string.find(sCmd, "+msgsend VerliHub")) or
            (string.find(sCmd, "+msgsend R[Rofl]")) or
            (string.find(sCmd, "+msgsend ПОСЛЕДНИЕ НОВОСТИ")) or
            (string.find(sCmd, "+msgsend Реклама")) or
            (string.find(sCmd, "+msgsend OpChat")) or
            (string.find(sCmd, "+msgsend #Games")) or
            (string.find(sCmd, "+msgsend #Warcraft")) or
            (string.find(sCmd, "+msgsend MOTD")) or
            (string.find(sCmd, "+msgsend SystemVersion")) then
            VH:SendDataToUser("<"..botname.."> Баловаться не хорошо :-P ", sNick) else
            return 1
        --VH:SendDataToUser("<"..botname.."> ЫЫ ", sNick)
        end
    end
return 1
end

Скипт не видит ники R[Bot] и R[Rofl]
и ещё проблема с return 1 если ставить в конце то хаб выдаёт
[15:00:25] <R[Bot]> Баловаться не хорошо
[15:00:25] <R[Bot]> Unknown command '+msgsend VerliHub' try +help

если в конец функции не ставить до хаб перестаёт видеть другие команды((((

Подскажите плиз!



Спасибо всем кто помог :-)

Код
botname = "R[Bot]"
function VH_OnUserCommand(sNick, sCmd)
    if (string.find(sCmd, "+msgsend")) then
        if (string.find(sCmd, "+msgsend R[Bot]", 1, true)) or
            (string.find(sCmd, "+msgsend VerliHub", 1, true)) or
            (string.find(sCmd, "+msgsend R[Rofl]", 1, true)) or
            (string.find(sCmd, "+msgsend ПОСЛЕДНИЕ НОВОСТИ", 1, true)) or
            (string.find(sCmd, "+msgsend Реклама", 1, true)) or
            (string.find(sCmd, "+msgsend OpChat", 1, true)) or
            (string.find(sCmd, "+msgsend #Games", 1, true)) or
            (string.find(sCmd, "+msgsend #Warcraft", 1, true)) or
            (string.find(sCmd, "+msgsend MOTD", 1, true)) or
            (string.find(sCmd, "+msgsend SystemVersion", 1, true)) then
            VH:SendDataToUser("<"..botname.."> Баловаться не хорошо :-P ", sNick) else
        end
    end
    if (string.find(sCmd, "+msgsend")) then else return 1 end
end


Может есть более лучший вариант???

Автор: alex82 5.10.2010, 16:02

Во-первых, в первом аргументе функции find (также как match и gsub) необходимо экранировать знаком процента символы +-*?[]()^$.

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

Автор: foXDEvil 5.10.2010, 16:06

это не неизвестная команда. Прочитай внимательнее название темы "Фильтр..." скрипт пропускает через себя команду чтобы пользователь не мог использовать плагин messeger на каком либо боте хаба т.к. если использование плагина на боте приводит к остановке хаба

Автор: Ksan 5.10.2010, 16:33

1. foXDEvil, мне кажется, в твоем окончательном примере не хватает

Код
return true
или
Код
return 1
(просто я точно не знаю, как правильно для Верли) Это после строки:
Код
VH:SendDataToUser("<"..botname.."> Баловаться не хорошо :-P ", sNick) else

2. И не вижу необходимости в строке:
Код
if (string.find(sCmd, "+msgsend")) then else return 1 end

А если я не прав, думаю, alex82 быстро меня поправит...

Автор: foXDEvil 5.10.2010, 16:35

return там действительно не хватает упустил а вот последняя строка для того чтобы не было вот так
[15:00:25] <R[Bot]> Баловаться не хорошо
[15:00:25] <R[Bot]> Unknown command '+msgsend VerliHub' try +help

Автор: Ksan 5.10.2010, 16:40

Может, тогда достаточно поставить

Код
return 1
сразу после этих строк:
Код
            VH:SendDataToUser("<"..botname.."> Баловаться не хорошо :-P ", sNick) else
        end
и всё?
И без строки:
Код
if (string.find(sCmd, "+msgsend")) then else return 1 end

Автор: foXDEvil 5.10.2010, 16:47

тогда смысл в скипте отпадает так как он полностью перестаёт работать


Код
botname = "R[Bot]"

String2Lower = function(s)
  for i = 192, 223 do
    s = s:gsub(_G.string.char(i), _G.string.char(i + 32))
  end
  s = s:gsub(_G.string.char(168), _G.string.char(184))
  return s:lower()
end

function VH_OnUserCommand(sNick, sCmd)
sCmd = String2Lower(sCmd)
    if (string.find(sCmd, "+msgsend")) then
        if  (string.find(sCmd, "+msgsend r[bot]", 1, true)) or
            (string.find(sCmd, "+msgsend verlihub", 1, true)) or
            (string.find(sCmd, "+msgsend r[rofl]", 1, true)) or
            (string.find(sCmd, "+msgsend последние новости", 1, true)) or
            (string.find(sCmd, "+msgsend реклама", 1, true)) or
            (string.find(sCmd, "+msgsend opchat", 1, true)) or
            (string.find(sCmd, "+msgsend #games", 1, true)) or
            (string.find(sCmd, "+msgsend #warcraft", 1, true)) or
            (string.find(sCmd, "+msgsend motd", 1, true)) or
            (string.find(sCmd, "+msgsend SystemVersion", 1, true)) then
            VH:SendDataToUser("<"..botname.."> Баловаться не хорошо :-P ", sNick) else
        end
    end
    if (string.find(sCmd, "+msgsend")) then VH:SendDataToUser("<"..botname.."> Баловаться не хорошо :-P ", sNick) else return 1 end
end

приделав функцию скрипт вообще перестал работать (((((

Автор: Ksan 5.10.2010, 19:07

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

Автор: foXDEvil 5.10.2010, 19:48

потому что, то что ты писал мне я уже ранее пробовал и твои варианты не работают правильно

Автор: Vizunchik 6.10.2010, 17:20

foXDEvil
В скиптах верлика всегда ретурон должен возвращаться в однёрке вот что тебе пытается объяснить Ksan

Автор: Ksan 6.10.2010, 19:54

Да не про то, но фиг с ним...

Автор: foXDEvil 7.10.2010, 6:00

Цитата(Vizunchik @ 6.10.2010, 19:20) *
foXDEvil
В скиптах верлика всегда ретурон должен возвращаться в однёрке вот что тебе пытается объяснить Ksan

я и возвращаю но при условии