myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
История благодарностей участнику district. Спасибо сказали: 90
Дата поста: В теме: За сообщение: Спасибо сказали:
20.10.2009, 12:12 При появлении нового ника
ему отправляется заготовленный текст
Пардон, умудрился я забыть квадратные скобки ))))
Вот так надо :
Код
local tExcept = {
["10.5.1.253"] = true,
["10.5.1.252"] = true,
}

simxsim
19.10.2009, 15:03 При появлении нового ника
ему отправляется заготовленный текст
Нужно добавить таблицу исключений :
Код
local tExcept = {
["10.31.255.255"] = true,
...
}

И изменить функцию :
Код
function UserConnected(tUser)
if tUser.sIP:find(sDiap) and not tExcept[tUser.sIP] then
Core.SendPmToUser(tUser, sBot, sMsg)
end
end
simxsim
15.10.2009, 15:10 При появлении нового ника
ему отправляется заготовленный текст
... а начать героическую борьбу за бюрократическое складирование ников в таблицу можно вот с чего :

Код
--------------------------  Стандартная функция сохранения таблицы  ------------------------------------------------------
function SaveToFile(sFileWay, tTable, sTableName)
local sHandle = io.open(sFileWay,"w+")
Serialize(tTable, sTableName, sHandle)
sHandle:flush()
sHandle:close()
end

function Serialize(tTable, sTableName, sHandle, sTab)
local sTab = sTab or ''
if sTableName ~= '' then
sHandle:write(sTab..sTableName.." = {\n")
else sHandle:write(sTab.."return {\n"); end
    for key, value in pairs(tTable) do
        local sKey = (type(key) == "string") and ("[%q]"):format(key) or ("[%d]"):format(key)
        if type(value) == "table" then
            Serialize(value, sKey, sHandle, sTab.."\t")
        else
            local sValue = (type(value) == "string") and ("%q"):format(value) or tostring(value)
            sHandle:write(sTab.."\t"..sKey.." = "..sValue)
        end
        sHandle:write(",\n")
    end
sHandle:write(sTab.."}")
end

При вызове SaveToFile(sFileWay, tTable, sTableName) нужно указать соответственно путь к файлу-таблице, саму переменную-таблицу, которую будем сохранять, и имя, с которым таблица будет сохранена в файл. Если вместо имени указать пустую строку
Код
''

то таблица сохранится как
Код
return {
...
}

а имя ей будет присваиваться при подключении, которое ( если не нужна доп. проверка существования и синтаксиса таблицы) может выглядеть так :
Код
tTable = dofile(sFileWay)

Если нужна такая проверка, то перед подключением нужно делать вызов loadfile:
Код
if loadfile(sFileWay) then tTable = dofile(sFileWay) ...

Функция Serialize формирует внутритабличные данные и записывает их в строки файла в удобном для глаза виде, с учетом типа данных, которые могут быть числами, строками, или опять же таблицами.

Но вообще говоря, думаю, рано или поздно встанет проблема оценки актуальности данных в таблице и автоочистки таблицы от данных, утративших актуальность. Т.к. до бесконечности раздувать таблицу, наверное, неразумно.
FallenAngel
22.9.2009, 17:14 Антипорн By Mutor, Бан По Ттн
API1, API2 | База порнухи около 500 ТТН
Только что забанил одного... человеком назвать - язык не поворачивается. Ник : [int]Ыцшт
На картинке - скрин части файл-листа, в архиве - перечень ТТН в формате, требуемом ботом.
Pro009, ramzes
16.9.2009, 7:54 Нужен скрипт на подобе липовых юзаков
Помогите срочно
Цитата
Не вижу ни одного положительного момента для подключения такого скрипта

Как там говорил товарищ Саахов ? "Неправилно панимаешь палитискую ситуацию, слюшай?!" big_smile1.gif
Бывает очень весело, когда на маленьком хабе наносети какого-нибудь российского провайдера появляется сто человек разговаривающих между собой буржуев с шарами, тэгами и прочими прибамбасами ))))) Эдакая "атака клонов". Или - клоунов ))
Народ в панике выпучивает глаза и лезет под стол, скрываясь от европейской экспансии.
Так, ради шутки... для обмана применять конечно же не стоит.
Нашел вот в пыльной кладовке такой скриптик, правда, только API1, от Mutor'a.
dimetrius
8.9.2009, 18:36 CountGraphic
API2 | Диаграмма посещаемости хаба по запросу отправляется в приват
... и еще раз передобавлено.
9 сентября 2009
... и еще раз передобавлено, устранена еще кучка недочетов.
FBR, Ingvar72
8.9.2009, 14:06 CountGraphic
API2 | Диаграмма посещаемости хаба по запросу отправляется в приват
Цитата
Пусть будет твоя версия для обеих API.

Перевел конвертером, просмотрел, вроде все правильно. Скрипт запускается, директорию создает и пустую таблицу - сохраняет. А чтобы тестировать - живой хаб под четвертой Птокой нужен, у меня его, увы, нет, только тестовый.
Добавил к предыдущему своему посту.
zip2002
6.8.2009, 2:03 Словить 3ий аргумент в lua...
Помогите дописать...
Цитата
как узнать 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 может передаваться, а может и нет) - то, если его не будет, вся последующая структура захватов будет порушена, тут нужна более тонкая работа с захватами.
Win32
18.7.2009, 19:17 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
Al-j®, степашка
13.7.2009, 3:35 Вопрос по скрипту регистрации
API2
Значит, не было ничего "давно прописано". Как может не работать простейшее условие?
Советую еще арфографею и легсигу поправить в коде, специально трогать не стал.
Цитата
розсмотрят ваше заявление
и
Цитата
незная
, а также мелочь вроде отсутствия пробела после запятой и непонятно почему продолжение предложения с заглавной буквы, после запятой.
Артём
11.7.2009, 21:59 Вопрос по скрипту регистрации
API2
Исправил, передобавил, этот и по ипу работает

Setuper
А в логических вентилях (в простейшей цифровой схемотехнике), которые я еще худо-бедно помню, и впрямь не так как описано
Цитата
local Var4 = Var1 and Var2 or Var3

3. Если Var1 не false и не nil, а Var2 равен false или nil, то по правилу вернётся ложный операнд, то есть Var2.


Там принято так :
Логическое И -
1,1 = 1
1,0 = 0
0,1 = 0
0,0 = 0

Логическое ИЛИ
1,1 = 1
1,0 = 1
0,1 = 1
0,0 = 0

Вот эту разницу в подходах и впрямь важно запомнить.
Артём
11.7.2009, 6:48 Вопрос по скрипту регистрации
API2
Бери, пробуй...
Что добавлено. Режим регистрации равный 0 теперь (регистрация с подтверждением) включает теперь и проверку на соотв. ника и IP юзера значениям таблиц tRefusedNicks и tRefusedRanges. В таблицу tRefusedRanges можно вписывать и единичные IP в таком виде :

Код
["10.0.0.0"] = "10.0.0.0",


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

Сама функция проверки атрибутов юзера :
Код
function Refused(tUser)
    if tRefusedNicks[tUser.sNick] then return true; end
    local iIP = IPtoDec(tUser.sIP)
    for st,en in pairs(tRefusedRanges) do
        local ist,ien = IPtoDec(st),IPtoDec(en)
        if iIP >= st and iIP <= en then return true; end
    end
    return false
end

Тестировать не на чем, тестируй сам, если что - стучи, поправим.
Артём
11.7.2009, 2:14 Вопрос по скрипту регистрации
API2
Цитата
о_О там всего-то 6 строк, где можно ошибиться unhappy.gif

Ну вот смотри
Код
local _,_,ip1,ip2 = e:find"(%d+%p%d+%p%d+%p%d+)-(%d+%p%d+%p%d+%p%d+)"

1.Между двумя захватываемыми переменными стоит "минус". Это т.н. "magic character" (магический символ), а все такие символы нуждаются в "экранировании", т.е перед ними должен стоять знак "%". Иначе метод find не увидит этого минуса, и все что должно быть захвачено после этого минуса, тоже не будет обнаружено.
2.Не хватает общих скобок для всего выражения
Это самое явное. Т.е. должно быть так:
Код
local _,_,ip1,ip2 = e:find("(%d+%p%d+%p%d+%p%d+)%-(%d+%p%d+%p%d+%p%d+)")

Далее позанимаемся буквоедством и придирками))
3.Выражение
Код
"%d+%p%d+%p%d+%p%d+"

в принципе годится для того формата записи элементов в таблице, который был использован, но, думается, лучше сразу себя приучать к такому вот виду захвата :
Код
"%d+%.%d+%.%d+%.%d+"

это универсальный захват для IP-адреса, а тот захват который есть в твоем коде, может захватить и посчитать IP-адресом например вот такую белиберду:
Код
"6,7!8;5"

т.к. выражение
Код
%p

означает захват любого знака пунктуации.
Хотя, если мы работаем не с переменными, а с константами (т.е.значениями, жестко прописанными в самом коде), и эти наши константы гарантированно соответствуют формату IP-адреса, то захват может быть гораздо проще :
Код
local _,_,ip1,ip2 = e:find("(%S+)%-(%S+)")

(кучка любых непробельных символов, разделяющий знак "минус", и еще одна кучка символов)
4.Для операций присваивания значений переменным лучше юзать метод :
Код
local ip1,ip2 = e:match("(%d+%p%d+%p%d+%p%d+)%-(%d+%p%d+%p%d+%p%d+)")

а метод
Код
s:find()

использовать, когда требуется подтвердить условие :
Код
if s:find(...) then ...

5.Переменная i нигде в цикле не используется, поэтому оператор for для нашего случая может выглядеть так :
Код
for _,e in pairs(tIpRange) do

6.Переменную правильнее было бы назвать s вместо e, т.к. это строка, если только буква e в данном контексте не несет тайного, сакрального смысла big_smile1.gif А для себя и других, чтобы не запутаться, можно обозвать ее например sRange - буква s тут будет означать тип переменной по венгерской нотации (строка), а слово Range - смысл этой переменной ( диапазон).
7.Ну и наконец, в твоем коде не хватает функции преобразования IP-адреса в число.
Код
Ip2Num(sIP)


Ну и совсем для полного счастья можно было бы изменить сам способ хранения диапазонов в таблице
Код
tIpRanges = {["10.0.0.0"] = "10.0.255.255", ..., ...}

В таком варианте хранения необходимость в захватах отпадает, а цикл имеет такой вид:
Код
for k,v in pairs(tIpRanges) do
     local iIp1,iIp2 = Ip2Num(k),Ip2Num(v)
     if iUserIP >= iIp1 and iUserIp <= iIp2 then ... end
end

Переменная iUserIP (IP юзера в числовом виде) должна быть объявлена локальной и присвоена за пределами цикла и обязательно ПЕРЕД ним ( ну это понятно).
Код
local iUserIP = Ip2Num(tUser.sIP)
fixx
9.7.2009, 12:33 Скрипт Prokurator
помогите перевести в API2
Вот, почистил изначальный код живенько и под API2 сделал. Правда, для детального тестирования на 4й Птоке нужна куча пытающихся войти юзеров, а у меня только тестовый хаб на Птоке 4. Поэтому можно пробовать, особое внимание уделив корректности считывания установок хаба по шаре, слотам, х/сл ратио и максхабс и корректности возвращения их на место по окончании проверки. Если что не так - стучите, поправим.
FallenAngel, skonda
9.7.2009, 4:20 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
TiGRpp
9.7.2009, 1:09 Вопрос по написанию скрипта
Нужна консультация
Цитата
А как человек поймет что я ему отвечаю?

Очень просто : нужно перед сообщением, адресованным человеку, поставить ник этого человека, или 2 <nick > ( "для ника такого-то"). И еще можно этот ник полужирным выделить ( крайняя левая кнопка с буквой b в окошке редактора ).
Uncle_Dif
1.7.2009, 10:03 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка
1.7.2009, 2:05 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка
30.6.2009, 3:58 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка
19.6.2009, 12:54 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
lewonchik
13.6.2009, 4:10 Ruiess-revu
конурс правил хабов
Выскажу и я пару частных мнений-наблюдений, относительно Правил хабов вообще.

1. Какими бы доходчивыми и внятными не были Правила, юзеры, за очень редким исключением, делятся на две группы. Первая - не читает Правила и не нарушает их, т.к. искони так воспитана и так себя ведет, что действия и поведение по определению не могут идти вразрез с Правилами. Вторая - не читает Правила и нарушает их, т.к. воспитана в прямо противоположную сторону. Есть еще третья, пограничная группа - те, кто читают Правила, таких единицы. Эти люди либо, прочитав Правила, молча уходят, либо, убедившись в том, что Правила никоим образом не ущемляют их интересов, остаются. Есть даже случаи, когда юзеры корректируют какие-то свои атрибуты ( например, ник), признав требования Правил разумными, в этой части. Если принять это наблюдение как факт, то получается, что особого смысла в написании Правил хаба - нет вообще... Речь, разумеется, только о частных хабах. На официальных хабах ( провайдеров и.т.п ) Правила, видимо, должны быть в любом случае.

2. Если хаб частный, то это как собственный дом. Кому придет в голову объяснять какие-либо правила, когда в твой дом вваливается и на что-то претендует какой-то левый тип? Его просто берут за шиворот и вышвыривают за порог, не тратя времени на объяснения. Если следовать этой установке, то в Правилах, если их писать, логично будет иметь пункт наподобие : "Администрация хаба оставляет за собой право закрыть доступ на хаб без объяснения причин."
mariner, Ksan, Uncle_Dif
4.6.2009, 10:21 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
Al-j®
31.5.2009, 4:47 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
zzipper, Uncle_Dif, Saymon21
26.5.2009, 21:17 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка
11.5.2009, 7:56 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка
8.5.2009, 6:58 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
Infinity_Love, Amaterasu
7.5.2009, 4:46 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка, TiGRpp
4.5.2009, 6:50 Функции Для Разработчиков
склад полезных функций
Рискну и я три копеечки добавить. Решал проблему разбиения на части длинных посылок (отчетов) Оператору, содержащих более 128000 символов, и вот попутно соорудил такое нехитрое форматирование. Когда нужно упихнуть длинный текст в заданные рамки ( переменная iMargin ). Не шедевр мирового программирования, но, может быть, кому-нибудь пригодится big_smile.gif

Код
function CutText(s)
local txt,sReturn = s.." ",""
local Len,Ln,ln,stemp = txt:len(),0,0,""
for word in string.gmatch(txt, "%S+%s+" ) do
    local wlen = word:len(); Ln,ln = Ln + wlen,ln+wlen
    if ln >= iMargin then
        sReturn = sReturn..stemp.."\r\n\t"; stemp = word; ln = wlen
    else
        stemp = stemp..word
    end    
    if Ln == Len then sReturn = sReturn..stemp; end
end
return sReturn
end


На картинке результат форматирования Описания хаба при разном заданном значении предельной длины подстроки.
MIKHAIL
2.5.2009, 14:42 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка
23.4.2009, 1:52 У вас нет прав на просмотр этой темы
У вас нет прав на просмотр этого сообщения
степашка

2 страниц V   1 2 >
RSS Сейчас: 14.12.2017, 21:43