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

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

MyDC.ru _ Технические вопросы по PtokaX _ Список пользователей

Автор: fmit 26.1.2012, 10:54

Добрый день.Искал,но увы.Как сделать чтобы избранные пользователи всегда были вверху списка?

Автор: Ksan 26.1.2012, 11:30

Это делает клиент, а не хаб.
И то, если в настройках клиента имеется галочка "Избранных юзеров показывать первыми".
(первыми - в смысле после админов)
Не во всех клиентах есть. Поизучай настройки своего.

Автор: fmit 26.1.2012, 12:18

ну я так понял что к админам это тоже относится ) ясно.

а еще такой вот вопрос. как сделать обязательный префикс в никах пользователей,чтобы ни давал зарегиться или зайти на хаб пока не будет приставка к имени определенная??? очень надо )

Автор: Артём 26.1.2012, 12:39

fmit, http://mydc.ru/topic1947.html?

Автор: Ksan 26.1.2012, 12:41

Ну и какой префикс там у тебя требуется?

Автор: fmit 26.1.2012, 12:51

Цитата(Артём @ 26.1.2012, 13:39) *
fmit, http://mydc.ru/topic1947.html?

Да это я видел,настроил для дипазонов,но не то.

Хочу разделить пользователей по типу подключения [ADSL] [FTTB]. На билайне такое реализовано, там указывается районперед началом ника.
Нужно чтобы просто была обязательная приставка перед регистрацией, и ему не давали зарегиться пока он не укажет.

Автор: Ksan 26.1.2012, 13:03

fmit, попробуй этот скриптик:

Код
КОД УДАЛЁН ввиду нерабочести.
Рабочий код ниже в моих сообщениях.
Только тут уже самим юзерам решать, какой префикс себе брать.
А если хочешь автоматом, сюда надо добавить код определения диапазонов ваших ADSL и FTTN.

PS: Код не проверял, проверь сам и напиши тут результат, если надо, исправим.

UPD: Проверил и чуток исправил, должен работать.

Автор: fmit 26.1.2012, 13:18

извиняюсь что немного не догоняю,код который выше мне надо заюзать в скрипте регистрации?

Автор: Ksan 26.1.2012, 13:24

fmit, сохраняешь как отдельный скрипт, даёшь ему название и запускаешь.
Он сработает раньше регистрации и просто не допустит на хаб никого, у кого нет одного из предложенных префиксов.
Тебе же это требовалось?

Автор: fmit 26.1.2012, 13:31

Цитата(Ksan @ 26.1.2012, 14:24) *
fmit, сохраняешь как отдельный скрипт, даёшь ему название и запускаешь.
Он сработает раньше регистрации и просто не допустит на хаб никого, у кого нет одного из предложенных префиксов.
Тебе же это требовалось?

Да...тогда не срабатывает.Я так и сделал в начале,но ничего не случилось поэтому спросил)
В логах нет ошибки скрипта,перезапускается без ошибок. GUI нет , работаю под Ubuntu.

Автор: Ksan 26.1.2012, 14:00

fmit, исправил, попробуй ещё раз.

Автор: fmit 26.1.2012, 14:20

Ksan, Увы нет ... реакции никакой при входе на хаб ... в логах ничего.

Сработал вот этот кусок кода,вырванный из Chekprefix ... думаю может его как то допилить.....

Код
function ValidateNickArrival(tUser)
  if not string.find(tUser.sNick,"^(%[MK%-%d+%])") then
    Core.SendToUser(tUser,"Ваш ник должен содержать префикс микрорайона [MK-цифра]Ваш ник, например [MK-1]Bomberman (префикс стоит в квадратных скобках и буквы MK на английском языке)")
    Core.Disconnect(tUser)
  end
end


А можнет прокатить что то наподобие :
Код
if not string.find(tUser.sNick,"^([adsl])")  ||  string.find(tUser.sNick,"^([fttb])") then

В lua не силен но общую структуру понимаю. в синтаксисе не силен

Автор: Ksan 26.1.2012, 14:43

fmit, ну этот вариант (без таблицы, проверка с подстановкой каждого префикса в одной строке) у меня сразу был готов, но я хотел с таблицей, на будущее. big_smile.gif
Тогда вот:

Код
local sBotMsg = "<"..SetMan.GetString(21).."> *** Просьба добавить к нику префикс и перезайти. Если у вас ADSL - припишите к нику спереди префикс [ADSL], если FTTB - то [FTTB]. Пример:\n [ADSL]Александр, [FTTB]4uMa и т.д." -- текст можно переделать на свой

function ValidateNickArrival(tUser, sData)
    if not tUser.sNick:find"^%[ADSL%]" and not tUser.sNick:find"^%[FTTB%]" then
        Core.SendToUser(tUser, sBotMsg)
        Core.Disconnect(tUser)
    end
end

Автор: fmit 26.1.2012, 14:56

Ksan, Да все сработало )))

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

Код
ExNicks = {"ник1","ник2",}

function ValidateNickArrival(tUser,data)
  for i = 1, #ExNicks do
    if (not tUser.sNick == ExNicks[i]) then
      Core.SendToUser(tUser, "Хаб на реконструкции")
      Core.Disconnect(tUser)
    end
  end
end

UserConnected, RegConnected = ValidateNickArrival, ValidateNickArrival

Автор: Ksan 26.1.2012, 15:01

Да это нетрудно. Сейчас добавлю.

UPD: Вот с исключениями:

Код
local sBotMsg = "<"..SetMan.GetString(21).."> *** Просьба добавить к нику префикс и перезайти. Если у вас ADSL - припишите к нику спереди префикс [ADSL], если FTTN - то [FTTN]. Пример:\n [ADSL]Александр, [FTTN]4uMa и т.д." -- текст можно переделать на свой
local tExNicks = {
    "Админ1",
    "Админ2",
}

function ValidateNickArrival(tUser, sData)
    local b = false
    for i in pairs(tExNicks) do
        if tUser.sNick == tExNicks[i] then
            b = true
            break
        end
    end
    if not b then
        if not tUser.sNick:find"^%[ADSL%]" and not tUser.sNick:find"^%[FTTB%]" then
            Core.SendToUser(tUser, sBotMsg)
            Core.Disconnect(tUser)
        end
    end
end


Кстати, вот этот код:
Код
    local b = false
    for i in pairs(tExNicks) do
        if tUser.sNick == tExNicks[i] then
            b = true
            break
        end
    end
    if not b then
практически универсальный, годится для проверки наличия/отсутствия чего угодно, находящегося в таблице.

Автор: fmit 26.1.2012, 15:37

Ksan, victory.gif Да все круто спасибо!

Ksan, если я хочу чтобы между [fttb] и Nick ничего не было , просто убираю %

почитал про регулярные выражения .... % это просто захват определенного значения...

Автор: Ksan 26.1.2012, 15:49

fmit, в представленном коде он проверяет ники, чтоб они были типа тех, которые бот и предлагает делать.
Там между символом ] и ником юзера и так ничего не ожидается. То есть, всё, что дальше этого символа ] считается принадлежащем нику. Впрочем, твой префикс тоже считается частью ника, скрипт только проверяет, есть такой кусок в нике или нет.
Или я тебя не понял?
А % это да, в данном случае позволяет считать символы [ и ] простыми символами, а не управляющими.

Автор: fmit 26.1.2012, 15:54

думаю правильно...надо тогда значит накопать запрет знаков в нике , чтобы типа не было пробелов,+ и т.д )

Автор: Ksan 26.1.2012, 17:00

fmit, а для этого (запрет отдельных символов) тоже в этом же коде достаточно добавить ещё одну таблицу (с запрещенными знаками) и проверять их наличие отдельным циклом.

Автор: fmit 27.1.2012, 9:36

Может кому понадобиться ) Вроде работает.

Код
local sBotMsg = "<"..SetMan.GetString(21).."> *** Где префикс?"
local sBotMsg2 = "<"..SetMan.GetString(21).."> *** Запрещенные символы!"
local tExNicks = {
    "admin1",
    "admin2",
}
local tExChar = {
    "=",
    "+",
    "-",
    "/",
    "@",
}
function ValidateNickArrival(tUser, sData)
    local b = false
    for i in pairs(tExNicks) do
        if tUser.sNick == tExNicks[i] then
            b = true
            break
        end
    end
    
    for _,v in pairs(tExChar) do
        if tUser.sNick:find(v,1,true) then
            Core.SendToUser(tUser, sBotMsg2)
            Core.Disconnect(tUser)
        end
    end
    
    if not b then
        if not tUser.sNick:find"^%[ADSL%]" and not tUser.sNick:find"^%[FTTB%]" then
            Core.SendToUser(tUser, sBotMsg)
            Core.Disconnect(tUser)
        end
    end
end

Автор: Ksan 27.1.2012, 12:54

fmit, писал бы предупреждения как-то понятнее, что ли.. А то представь, заходит кто-то первый раз и ему в лоб с ходу

Цитата
*** Где префикс?
или
Цитата
*** Запрещенные символы!
Ты думаешь, он поймёт, что к чему? Может, он вообще не знает, что такое префикс и что это за запрещённые символы...кем запрещённые, почему запрещённые...и разве бывают запрещённые..
Пиши понятным для любого текстом, без недоразумений и доп. вопросов.

Автор: fmit 27.1.2012, 14:21

Ksan, big_smile.gif я просто так написал...чтобы сразу понятно было будущему админу ) а так у меня все информативно ...