Автор: 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
я и возвращаю но при условии