Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
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 |
Нужен скрипт на подобе липовых юзаков Помогите срочно |
Цитата Не вижу ни одного положительного момента для подключения такого скрипта Как там говорил товарищ Саахов ? "Неправилно панимаешь палитискую ситуацию, слюшай?!" Бывает очень весело, когда на маленьком хабе наносети какого-нибудь российского провайдера появляется сто человек разговаривающих между собой буржуев с шарами, тэгами и прочими прибамбасами ))))) Эдакая "атака клонов". Или - клоунов )) Народ в панике выпучивает глаза и лезет под стол, скрываясь от европейской экспансии. Так, ради шутки... для обмана применять конечно же не стоит. Нашел вот в пыльной кладовке такой скриптик, правда, только 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 строк, где можно ошибиться Ну вот смотри Код 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 в данном контексте не несет тайного, сакрального смысла А для себя и других, чтобы не запутаться, можно обозвать ее например 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 ). Не шедевр мирового программирования, но, может быть, кому-нибудь пригодится Код 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 | У вас нет прав на просмотр этой темы | У вас нет прав на просмотр этого сообщения |
степашка | ||
|
Сейчас: 22.12.2024, 23:18 |