Словить 3ий аргумент в lua..., Помогите дописать... |
Здравствуйте, гость ( Вход | Регистрация )
Словить 3ий аргумент в lua..., Помогите дописать... |
5.8.2009, 17:19
Сообщение
#1
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Всем привет!
Пытаюсь словить данные из ячейки меню: Код Core.SendToNick(tUser.sNick, "$UserCommand 1 2 "..MenuWay..""..OpMenuW..""..OpMenuB.."Банить$<%[mynick]> !ban %[nick] %[line: причина бана:]|") Ловлю так: Код function ChatArrival(tUser,sData) sData = string.sub(sData,1,-2) local _,_,cmd =string.find(sData, "%b<>%s+(%S+)") local user = tUser.sNick local _,_,CursorUser = string.find(sData, "%b<>%s+%S+%s+(%S+)") local _,_,CursorReason = string.find(sData, ??????????????????????????????) if ( cmd == "!ban" ) then Core.SendToAll("<"..BotName.."> Пользователь "..CursorUser.." навсегда лишен права доступа на хаб по причине: "..CursorReason..". Наказал: "..user.."") end end Вот там где вопросики что надо? Не могу словить причину бана. Не подскажете? Заранее спасибо... Пишу по идее на API2 для PtokaX 0.4.1. |
|
|
5.8.2009, 17:53
Сообщение
#2
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код function ChatArrival(tUser, sData)
sData = sData:sub(1, -2) local sCmd, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%S+)%s+(.+)" if sCmd and sCmd == "!ban" then Core.SendToAll("<"..BotName.."> Пользователь "..sNick.." навсегда лишен права доступа на хаб по причине: "..sReason..". Наказал: "..tUser.sNick) end end |
|
|
5.8.2009, 19:12
Сообщение
#3
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Спасибо, но теперь новая трабла.
Теперь сообщение кидается в чат нормально, но при этом НЕ выполняется команда. Т.е. стандартная !ban <nick> <reason> Что делать? Хотя спасибо большое - я бан функциями напишу Ыыыыыы......... )))) вот опять проблема... Что не так? Пишет что не знает такой функции как бан... Что делать? Код function ChatArrival(tUser, sData) sData = sData:sub(1,-2) local sCmd, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%S+)%s+(.+)" if sCmd and sCmd == "!ban" then Core.SendToAll("<"..BotName.."> Ïîëüçîâàòåëü "..sNick.." íàâñåãäà ëèøåí ïðàâà äîñòóïà íà õàá ïî ïðè÷èíå: "..sReason..". Íàêàçàë: "..tUser.sNick) Core.Ban(sNick,sReason,tUser.sNick,1) return true end end ошибка: [19:05] Синтаксис E:\Server\hub\scripts\Романтик хаб меню.lua:50: attempt to call field 'Ban' (a nil value) |
|
|
5.8.2009, 20:18
Сообщение
#4
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код BanMan.Ban(sNick, sReason, tUser.sNick, true)
|
|
|
6.8.2009, 0:53
Сообщение
#5
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Спасибо большое! Пока все получается, только вот одна мелочь....
Извините пожалуйста, а не подскажите как узнать ip юзера, если есть его ник и подразумивается, что он в данный момент на хабе? Т.е. Мне надо создать переменныую с ip адресом определенного ника... Заранее спасибо! |
|
|
6.8.2009, 1:07
Сообщение
#6
|
|
Освоившийся участник Группа: Администраторы Сообщений: 344 Регистрация: 2.6.2008 Из: RB,Ufa Пользователь №: 8 Спасибо сказали: 106 раз |
local tUser = Core.GetUser(sNick)
local sIP = tUser.sIP а вообще с птокой идет scripting-interface.txt почитай много полезного найдешь. |
|
|
6.8.2009, 1:30
Сообщение
#7
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Блин... Скажите мне пожалуйста вот последнее и я от вас отстану!
Так я ловлю 3 параметра local sCmd, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%S+)%s+(.+)" А если после ника еще ip будет передаваться, то как тогда? Заранее спасибо. Не так случайно? local sCmd, sIP, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%S+)%s+(%S+)%s+(.+)" |
|
|
6.8.2009, 2:03
Сообщение
#8
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Цитата как узнать ip юзера, если есть его ник и подразумивается, что он в данный момент на хабе? вот с чем-чем, а с этим никаких проблем. способов тысяча и один. Нужно получить табличного юзера и его tUser.sIP ( поле sIP таблицы tUser) Онлайн юзера-таблицу можно получить например так : Код local tUser = Core.GetUser(tUser.sNick,true) Цитата Не так случайно? local sCmd, sIP, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%S+)%s+(%S+)%s+(.+) Сколько переменных получаем, столько должно быть и живых захватов (в круглых скобках). Если команда железно будет придерживаться этой структуры, то все правильно. А если возможны варианты ( например, IP может передаваться, а может и нет) - то, если его не будет, вся последующая структура захватов будет порушена, тут нужна более тонкая работа с захватами. |
|
|
6.8.2009, 10:45
Сообщение
#9
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
2Win32: Почитай тему: http://mydc.ru/topic266.html
|
|
|
8.8.2009, 0:51
Сообщение
#10
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Ребят, извините пожалуйста, но ничего не могу в той теме понять, хотя не настолько далёк от этого, знаю PHP...
Я хочу сказать, что я не ламер, которому просто надо скрипт поставить. Хочу обучить Lua! Без вашей помощи никак ;) Объясните пожалуйста, как на моём примере словить 4 переменных. Заранее спасибо ) |
|
|
8.8.2009, 10:15
Сообщение
#11
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ты всё правильно написал.
Код local sCmd, sIP, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%S+)%s+(%S+)%s+(.+) Данное регулярное выражение в методе будет действовать следующим образом: %b<> - поиск в строке символов <> (не обязательно подряд идущих) - обрезание ника %s+ - 1 или более пробельных символов (%S+) - захват одного или более не пробельных символа и запись в переменную sCmd %s+ - опять 1 или более пробельных символов (%S+) - захват одного или более не пробельных символа и запись в переменную sIP %s+ - опять 1 или более пробельных символов (%S+) - захват одного или более не пробельных символа и запись в переменную sNick %s+ - опять 1 или более пробельных символов (.+) - захват всего оставшегося, то есть захват любого символа или символов (минимум 1 символ) Однако, чтобы пользователь наверняка вводил ip адрес, лучше написать так: Код local sCmd, sIP, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%d+%.%d+%.%d+%.%d+)%s+(%S+)%s+(.+)
|
|
|
8.8.2009, 16:19
Сообщение
#12
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Ээээ.... Ну да. Только проблема вот в чем:
Код local sCmd, sIP, sNick, sReason = sData:match"%b<>%s+(%S+)%s+(%d+%.%d+%.%d+%.%d+)%s+(%S+)%s+(.+)" if sCmd and sCmd == "!banip" then if ( tUser.iProfile == 0 or tUser.iProfile == 1 ) then if Core.GetUser(sNick) == nil then Core.SendToNick(tUser.sNick,"<"..BotName.."> Ïîëüçîâàòåëÿ ñ òàêèì íèêîì íåò â ñïèñêå þçåðîâ... ×òîáû çàáëîêèðîâàòü äàííûé íèê âîñïîëüçóéòåñü ìåíþ \"Âðåìåííî áàíèòü îïðåäåëåííûé ip àäðåñ ïîëüçîâàòåëÿ\"") else Core.SendToAll("<"..BotName.."> Ïîëüçîâàòåëü "..sNick.." ñ ip: "..sIP.." íàâñåãäà ëèøåí ïðàâà äîñòóïà íà õàá ïî ïðè÷èíå: "..sReason..". Íàêàçàë: "..tUser.sNick) Core.SendPmToNick(sNick,BotName,"Âû áûëè íàâñåãäà ëèøåíû ïðàâà äîñòóïà íà \"Ðîìàíòèê\" õàá ïî ïðè÷èíå: "..sReason..". Íàêàçàë: "..tUser.sNick) Core.SendPmToOps(BotName, "Ïîëüçîâàòåëü "..sNick.." ñ ip: "..sIP.." íàâñåãäà ëèøåí ïðàâà äîñòóïà íà õàá ïî ïðè÷èíå: "..sReason..". Íàêàçàë: "..tUser.sNick) BanMan.Ban(sIP, sReason, tUser.sNick, 0) end else Core.SendToNick(tUser.sNick,"<"..BotName.."> Íå äîñòàòî÷íî ïðàâ äëÿ èñïîëüçîâàíèÿ ýòîé êîìàíäû...") end return true end получаю следующую ошибку: [16:16] Синтаксис E:\Server\hub\scripts\Романтик хаб меню.lua:79: bad argument #1 to 'Ban' (table expected, got string) IP, а чем ip должен быть как не строкой? Извините за кодировку. |
|
|
8.8.2009, 16:41
Сообщение
#13
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Учись работать с описаниями функций.
Выдержка из файла scripting-interface.txt: Цитата Ban(tUser, sReason, sBy, bFull) - Perm ban user. Return nil when failed, true if success. BanIP(sIP, sReason, sBy, bFull) - Perm ban given ip. Return nil when failed, true if success. Поэтому должно быть так: Код BanMan.BanIP(sIP, sReason, tUser.sNick, 0) В случае же использования функции Ban нужно ставить не ip, а таблицу пользователя! P.S. bad argument #1 to 'Ban' (table expected, got string) - переводится так: в первом аргументе функции 'Ban' ожидается таблица, а туда подставляется строка. |
|
|
8.8.2009, 17:20
Сообщение
#14
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Ой. Извините. У меня в описаниях функций нет функции. BanIP :(
Спасибо большое ) А вот еще аопросик. Функиця BanIP() банит, но не отключает рользователя. Это ошибка или это так задумано? И как осуществить отключение? Заранее спасибо. |
|
|
8.8.2009, 18:40
Сообщение
#15
|
|
Освоившийся участник Группа: Администраторы Сообщений: 344 Регистрация: 2.6.2008 Из: RB,Ufa Пользователь №: 8 Спасибо сказали: 106 раз |
Если бы была ошибка, PtokaX тебе бы об этом сообщила это первое, и второе, обратимся опять таки к scripting-interface: Return nil when failed, true if success. Если у нас забанило значит функция вернула true. Тоесть все верно. Чтобы отключить пользователя нужно воспользоваться:
Core.Disconnect(sNick) - Disconnect user with given nick. Return nil when failed, true when success. Core.Disconnect(tUser) - Disconnect user. Return nil when failed, true when success. Опять таки scripting-interface не читаешь! Там ведь все есть все на доступном английском. |
|
|
8.8.2009, 19:16
Сообщение
#16
|
|
Начинающий Группа: Пользователи Сообщений: 11 Регистрация: 3.7.2009 Пользователь №: 3 771 Спасибо сказали: 0 раз |
Всё. Спасибо большое. Разобрался во всём!
Еще раз спасибо! |
|
|
|
Сейчас: 23.11.2024, 1:34 |