Решил выложить три простых скрипта для PtokaX 0.3.6.0 (у меня работают под LUA 5.1.2) как первый свой опыт в скриптописании. Буду благодарен за замечания и предложения. Привожу в последовательности исполнения, в какой стоят у меня.
UNTOUCHABLES (стоит почти в самом верху списка) Скрипт подстраховки от случайных действий оператора: защищенные ники, которые нельзя забанить, плюс дополнительно выбор профиля, к примеру, "VIP", который в принципе забанить нельзя. Буду благодарен, если кто подскажет, как добавить защиту от кика ($Kick)
DISCONNECT Иногда бывает нужно, чтобы юзер просто переподключился на хаб, а до него не докричаться. За основу взят классический пример использования глобальной функции GetItemByName(Nick), взятый вот http://mydc.ru/r/?http://wiki.ptokax.ch/doku.php/scriptinghelp/ptokaxapi#getitembyname_nick У меня стоит где-то посередине списка, перед основным хаб-скриптом (у меня это основательно переработанный Thunder)
UNREG BY BAN(стоит в самом конце списка) Скрипт автоматически удаляет регистрацию забаненного пользователя, для поддержания в чистоте списка зарегистрированных. Список команд, на которые реагирует скрипт, корректируется под политику конкретного администратора.
Скрипты действвельно заслуживают внимания... Я по поводу поседнего-можно сдеать так,чтоб удалялась регистрация не когда ОП(или Админ) забанит, а когда человек сам себя-то есть после не правильного ввода пароля...(желательно именно после ввода пароля,ибо тут выкладывали скрипт самокика-после этого действия то не надо удалять регу) ЗЫ_спасибо большое если сможешь написать!;)
Автор: ustas 8.11.2008, 12:12
Цитата(FallenAngel @ 8.11.2008, 10:26)
Скрипты действвельно заслуживают внимания... Я по поводу поседнего-можно сдеать так,чтоб удалялась регистрация не когда ОП(или Админ) забанит, а когда человек сам себя-то есть после не правильного ввода пароля...(желательно именно после ввода пароля,ибо тут выкладывали скрипт самокика-после этого действия то не надо удалять регу) ЗЫ_спасибо большое если сможешь написать!;)
кто-нить зайдет под чужим ником, три раза введет не правильный пароль, пароль сбросится и можно снова регить этот ник. Какой тогда будет смысл от регистрации??
to District: спасибо, попробую
Автор: district 8.11.2008, 13:01
Ммм, как сделать так, чтобы скрипт лазил в BanList.xml, сравнивал его содержимое с RegisteredUsers.xml, условием этого сравнения было бы вот это:
Цитата
<Reason>3x bad password for nick <nick></Reason>
а потом менял содержимое в RegisteredUsers.xml - тут, что называется, могу только "развести руками". Тонкость еще и в том, что за троекратный неправильный пароль Птока банит по IP, а не по нику, по крайней мере, у меня так. Это ставит под сомнение сам смысл удаления зарегистрированного ника.
А о том, может ли в принципе скрипт генерировать встроенную команду Птоки, подлежащую выполнению Птокой так же, как если бы команда была подана от админ-клиента, я и сам надеюсь услышать тут ответ, от знающих людей.
Автор: Wariner 8.11.2008, 16:19
Цитата(district @ 8.11.2008, 6:53)
как добавить защиту от кика ($Kick)
Посмотри вот этот скрипт http://mydc.ru/topic568.html в нём использована функция
Код
KickArrival(tUser, sData)
и этим решена проблема)))
Автор: district 8.11.2008, 17:39
Wariner
Цитата
и этим решена проблема)))
О, спасибо)))) Так и знал, что решение на поверхности, но за неделю активного вникания в тему глаз настолько замылился, что и очевидные ивенты API уже узреть не смог ))))) --------------------------------------------------------------------------------------------- Благодаря подсказке, скрипт доведен до ума. Запрещенные в отношении "неприкасаемых" команды вынесены в таблицу, в таблицу же вынесены неприкасаемые профили. Добавлена защита от Кика. Отдельно приписана команда, используемая в скрипте Hostbans - +nickhostban, а сам скрипт Hostbans расположен в списке непосредственно следом за Untouchables.
Немного изменен (тоже добавлена таблица действующих команд) и скрипт UnregByBan
под апи2 забацайте=) птока 0.4.1.1 мне нужен только DISCONNECT =)
Автор: xReal 23.1.2009, 16:40
Цитата(district @ 8.11.2008, 21:39)
Untouchables.lua - Благодаря подсказке, скрипт доведен до ума.
Что-то я не пойму как он доведен до ума? вот этот код мне не даёт покоя:
Код
function KickArrival(user,data) data=string.sub(data,1,string.len(data)-1) _,_,nick = string.find( data, "%p%S+%s(%S+)") if nick then if Untouchable[nick] == 1 then user:SendData(Bot, "*** Пользователь "..nick.." в списке неприкасаемых, команда не может быть применена! ") return 1 end end end
только вот я непойму, как же он защищает от кика??? командой return 1 ??? :-)
На собственном опыте проверено: это ни как не защищает. Может быть кто-нибудь мне объяснит??? где тут защита, ведь функция возвращает 1, т.е. получается он выполнила своё предназначение? или как?
Цитата(KING RING @ 7.1.2009, 15:02)
под апи2 забацайте=) птока 0.4.1.1 мне нужен только DISCONNECT =)
тебе всё еще нужен для птоки 0.4.1.1? вот на скорую руку сделал - в теории должно работать :-) (как тут выкладывать файл не знаю, поэтому выкладываю код)
Код
Bot = SetMan.GetString(21) -- или можно так -- Bot = SetMan.GetHubBot()
OpConnected = function(user, data) Core.SendToUser (user, "$UserCommand 1 3 Дисконнект\\Дисконнект этого юзера$<%[mynick]> !disc %[nick]|") end
function ChatArrival (user, data) data = string.sub (data,1,string.len(data)-1) local _,_,cmd = string.find (data, "%b<>%s+(%S+)") if cmd == "!disc" then if user.bOperator then local _,_,nick = string.find (data, "%b<>%s+%S+%s+(%S+)") if nick then local usr = Core.GetUser (nick) -- get the object if usr then -- if online Core.SendToOps ('<'..Bot.sNick..'> *** Юзер '..nick..' был отключен. Отключил: '..RegMan.GetRegsByProfile (user.iProfile)..' '..user.sNick..'.') Core.Disconnect (usr) else Core.SendToUser(user, '<'..Bot.sNick..'> *** Юзер '..nick..' не на хабе.') end end else Core.SendToUser(user, '<'..Bot.sNick..'> *** Извините, у вас нет права использовать эту команду.') end return true end end
KickArrival(tUser, sData) - Incoming kick command from user. If script return true hub don't process data. см. пост свята http://mydc.ru/topic118.html?hl=%F4%F3%ED%EA%F6%E8%E8+PtokaX
CODE
function KickArrival(tUser, sData) local sData = sData:sub(1,-2) local _,_,sNick = sData:find("$Kick%s+(%S+)") if sNick == "Jaska" then Core.SendToUser(tUser,"Нельзя!") return true end end
проверь на 0.4.1 и на забудь ник сменить)
Автор: xReal 23.1.2009, 19:39
Цитата(Jaska @ 23.1.2009, 23:15)
2 xReal If script return true hub don't process data.
Это круто! Спасибо за указание :-) Видимо не углядел :-) НО! Всё же! у меня такой скрипт (с вышесказанным "исправлением". т.е. если тру - то не выполняет кик) работает на 0.4.1.1 и толку 50 на 50, т.е. админов такая комбинация защищает, но простых пользователей нет. вот я и спросил.
в общем будем всё пробовать. спасибо за подсказку :-)
Вообщем выкладываю свою версию disconnect.lua, не удержался кое что добавил:
1) проверка прав по профилям 2) права можно выдать VIP (по нику или ip) вне зависимости от профиля. VIP будет иметь права выкидывать всех при этом его самого выкинуть нельзя. 3) кое какие моменты подправил (чтобы какой-нить оп не мог выкинуть мастера)
странное дело одного дисконнектит юзера а другого нет(
Автор: district 24.5.2009, 11:59
Вот не думал что такие ископаемые скриптики еще кого-то интересуют и тема еще жива )) По поводу кика : настолько геморройная штука, что каждый раз проклинаешь того, кто ее вообще придумал, когда приходится иметь с ней дело в кодах Дело вот в чем: чтобы полностью блокировать кик, блокировать его нужно в трех функциях-событиях : KickArrival (непостредственно кик), ChatArrival (сообщение всем о прошедшем кике, с указанием причины) и ToArrival ( личка кикнутому, что его-де кикнули, и за что именно). На то и kick в event'ах, чтобы кодер не дремал...
Автор: Milena 24.5.2009, 13:08
может напишешь скриптик без косяков для 0411 ? )
Автор: district 24.5.2009, 16:05
Такую простую вещь, как скриптик, основанный на одной-единственной стандартной функции, любой уважающий себя админ ПтокаХ-хаба должен уметь писать сам. Пытайся, пиши, пробуй - тем более что есть от чего отталкиваться, код нужно только поправить. В совсем затруднительных случаях - не стесняйся задавать конкретные, сформулированные вопросы, форум тут добротный, помогут.