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

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

MyDC.ru _ Служебные скрипты [PtokaX] _ Untouchables, Disconnect, Unreg By Kick|ban

Автор: district 8.11.2008, 6:53

Решил выложить три простых скрипта для 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(стоит в самом конце списка)
Скрипт автоматически удаляет регистрацию забаненного пользователя, для поддержания в чистоте списка зарегистрированных. Список команд, на которые реагирует скрипт, корректируется под политику конкретного администратора.

----------------------------------------------------------------------------------------------------------
!UPDATED - см.ниже big_smile.gif

 Untouchables.lua ( 1.15 килобайт ) : 79
 Disconnect.lua ( 1.18 килобайт ) : 115
 UnregByBan.lua ( 1.1 килобайт ) : 81
 

Автор: FallenAngel 8.11.2008, 10:26

Скрипты действвельно заслуживают внимания... Я по поводу поседнего-можно сдеать так,чтоб удалялась регистрация не когда ОП(или Админ) забанит, а когда человек сам себя-то есть после не правильного ввода пароля...(желательно именно после ввода пароля,ибо тут выкладывали скрипт самокика-после этого действия то не надо удалять регу)
ЗЫ_спасибо большое если сможешь написать!;)

Автор: 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

 UnregByBan_.lua ( 1.14 килобайт ) : 28
 Untouchables_.lua ( 2.45 килобайт ) : 34
 

Автор: KING RING 7.1.2009, 11:02

под апи2 beat_brick.gif забацайте=) птока 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 beat_brick.gif забацайте=) птока 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


 Disconnect_0.4.1.1.lua ( 1.27 килобайт ) : 19
 

Автор: Jaska 23.1.2009, 19:15

2 xReal

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, т.е. админов такая комбинация защищает, но простых пользователей нет. вот я и спросил.

в общем будем всё пробовать. спасибо за подсказку :-)

Автор: Jaska 23.1.2009, 21:08

2 xReal

Твоя переделка disconnect.lua отказалась работать.

Вообщем выкладываю свою версию disconnect.lua, не удержался кое что добавил:

1) проверка прав по профилям
2) права можно выдать VIP (по нику или ip) вне зависимости от профиля. VIP будет иметь права выкидывать всех при этом его самого выкинуть нельзя.
3) кое какие моменты подправил (чтобы какой-нить оп не мог выкинуть мастера)

 disconnect.lua ( 1.95 килобайт ) : 24

Автор: Milena 24.5.2009, 10:40

странное дело одного дисконнектит юзера а другого нет(

Автор: district 24.5.2009, 11:59

Вот не думал что такие ископаемые скриптики еще кого-то интересуют и тема еще жива ))
По поводу кика : настолько геморройная штука, что каждый раз проклинаешь того, кто ее вообще придумал, когда приходится иметь с ней дело в кодах crying.gif Дело вот в чем: чтобы полностью блокировать кик, блокировать его нужно в трех функциях-событиях : KickArrival (непостредственно кик), ChatArrival (сообщение всем о прошедшем кике, с указанием причины) и ToArrival ( личка кикнутому, что его-де кикнули, и за что именно).
На то и kick в event'ах, чтобы кодер не дремал...

Автор: Milena 24.5.2009, 13:08

может напишешь скриптик без косяков для 0411 ? )

Автор: district 24.5.2009, 16:05

Такую простую вещь, как скриптик, основанный на одной-единственной стандартной функции, любой уважающий себя админ ПтокаХ-хаба должен уметь писать сам. Пытайся, пиши, пробуй - тем более что есть от чего отталкиваться, код нужно только поправить. В совсем затруднительных случаях - не стесняйся задавать конкретные, сформулированные вопросы, форум тут добротный, помогут.