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

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

MyDC.ru _ Kорзина _ Помогите Поправить Скрипт

Автор: Cjay 6.4.2009, 16:02

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

Код
ChatArrival = function(user,data)
    local _,_,cmd = data:find("%b<> %p(%w+)")
    if cmd then
        cmd = cmd:lower()
        if cmd and RegCmds[cmd] then
            return Core.SendPmToUser(user,Bot,RegCmds[cmd](user,data,cmd)), true
        end


в общем проблема такова: незарегистрированный юзер при запрете ему привата и чата, может в них писать если будет в начале сообщения писать например +r или :S или !хз и т.д.
как я понимаю проблема с захватом регулярных выражений, но что-то у меня с этими самыми выражениями проблемно. Помогите кому не трудно поправить скрипт, чтоб он и сообщения начинающиеся со знаков пунктуации запрещал...

 regme.lua ( 9.96 килобайт ) : 10
 

Автор: Setuper 6.4.2009, 16:35

Код
ChatArrival = function(user,data)
  local _,_,cmd = data:find("%b<> %p(%w+)")
  if cmd then
    cmd = cmd:lower()
    if cmd and RegCmds[cmd] then
      return Core.SendPmToUser(user,Bot,RegCmds[cmd](user,data,cmd)), true
    end
    if RegChat and user.iProfile == -1 then
      return true
    end
  else

Автор: Cjay 6.4.2009, 16:47

о всё сам затупил немного) спасибо работает всё feel_good.gif

Автор: Cjay 19.4.2009, 11:17

ребят, возникла еще одна проблемка, у меня на хабе стоит скрипт который показывает из какой сети юзер в описании, поэтому решил запретить у себя регать ники типа [inet]NICK или (сеть)Ник и т.д. зачем искажать ники префиксами...
но вот один запрет скобок и тому подобного не помогает, убирают скобки, делают ник типа inetNick и регаются, поэтому решил вписать в запрещенные символы наиболее встречающиеся аббревиатуры еще, у нас это: ws, oks, inet, mks и т.д.
добавлял и %[wW%]%[sS%] и WS в общем по разному, результат один...заходит человек под ником бесёнок и не может зарегаться, я так понимаю потому что у него в нике есть буквы: о, к, с
как сделать так чтобы скрипт реагировал не на отдельные символы, а на слова?
так вопрос снят, я зачем то писал проценты надо было [wW][sS]
но теперь возникла другая проблема когда

Код
nick:find("[%c\$\|\<\>\:\?\*\"\/\\\+\!\%[\%]\{\}\=\;\(\)\%\^\&\`\~\№\'\[оО][кК][сС]]") then

всё работает захожу я с ником NickОкС и мне не дает регаться, а когда
Код
nick:find("[%c\$\|\<\>\:\?\*\"\/\\\+\!\%[\%]\{\}\=\;\(\)\%\^\&\`\~\№\'\[оО][кК][сС]\[мМ][кК][сС]\[oO][kK][cC]\[mM][kK][sS]\[mM][kK][cC]\[wW][sS]\[dD][oO][mM]\[дД][оО][мМ]\[oO][mM][kK][cC]\[oO][kK][sS]\[iI][nN][eE][tT]\[iI][nN][tT][eE][rR][nN][eE][tT]\[sS][iI][bB]\[wW][eE][bB][sS][tT][rR][eE][aA][mM]\[mM][nN][xX]]") then

не хочет работать, регает такой ник всёравно...в чем причина?
часть скрипта:
Код
RegCmds = {
    regme = function(user,data,cmd)
        if user then
            local nick = user.sNick
            if user.iProfile ~= -1 then
                return "Не глупите, "..nick..", вы уже зарегистрированы!"
            elseif Core.GetUserAllData(user) then
                local _,_,pwd = data:find("%b<> %p%w+ (%S+)|$")
                if pwd then
                    if nick:find("[%c\$\|\<\>\:\?\*\"\/\\\+\!\%[\%]\{\}\=\;\(\)\%\^\&\`\~\№\'\[оО][кК][сС]\[мМ][кК][сС]\[oO][kK][cC]\[mM][kK][sS]\[mM][kK][cC]\[wW][sS]]") then
                        return "Ваш ник содержит недопустимые символы. На хабе запрещены ники, содержащие знаки пунктуации, в том числе (,),[,]  и аббревиатуры: окс, мкс, okc, mks, mkc, ws, dom.ru, omkc, oks, inet, internet, sib, webstream, так как название сети автоматически отображается в описании юзера. "..
                        "Пожалуйста, переименуйтесь. Чтобы переименовать ник только на этом хабе добавьте хаб в избранные и затем, нажмите ctrl+f и впишите в свойства хаба свой ник, после чего перезайдите на хаб. Или же обратитесь к операторам хаба за помощью"
                    end
                    if pwd:find("[%c\$\|\<\>\:\?\*\"\/\\\+\!\%[\%]\{\}\=\;\(\)\%\^\&\`\~\№\,]") then
                        return "Ваш пароль содержит недопустимые символы. Разрешены русские и английские буквы, и цифры. Запрещены пунктуационные знаки. "..
                        "Пожалуйста выберите новый пароль."
                    end

прошу помощи)