myDC.ru

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

 
3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему

> Кто К Нам Ломится?, API 1

Теги
Нет тегов для показа
district
сообщение 17.11.2008, 17:14
Сообщение #1


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Решил вот выложить сырую такую прикидку, нацарапанную с непосредственным онлайн участием Sephiroth_Lukaw (Special Thanx To)

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

Кроме ника и айпи ничего до входа юзера на хаб получить, как было установлено, нельзя, но и это уже что-то.
Пока что код работает так: каждую минуту из пяти выдает ОПам о попытках входа на хаб. Фильтрацию тех, кому дениед от тех, кому хелло, тоже пока организовать не удалось...
Может быть, идея получит какое-то развитие. За дельные замечания, как всегда, буду благодарен big_smile.gif

Код
sBot = "Бюрократ"
iTimeGlob = 300 -- в секундах
iTime = iTimeGlob
function Main()
SetTimer(1000)
StartTimer()
end

function OnTimer()
iTime = iTime - 1
if iTime == 0 then
StopTimer()
Looptime()

else

return 0
end

end

function ValidateNickArrival(curUser, sData)
incm = curUser.sName
ip = curUser.sIP
if iTime>=0 and iTime<60 then
SendToOps(sBot, "*** Кто-то страшный к нам идет... Ник: "..incm..", IP: [ "..ip.." ]")
end
end


function Looptime()
SendToOps(sBot, "*** Цикл перезапущен")
iTime = iTimeGlob
StartTimer()
end
Go to the top of the page
+Quote Post
district
сообщение 18.11.2008, 21:58
Сообщение #2


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Сегодня прикидка оформилась в какое-то подобие чего-то. И даже была успешно применена на хабе в сугубо практических целях.

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

Бот работает в автоматическом режиме, период включения проверки и период самой проверки - задаются, а также в ручном режиме: запустить проверку, остановить проверку.


1. Обнаружить непонятливого забаненного юзера (с белым IP), который третий месяц ломится на хаб, и этим только создает
лишнюю нагрузку на этот хаб, и внести его IP во внешний фаерволл.
2. Обнаружить правильного юзера с динамическим IP, который бедолага нечаянно попал на забаненный IP, и решить проблему.
3.Проявить милосердие: разбанить юзера, забаненного когда-то за мелкий проступок, и дать ему "второй шанс" )))


Глобальные вопросы.

1.Необходимо отфильтровать сообщения об удачных входах на хаб. Т е бот во время проверки не должен выдавать сообщений о тех юзерах, которые чинно-благопристойно завалидатились и вошли.
2.Какие еще доп.данные о толкущихся за пределами хаба юзерах можно получить и с использованием каких приемов? Интересует ЛЮБАЯ информация. Была сделана попытка идентифицировать невалидного юзера как забаненного по нику, вот в этом куске функции ValidateNickArrival :

Код
--[[if GetBannedItemIp(user.sNick) then
addrep = "Забанен по нику"
if addrep then
SendToOps(sBot, addrep)
end
end]]--


(просто проверка, будет функция схватывать параметр, или нет). Пока - безуспешно. Может, можно все же реализовать?

3.Попутно очень хочется выяснить, в каких случаях имеет смысл включать в скрипт функцию очистки памяти (дайте ссылку на дельное руководство, что ли big_smile.gif )

4. Хотелось бы иметь возможность выбора между отсылкой репорта всем опам, и всем никам из определенной таблицы. Как должно выглядеть выражение отсылки репорта всем никам из таблицы?

5. О косметических мелочах пока не спрашиваю, всему свое время.

Жду дельных комментариев и советов, особенно от Setuperbig_smile.gif
Прикрепленные файлы
Прикрепленный файл  Prokurator.Beta_API1_.lua ( 3.39 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
+Quote Post
Wariner
сообщение 18.11.2008, 22:05
Сообщение #3


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Цитата(district @ 18.11.2008, 21:58) *
4. Хотелось бы иметь возможность выбора между отсылкой репорта всем опам, и всем никам из определенной таблицы. Как должно выглядеть выражение отсылки репорта всем никам из таблицы?


помоему так

Код
for i,v in pairs(tTable) do
    SendToNick(v, Data)    
end
Go to the top of the page
+Quote Post
Sephiroth_Lukaw
сообщение 18.11.2008, 22:17
Сообщение #4


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 307
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 31 раз




Цитата("district")
Как должно выглядеть выражение отсылки репорта всем никам из таблицы?
Код
tTable = { 'Nick', 'Nick' }
for sNick in ipairs(tTable) do
SendToNick(sNick, sString)
end

Цитата("district")
забаненного по нику
frmHub:GetPermBanList(), frmHub:GetTempBanList()
upd. От это я тормоз Оо
Go to the top of the page
+Quote Post
district
сообщение 18.11.2008, 22:43
Сообщение #5


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Цитата(Wariner @ 19.11.2008, 1:05) *
помоему так

Код
for i,v in pairs(tTable) do
    SendToNick(v, Data)    
end


Точно так!
Благодарю за оперативное реагирование big_smile.gif

-------------------------------------------------------------------------------------------------------
Подшаманено, перезагружено.
Прикрепленные файлы
Прикрепленный файл  Prokurator.Beta_API1__.lua ( 3.93 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
+Quote Post
Sephiroth_Lukaw
сообщение 18.11.2008, 23:31
Сообщение #6


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 307
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 31 раз




=( если честно, до сих пор не могу понять зачем нужен таймер.
--
Зачем делать большенство переменных типа 'howbanned = "перманентно"' глобальными?
--
Мб так лучше?
Код
if GetBannedItemName(user.sIP) then
bannednick = GetBannedItemName(user.sIP)      
howbanned = "перманентно"        
end
if GetTempBannedItemName(user.sIP) then
bannednick = GetTempBannedItemName(user.sIP)
howbanned = "временно"
end

if GetBannedItemName(user.sIP) or GetTempBannedItemName(user.sIP) then
заменить на
Код
local bannednick = nil
local howbanned = nil
if GetBannedItemName(user.sIP) then
bannednick = GetBannedItemName(user.sIP)      
howbanned = "перманентно"        
else
if GetTempBannedItemName(user.sIP) then
bannednick = GetTempBannedItemName(user.sIP)
howbanned = "временно"
end
end

if howbanned ~= nil then
upd. или даже так
Код
local bannednick = GetBannedItemName(user.sIP)
local howbanned = nil
if bannednick then
howbanned = "перманентно"        
else
bannednick = GetTempBannedItemName(user.sIP)
if bannednick then
howbanned = "временно"
end
end

if howbanned ~= nil then
Go to the top of the page
+Quote Post
Wariner
сообщение 18.11.2008, 23:49
Сообщение #7


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




2district: а ты в чём пишешь скрипты? На мой взгляд какая-то у них структура странная... Меня кто-то учил ступенчатой структуре(мож это и не так называется) Получается гораздо нагляднее)))

PS: сорри за оффтоп
Go to the top of the page
+Quote Post
district
сообщение 19.11.2008, 0:10
Сообщение #8


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Спасибо, ребята, за комменты. Но голова уже нифига не варит - ночь на дворе.
Ступенчато оно конечно лучше, и до этого доберемся со временем. Я Ноутпад++ меньше недели назад поставил... вот пробую.

Sephiroth_Lukaw! Не заколебай меня насчет таймера! big_smile1.gif Раз Партия решила, значит, быть таймеру, и все тут!

PS а глобальные переменные остались от варианта, когда я пытался соорудить отдельную функцию репорта, и просуммировать инфу из валидата и суппорта. Но тот вариант не прокатил.
Go to the top of the page
+Quote Post
Setuper
сообщение 19.11.2008, 14:27
Сообщение #9


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




1). Суть таймера я не понял! Для чего он нужен? По коду он просто выдаёт фразы о начале проверки и о конце проверки, при этом ничего не делает! Поэтому выбрасываем его из кода полностью, или объясни, что ты хотел с этим таймером добиться!

2). Команды !strprk и !stpprk также ничего не делают, только отправляют эти же сообщения о начале или конце проверки и останавливают и тут же запускают таймер.
В итоге выбрасываем из кода функции: Main(), ChatArrival(curUser, sData), OnTimer(), StartCheck(), StopCheck(), OpConnected(user,data).

3). Из-за функции ValidateNickArrival будет сплошной флуд для админов в чате, то есть при каждом заходе на хаб любого юзера админам отсылается фраза: "Ломится юзер...". Для чего это сделано - непонятно. Вероятно нужна проверка опять же банов, но для этого код должен быть другим.

4). Лишние конкатенации лучше убирать.

5). Не понятен смысл ввода новой глобальной переменной в функции SupportsArrival: ip=user.sIP.

6). Переменные bannednick и howbanned лучше делать локальными.

7). Зачем писать: "if GetBannedItemName(user.sIP) or GetTempBannedItemName(user.sIP) then" и тем самым лишний раз вызывать функции GetBannedItemName и GetTempBannedItemName.

8). В функциях SupportsArrival и ValidateNickArrival ты всё равно не используешь переменную data, поэтому её можно не писать, дабы не забивать лишними данными стек lua.

9). Часто повторяющийся код лучше вынести отдельной функцией.

В итоге, после всего сказанного код приобретает вид:

CODE
sBot="GUI"
ToAdmins=1
tAdmin={
"[INT]district",
"asss",
"Sephiroth_Lukaw",
"Alex"
}
function SupportsArrival(user)
local bannednick=GetBannedItemName(user.sIP)
if bannednick then
Sender("Ломится навсегда забаненный "..bannednick.." с IP [ "..user.sIP.." ]")
else
bannednick=GetTempBannedItemName(user.sIP)
if bannednick then
Sender("Ломится временно забаненный "..bannednick.." с IP [ "..user.sIP.." ]")
end
end
end
function ValidateNickArrival(user)
if GetBannedItemIp(user.sName) then
Sender("Ломится юзер "..user.sName.." с IP [ "..user.sIP.." ]")
end
end
function Sender(sMsg)
if ToAdmins==1 then
for i,v in pairs(tAdmin) do
SendToNick(v,"<"..sBot.."> "..sMsg)
end
else
SendToOps(sBot,sMsg)
end
end
Go to the top of the page
+Quote Post
district
сообщение 19.11.2008, 14:57
Сообщение #10


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Setuper

Что ж, спасибо за код, оптимизацию учтем, но:

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

2.Таймер задает период автоматического сканирования (хоть раз в десять дней) и подпериод подачи непосредственно репортов. Запустить репорты и остановить можно из меню. А постоянные сообщения о попытках входа в чате мне как раз-таки задаром не нужны.
Go to the top of the page
+Quote Post
Setuper
сообщение 19.11.2008, 15:17
Сообщение #11


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Контроль шары и слотов ты не сможешь реализовать, потому что в функции ValidateNickArrival шара пользователя ещё не определена, а проверка ограничений на шару происходит непосредственно после этой функции.

Единственное как это можно обойти - это отключить стандартную проверку шары и слотов и написать в функции MyINFOArrival свою проверку.

С таймерами всё равно не понятно! Зачем всё усложнять и вводит какие-то лишние никому не нужные вещи?
Go to the top of the page
+Quote Post
district
сообщение 19.11.2008, 21:08
Сообщение #12


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Переработано.

Что ж, функция Sender порадовала своим изяществом и простотой. И подумать не мог, что sMsg ,будет вот так отрабатываться, при том что нигде нет прямого присваивания вроде sMsg = "БлаБлаБла".. Это надо запомнить.

Таймер все-таки оставил, как дань тем суткам, что были бессонно угроханы на этот ботик. Да и как без таймера ограничить цикл репортирования? Постоянное нытье в чате "Ломится такой-то, повторяю, совсем ни к чему. Другое дело, что авторежим теперь опционален - хочешь, оставь авторепорт на каждые несколько часов, хочешь, запускай только вручную.

Почему сделаны разными имя бота и имя репортера. Ну подумайте сами: логика: Прокуратура - начинает и заканчивает проверку в ГУИНе, ГУИН - докладывает. Да и зрительно гораздо легче цикл воспринимается.. big_smile.gif
Да, и прошу всерьез не воспринимать шуточный стиль репортов бота. В конце концов - каждый может поменять его в соответствии со своим вкусом.
Прикрепленные файлы
Прикрепленный файл  Prokurator._API1_v.1.0.lua ( 3.49 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
+Quote Post
Setuper
сообщение 19.11.2008, 22:32
Сообщение #13


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




тогда уж так: Прикрепленный файл  remake.lua ( 3.25 килобайт ) Кол-во скачиваний: 14
Go to the top of the page
+Quote Post
district
сообщение 19.11.2008, 23:14
Сообщение #14


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Setuper

big_smile.gif Ну, путь к идеалу как говорится, долог тернист и бесконечен ) Т.е вариантов можно наделать уйму)) У тебя красивше, конечно, ступенчато, организовано.
Вот! Давно мечтаю узнать, ради чего добавляют вертикальный слэш?

Код
function OpConnected(user)
  user:SendData("$UserCommand 1 3 "..sMenu.."\\Начать проверку$<%[mynick]> !strprk||"..
  "$UserCommand 1 3 "..sMenu.."\\Остановить проверку$<%[mynick]> !stpprk|")
end

(ну тут не отображается, но вопрос, думаю, ясен. В первой строке менюшки?)


А есть вот еще вопрос практический, только что созрел.
Вот, получили мы репорт. Скажем, десяток юзеров.
Идея такая: прямо в чате, прямо райткликом по имени юзера или айпи, вызываем функцию сверки с ConnectedUsers.txt

И получаем - в случае если выбран ник - все айпи, с которых когда-либо заходил этот ник, в случае, если выбран айпи - все ники, которые заходили с этого айпи. Тема актуальная, приходится в КоннектедЮзерс.тхт вручную рыться, часто.
Мне бы только ядро функции, а дальше доделаю. Тут же можно было бы присовокупить ввод ника или айпи из строки меню, для проверки его на "многоликость"

А может, вынести все это дело в отдельный бот. Что скажешь?
Go to the top of the page
+Quote Post
Setuper
сообщение 19.11.2008, 23:40
Сообщение #15


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Следующие коды эквивалентны:
Код
function OpConnected(user)
  user:SendData("$UserCommand 1 3 "..sMenu.."\\Начать проверку$<%[mynick]> !strprk&#*124;|"..
  "$UserCommand 1 3 "..sMenu.."\\Остановить проверку$<%[mynick]> !stpprk&#*124;")
end

Код
function OpConnected(user)
  user:SendData("$UserCommand 1 3 "..sMenu.."\\Начать проверку$<%[mynick]> !strprk&#*124;")
  user:SendData("$UserCommand 1 3 "..sMenu.."\\Остановить проверку$<%[mynick]> !stpprk&#*124;")
end
* - удалить

НО первый код более оптимизирован, из-за того, что функция SendData отправляет данные только 1 раз, в отличии от второго кода, в котором эта функция вызывается 2 раза.

Теперь о вертикальной черте.
Из устройства протокола dc следует, что любая строка данных должна содержать эту вертикальную черту. Эта черта разделяет сообщения. Функция SendData автоматически добавляет эту черту в конце строки, если её нету. Поэтому, можно отсылать 2 сообщения, или отсылать 1 сообщение, которое будет разделено вертикальной чертой на 2 части. Надеюсь понятно объяснил принцип отправки сообщений в протоколе dc big_smile.gif

По поводу какой-то свёртки по правому клику, не совсем понял о чём речь.
Go to the top of the page
+Quote Post
district
сообщение 20.11.2008, 0:02
Сообщение #16


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




насчет СендДаты - понял, надо будет также запомнить эту фишку.

а насчет "свёртки" - ну, есть файл лог соединений, ConnectedUsers.txt

Задача: оперативно пробить а) по нику - под какими айпи был замечен этот ник
б) по айпи - с какими никами заходили с этого айпи.
Используя этот файл.
Go to the top of the page
+Quote Post
Setuper
сообщение 20.11.2008, 1:32
Сообщение #17


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Это у кого такой файл? В папке с клиентом он или в папке сервера? Какой формат данных в этом файле?

P.S. SendData - читается по английски как СэндДэйта (переводится как ОтсылкаДанных), не путать Data и Date big_smile.gif
Go to the top of the page
+Quote Post
district
сообщение 20.11.2008, 2:05
Сообщение #18


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




C:\Program Files\ptokax0.3.6.0lua5.1.2\scripts\ConnectedUsers.txt

Логирует Тандер, насколько я понимаю.


Формат такой:

sg9511|194.44.191.120
district|80.64.81.70
district|80.64.81.70
Алекс|78.37.39.124
b-minor|77.35.7.159
district|80.64.81.70
sg9511|194.44.191.120
b-minor|77.35.0.24
district|80.64.81.70
sg9511|194.44.191.120
sg9511|194.44.191.120
b-minor|77.35.2.116
district|80.64.81.70

ЗЫ
А логирует вот так:

Код
function NewUserConnected(user)
    if log == "enable" then
    local f,e = io.open( Conlogs, "a+" )
    line =  user.sName.."|"..user.sIP
        if f then
        f:write( line.."\r\n" )
        f:close()
        end
    end


Но если такой формат совсем непригоден, то, ради такого дела, можно ведь изменить формат лога.
Go to the top of the page
+Quote Post
Setuper
сообщение 20.11.2008, 3:02
Сообщение #19


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    local a,b=Read(f)
    f:flush()
    f:close()
    return a,b
  end
end

function Read(fStream)
  local b,tIP,tNick=true,{},{}
  while b do
    local sLine=fStream:read()
    if not sLine then break end
    local _,_,sNick,sIP=sLine:find("(%S+)|(%S+)")
    if sNick and sIP then
      tNick[sNick]=tNick[sNick] or {}
      tIP[sIP]=tIP[sIP] or {}
      tNick[sNick][sIP]=tNick[sNick][sIP] and tNick[sNick][sIP]+1 or 1
      tIP[sIP][sNick]=tIP[sIP][sNick] and tIP[sIP][sNick]+1 or 1
    end
  end
  return tNick,tIP
end

function GetIpForNick(sNick,sFile)
  local sMsg,tNicks,tIPs="*** IP адреса, с которых входил пользователь с ником "..sNick,GetNickAndIp(sFile)
  if tNicks and tNicks[sNick] then
    for i,v in pairs(tNicks[sNick]) do
      sMsg=sMsg.."\n\t"..i.." - "..v
    end
  else
    sMsg="*** Пользователь с ником "..sNick.." в базе не найден."
  end
  return sMsg
end

function GetNickForIp(sIP,sFile)
  local sMsg,tNicks,tIPs="*** Ники, с которых входил пользователь с IP адресом "..sIP,GetNickAndIp(sFile)
  if tIPs and tIPs[sIP] then
    for i,v in pairs(tIPs[sIP]) do
      sMsg=sMsg.."\n\t"..i.." - "..v
    end
  else
    sMsg="*** Пользователь с IP адресом "..sIP.." в базе не найден."
  end
  return sMsg
end


Использование под API1:

Код
function ChatArrival(tUser,sData)
  sData=sData:sub(tUser.sName:len()+4,-2)
  local _,_,sCmd,sArg=sData:find("%p(%S+)%s+(.*)")
  if sCmd then
    if sCmd:lower()=="getipfornick" then
      if sArg and sArg~="" then
        tUser:SendData(GetIpForNick(sArg,frmHub:GetPtokaXLocation().."scripts/ConnectedUsers.txt"))
      else
        tUser:SendData("*** Вы не ввели ник.")
      end
      return 1
    elseif sCmd:lower()=="getnickforip" then
      if sArg and sArg~="" and sArg:find("%d+%.%d+%.%d+%.%d+") then
        tUser:SendData(GetNickForIp(sArg,frmHub:GetPtokaXLocation().."scripts/ConnectedUsers.txt"))
      else
        tUser:SendData("*** Вы не ввели ip.")
      end
      return 1
    end
  end
end

function OpConnected(tUser)
  tUser:SendData("$UserCommand 1 2 Меню админа\\IP этого юзера$<%[mynick]> !getipfornick %[nick]&#*124;|"..
  "$UserCommand 1 3 Меню админа\\IP юзера$<%[mynick]> !getipfornick %[line:Введите ник]&#*124;|"..
  "$UserCommand 1 2 Меню админа\\Ники этого юзера$<%[mynick]> !getnickforip %[ip]&#*124;|"..
  "$UserCommand 1 3 Меню админа\\Ники юзера$<%[mynick]> !getnickforip %[line:Введите IP]&#*124;")
end
* - удалить
Go to the top of the page
+Quote Post
district
сообщение 20.11.2008, 10:15
Сообщение #20


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Спасибо, попробую разобраться.
Сразу два вопроса.
while и break - это "операторы"? И хотелось бы услышать популярных пару слов об их назначении, смысле и применении в контексте LUA (смысл англ. слов - известен ))) )

С ходу
Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    return Read(f)
    f:close()
    f:flush()
    
  end
end

не пошло

Код
5: 'end' expected (to close 'if' at line 3) near 'f'



сделал так:

Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    return Read(f)
    end
    f:close()
    f:flush()
    
  end


ЗАРАБОТАЛО! Якорный бабай, да он еще и число входов выдает! Зреет шедевр, честное слово big_smile.gif Тестируем дальше :sablay:

Пока не работает отображение НИКОВ по IP.
Во всех случаях - " *** Пользователь с IP адресом ... в базе не найден"
Go to the top of the page
+Quote Post

3 страниц V   1 2 3 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 3.5.2024, 18:56