myDC.ru

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

 
 
Ответить в данную темуНачать новую тему

> Скрипт рассылки сообщений, прошу помочь...

Теги
Нет тегов для показа
MaxFox
сообщение 26.1.2012, 10:31
Сообщение #1


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Всем привет. Хочу иметь скрипт рассылающий сообщения юзерам 1 раз при конекте на хаб, но если только этот юзер принадлежит определенному диапазону IP адресов. ДИапазоны чтобы можно было удобно добавлять или изменять.
Посмотрел, что имеется по данным темам... частично подходит OneSend, частично SendToRanges

Поковырялся сам, вот что получилось... но не выходит пока каменный цветок, прошу помощи =)
скрипт
Код
path = debug.getinfo(1).source:match("^@?(.+[/\\]).-$"):gsub("\\","/")
Ranges = path.."rassilka.txt"
sMsg = "Текст для юзеров"
hFileName = "rasslka.dbs"

function string.InRange(ip,rnum)
    local iIP = ip:iptonumber()
    for i,v in ipairs(tRanges[rnum]) do
        if v[1] <= iIP and iIP <= v[2] then
            return true
        end
    end
end

function string.iptonumber(ip)
    local i1, i2, i3, i4 = ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")
    if i1 then
        local r = i1*16777216+i2*65536+i3*256+i4
        if r < 0 then error(ip) end
        return r
    end
end

function LoadRanges()
    local f = io.open(Ranges,"r")
    if f then
        tRanges,tRangeNames = {},{}
        local rnum = 0
        for line in f:lines() do
            local ip1,ip2 = line:match("^(%d+%.%d+%.%d+%.%d+)%-(%d+%.%d+%.%d+%.%d+)")
            if ip1 and ip2 then
                if rnum > 0 then
                    table.insert(tRanges[rnum],{ip1:iptonumber(),ip2:iptonumber()})
                end
            else    
                local rname = line:match("^%[(.+)%]")
                if rname then
                    rnum = rnum+1
                    tRanges[rnum] = {}
                    tRangeNames[rnum] = rname
                end
            end
        end
        f:close()
    end
end

function OnStartup()
    hFileName = Core.GetPtokaXPath().."scripts/"..hFileName
    bot = SetMan.GetString(21)
    assert(LoadRanges(),"Не удалось загрузить список диапазонов")
    if loadfile(hFileName) then
        dofile(hFileName)
    end
    if not tIpBase then tIpBase = {} end
end

function UserConnected(tUser)
    if tUser.sIP:InRange(rnum) then
        if not tIpBase[tUser.sIP] then
            Core.SendPmToUser(tUser, sBot, sMsg)
            tIpBase[tUser.sIP] = 1
            SaveToFile(tIpBase, "tIpBase", hFileName)
        end
    end
end

function SaveToFile(tTable, sTableName, sFile)
  local f = io.open(sFile, "r+")
  if f then
    Serialize(tTable, sTableName, f)
    f:flush()
    f:close()
  end
end

function Serialize(tTable, sTableName, hFile, sTab)
  sTab=sTab or ""
  hFile:write(sTab..sTableName.." = {\n")
  for i,v in pairs(tTable) do
    local sKey=(type(i)=="string") and string.format("[%q]",i) or string.format("[%d]",i)
    if(type(v)=="table") then Serialize(v,sKey,hFile,sTab.."\t")
    else
      local sValue=(type(value)=="string") and string.format("%q",v) or tostring(v)
      hFile:write(sTab.."\t"..sKey.." = "..sValue)
    end
    hFile:write(",\n")
  end
  hFile:write(sTab.."}")
end
RegConnected = UserConnected

вот такая ошибка вылезает:
Код
rassilka.lua:51: Не удалось загрузить список диапазонов
rassilka.lua:8: bad argument #1 to 'ipairs' (table expected, got nil)

Я так полагаю ,что вторая следует из первой...
Go to the top of the page
+Quote Post
Enyby
сообщение 26.1.2012, 10:52
Сообщение #2


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

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Замени:
Код
path = debug.getinfo(1).source:match("^@?(.+[/\\]).-$"):gsub("\\","/")

На:
Код
path = Core.GetPtokaXPath()
Go to the top of the page
+Quote Post
MaxFox
сообщение 26.1.2012, 12:45
Сообщение #3


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Enyby @ 26.1.2012, 11:52) *
Замени:
Код
path = debug.getinfo(1).source:match("^@?(.+[/\\]).-$"):gsub("\\","/")

На:
Код
path = Core.GetPtokaXPath()

не помогло...
Go to the top of the page
+Quote Post
Enyby
сообщение 26.1.2012, 12:53
Сообщение #4


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

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Мде.
Код
Ranges = path.."scripts/rassilka.txt"

Файл должен там быть, иначе будет ошибка.
И
Код
function LoadRanges()
    local f = io.open(Ranges,"r")
    if f then
        tRanges,tRangeNames = {},{}
        local rnum = 0
        for line in f:lines() do
            local ip1,ip2 = line:match("^(%d+%.%d+%.%d+%.%d+)%-(%d+%.%d+%.%d+%.%d+)")
            if ip1 and ip2 then
                if rnum > 0 then
                    table.insert(tRanges[rnum],{ip1:iptonumber(),ip2:iptonumber()})
                end
            else    
                local rname = line:match("^%[(.+)%]")
                if rname then
                    rnum = rnum+1
                    tRanges[rnum] = {}
                    tRangeNames[rnum] = rname
                end
            end
        end
        f:close()
        return true
    end
    return false
end
Go to the top of the page
+Quote Post
MaxFox
сообщение 26.1.2012, 12:55
Сообщение #5


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Enyby @ 26.1.2012, 13:53) *
Мде.
Код
Ranges = path.."scripts/rassilka.txt"

Файл должен там быть, иначе будет ошибка.
И
Раскрывающийся текст
Код
function LoadRanges()
    local f = io.open(Ranges,"r")
    if f then
        tRanges,tRangeNames = {},{}
        local rnum = 0
        for line in f:lines() do
            local ip1,ip2 = line:match("^(%d+%.%d+%.%d+%.%d+)%-(%d+%.%d+%.%d+%.%d+)")
            if ip1 and ip2 then
                if rnum > 0 then
                    table.insert(tRanges[rnum],{ip1:iptonumber(),ip2:iptonumber()})
                end
            else    
                local rname = line:match("^%[(.+)%]")
                if rname then
                    rnum = rnum+1
                    tRanges[rnum] = {}
                    tRangeNames[rnum] = rname
                end
            end
        end
        f:close()
        return true
    end
    return false
end

он там есть.. я проверял есесьно =)
и да.. ошбика ушла, осталась
Код
8: bad argument #1 to 'ipairs' (table expected, got nil)
Go to the top of the page
+Quote Post
Enyby
сообщение 26.1.2012, 12:57
Сообщение #6


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

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




А изменения вышеуказанные ты внес? У меня работает. По крайней мере старт работает. Все остальное не проверял.
Go to the top of the page
+Quote Post
MaxFox
сообщение 26.1.2012, 13:15
Сообщение #7


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Enyby @ 26.1.2012, 13:57) *
А изменения вышеуказанные ты внес? У меня работает. По крайней мере старт работает. Все остальное не проверял.

он там есть.. я проверял есесьно =)
и да.. ошбика ушла, осталась
Код
8: bad argument #1 to 'ipairs' (table expected, got nil)
Go to the top of the page
+Quote Post
MaxFox
сообщение 30.1.2012, 9:37
Сообщение #8


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(MaxFox @ 26.1.2012, 14:15) *
он там есть.. я проверял есесьно =)
и да.. ошбика ушла, осталась
Код
8: bad argument #1 to 'ipairs' (table expected, got nil)

ну таг?
Go to the top of the page
+Quote Post
Enyby
сообщение 30.1.2012, 10:22
Сообщение #9


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

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Код
function UserConnected(tUser)
    if tUser.sIP:InRange(rnum) then

rnum не инициализировано перед вызовом. И вообще не ясно зачем оно тут.
Go to the top of the page
+Quote Post
MaxFox
сообщение 2.2.2012, 14:22
Сообщение #10


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Enyby @ 30.1.2012, 11:22) *
Код
function UserConnected(tUser)
    if tUser.sIP:InRange(rnum) then

rnum не инициализировано перед вызовом. И вообще не ясно зачем оно тут.

Уважаемый, если вас не затруднит, не могли бы вы помочь с данным скриптом в полной мере...
Go to the top of the page
+Quote Post
Enyby
сообщение 2.2.2012, 14:28
Сообщение #11


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

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Не мог бы. Мне много чего тут не ясно. Например содержимое двух таблиц, загружающихся из файла, который тут не приведен. Судя по всему rnum означает номер диапазона. Только это лишено смысла, поскольку проверять нужно все диапазоны. Поэтому тут:
Код
function string.InRange(ip,rnum)
    local iIP = ip:iptonumber()
    for i,v in ipairs(tRanges[rnum]) do

Надо вставить перебор всех возможных rnum.
Go to the top of the page
+Quote Post
MaxFox
сообщение 2.2.2012, 15:22
Сообщение #12


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Enyby @ 2.2.2012, 15:28) *
Не мог бы. Мне много чего тут не ясно. Например содержимое двух таблиц, загружающихся из файла, который тут не приведен. Судя по всему rnum означает номер диапазона. Только это лишено смысла, поскольку проверять нужно все диапазоны. Поэтому тут:
Код
function string.InRange(ip,rnum)
    local iIP = ip:iptonumber()
    for i,v in ipairs(tRanges[rnum]) do

Надо вставить перебор всех возможных rnum.

в одном файле находятся указанные диапазоны, во второй файл пишутся ip которым уже было отправлено сообщение, чтобы при последующем конекте с этого ip сообщение не отправлялось.
Go to the top of the page
+Quote Post
Enyby
сообщение 2.2.2012, 15:29
Сообщение #13


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

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




beat_brick.gif У меня нет слов.
Я все это и сам вижу из кода. Но заниматься реверс-инжинирингом и восстанавливать их содержимое у меня нет времени. Если тебе нужна помощь, потрудись предоставить ВСЮ необходимую информацию. В данном случае - содержимое этих файлов.
Go to the top of the page
+Quote Post
MaxFox
сообщение 2.2.2012, 15:42
Сообщение #14


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Enyby @ 2.2.2012, 16:29) *
beat_brick.gif У меня нет слов.
Я все это и сам вижу из кода. Но заниматься реверс-инжинирингом и восстанавливать их содержимое у меня нет времени. Если тебе нужна помощь, потрудись предоставить ВСЮ необходимую информацию. В данном случае - содержимое этих файлов.

да не вопрос...

rassilka.txt как вариант может имееть следующее содержание
Раскрывающийся текст
Код
[Подсеть 1]
10.0.0.0-10.255.255.255
[Подсеть 2]
192.168.0.0-192.168.255.255
[Подсеть 3]
11.0.0.0-171.15.255.255
[Подсеть 4]
192.169.0.0-255.255.255.255


rasslka.dbs - изначально пустой, в последсвии он наполняется IP, например выглядит так:
Раскрывающийся текст
Код
tIpBase = {
    ["89.251.107.9"] = 1,
    ["2.95.137.83"] = 1,
    ["178.74.121.145"] = 1,
    ["92.126.86.184"] = 1,
    ["77.120.154.155"] = 1,
    ["78.40.81.15"] = 1,
    ["46.72.23.247"] = 1,
    ["188.26.247.204"] = 1,
    ["10.181.80.173"] = 1,
    ["178.162.66.227"] = 1,
    ["2.25.80.57"] = 1,
    ["10.196.96.145"] = 1,
    ["79.99.217.19"] = 1,
    ["109.195.190.222"] = 1,
    ["92.100.2.30"] = 1,
    ["46.72.28.239"] = 1,
    ["195.49.206.242"] = 1,
    ["10.188.248.185"] = 1,
    ["213.111.181.72"] = 1,
    ["178.210.57.175"] = 1,
    ["213.222.227.76"] = 1,
    ["46.159.86.47"] = 1,
}
Go to the top of the page
+Quote Post
Ksan
сообщение 2.2.2012, 16:40
Сообщение #15


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Цитата
rassilka.txt как вариант может имееть следующее содержание
Это ты называешь таблицей диапазонов, с которой будет работать скрипт? big_smile.gif
Это у тебя обычный текстовый файл, а не таблица.
Не, ну можно через это работать, только это будет называться лечить гланды с помощью проктолога..
Go to the top of the page
+Quote Post
MaxFox
сообщение 2.2.2012, 16:46
Сообщение #16


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Ksan @ 2.2.2012, 17:40) *
Это ты называешь таблицей диапазонов, с которой будет работать скрипт? big_smile.gif
Это у тебя обычный текстовый файл, а не таблица.
Не, ну можно через это работать, только это будет называться лечить гланды с помощью проктолога..

ок, внимательно слушаю ваш вариант... я всего лишь подсмотрел вариант в другом скрипте...
и насчет текстового файла... это да... прямо открыл мне глаза, кэп =)
Go to the top of the page
+Quote Post
Ksan
сообщение 2.2.2012, 17:58
Сообщение #17


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




MaxFox, посмотри на свою вторую таблицу. И сделай аналогичную таблицу, только вместо единичек вставляй вторую часть диапазонов в кавычках.
Вроде этого:
Код
tDiap = {
    ["10.0.0.0"] = {"10.255.255.255"},
}
Go to the top of the page
+Quote Post
MaxFox
сообщение 2.2.2012, 19:54
Сообщение #18


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(Ksan @ 2.2.2012, 18:58) *
MaxFox, посмотри на свою вторую таблицу. И сделай аналогичную таблицу, только вместо единичек вставляй вторую часть диапазонов в кавычках.
Вроде этого:
Код
tDiap = {
    ["10.0.0.0"] = {"10.255.255.255"},
}

иии? в чем разница? просто хотелось бы более детального объяснения...
Go to the top of the page
+Quote Post
MaxFox
сообщение 4.2.2012, 12:03
Сообщение #19


Продвинутый участник
****

Группа: Пользователи
Сообщений: 120
Регистрация: 25.5.2009
Пользователь №: 3 432
Спасибо сказали: 20 раз




Цитата(MaxFox @ 2.2.2012, 20:54) *
иии? в чем разница? просто хотелось бы более детального объяснения...

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

пример скрипта:
Раскрывающийся текст
Код
local sMsg = "Рассылаемый текст"
local hFileName = "rassilka.dbs"
local tRanks = {
    {"10.10.10.0","10.10.10.255"},
}

function iIp(sIP)
        local a, b, c, d = sIP:match"^(%d+)%.(%d+)%.(%d+)%.(%d+)$"
        return a * 16777216 + b * 65536 + c * 256 + d
end

function OnStartup()
    for k, v in ipairs(tRanks) do
        tRanks[k][1], tRanks[k][2] = iIp(v[1]), iIp(v[2])
    end
    sBot = SetMan.GetString(21)
    hFileName = Core.GetPtokaXPath().."scripts/"..hFileName
    if loadfile(hFileName) then
        dofile(hFileName)
    end
    if not tIpBase then tIpBase = {} end
end

function UserConnected(tUser)
    local iIP = iIp(tUser.sIP)
    for _, v in ipairs(tRanks) do
        if iIP > v[1] and iIP < v[2] then
            if not tIpBase[tUser.sIP] then
                Core.SendPmToUser(tUser, sBot, sMsg)
                tIpBase[tUser.sIP] = 1
                SaveToFile(tIpBase, "tIpBase", hFileName)
            end
        end
    end
end

function SaveToFile(tTable, sTableName, sFile)
  local f = io.open(sFile, "r+")
  if f then
    Serialize(tTable, sTableName, f)
    f:flush()
    f:close()
  end
end

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

RegConnected = UserConnected
VipConnected = UserConnected
Go to the top of the page
+Quote Post

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

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new Topic has attachmentsНерабочий скрипт ВИПа по шаре
16 Damaks 18 607 23.2.2023, 7:16 Посл. сообщение: mod
No new Topic has attachmentsMagneto - Бесплатный Скрипт Портала Обмена Dc-ссылками Для Локальной Сети
26 UserSide 39 393 27.8.2019, 11:01 Посл. сообщение: CyberGhost404
No New Posts От: Новогодний Скрипт
От темы с ID: 871
0 Евгений 2 807 15.10.2018, 21:44 Посл. сообщение: Евгений
No New Posts А бывают такой скрипт бота?
Скрипт который создает виртуалных юзеров, но с реальными шарами
5 MarkDark 7 349 26.12.2017, 10:47 Посл. сообщение: мамин_парень
No New Posts Скрипт: Бот который отвечает в лс
4 мамин_парень 7 043 11.11.2017, 5:57 Посл. сообщение: мамин_парень
No New Posts как сделать вот этот скрипт
12 мамин_парень 11 170 13.9.2017, 10:51 Посл. сообщение: dimetro
No New Posts Topic has attachmentsИщу скрипт переадресации (redirect)
Переадресация интернет-юзеров
3 AS_Com 6 651 27.8.2017, 8:05 Посл. сообщение: Ksan
No New Posts Topic has attachmentsСкрипт Thunder.lua
7 Евген76 14 554 9.8.2017, 11:48 Посл. сообщение: Ksan
No New Posts Требуется скрипт
Нужен скрипт запрета на подключение
5 Nikolaevich 8 831 20.8.2016, 19:52 Посл. сообщение: Ksan
No new ВАЖНО: Topic has attachmentsСкрипт банов для RusHub
тестим и комменьтруем
79 Wariner 99 588 28.9.2015, 13:34 Посл. сообщение: NeirRon
No New Posts Скрипт загрузки файла
1 FreeNas 6 009 21.7.2015, 10:58 Посл. сообщение: HackFresse
No new Как вызвать bash скрипт из Lua
14 Iskandark 16 001 3.3.2015, 12:42 Посл. сообщение: Iskandark
No new Topic has attachmentsНовогодний Скрипт
API2
22 Tsd 33 852 12.12.2014, 16:28 Посл. сообщение: Tsd
No New Posts Скрипт запрета видеть чат
запрет видеть чат
2 dimetro 6 841 5.12.2014, 17:37 Посл. сообщение: dimetro
No New Posts Topic has attachmentsпеределать скрипт kinozal.tv
6 BOKOREZ 12 059 30.10.2014, 18:29 Посл. сообщение: Dani_Filth

 



RSS Сейчас: 18.4.2024, 6:24