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

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

MyDC.ru _ Запросы скриптов для PtokaX _ Отправка сообщения в ПМ, в зависиммости от IP

Автор: MaxFox 21.4.2011, 11:01

Прошу помощи у местных гуру, в написании следующего скрипта. Необходимо, отправлять сообщения в ПМ только тем юзерам, IP которых не попадают в определенные промежутки IP. Отправлять по команде, из менюшки... собственно, честно не понимаю некоторых вещей, так и ненагуглил по этой теме, поэтому и прошу помочь.
мои изыскания на данную тему приведены ниже...

Раскрывающийся текст
Код
-- IP адреса кому рассылка не производится
local tRanks = {
    {"10.0.0.0","10.255.255.255"},
    {"192.168.0.0","192.168.255.255"},
}
-- Профили которые могут осуществлять расссылку
tProfiles = {
    [0] = 1,
    [1] = 0,
    [2] = 0,
    [3] = 0,
    [-1] = 0,
}
---------------------------------------------------------------
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)
end

function ChatArrival(tUser, sData)
    if tProfiles[tUser.iProfile] == 1 then
    local cmd = sData:match"%b<>%s+(%S+).*|"
    if sCmd then
        if sCmd == "!pmmsg" then
                local t = Core.GetOnlineUsers() or {}
                local iIP = iIp(tUser.sIP)
                    local bIsLocal = false
                    for _, v in ipairs(tRanks) do
                        if iIP > v[1] and iIP < v[2] then
                            bIsLocal = true
                            break
                        end
                    end
                    if not bIsLocal then
                        Core.SendPmToNick(tUser.sNick, sbot, sMsg)
                    end
        return true
        end
    end
    else
        Core.SendToUser(tUser, "<"..sBot.."> *** Вам недоступна данная функция")
    end
end


function OpConnected(tUser)
        Core.SendToUser(tUser, "$UserCommand 1 3 Управление\\Рассылка сообщений\\Сообщение в приват интернет пользователям $<%[mynick]> !pmmsg %[line:Сообщение:]|")
end

Автор: Ksan 21.4.2011, 11:31

1. local cmd = sData:match"%b<>%s+(%S+).*|" -- тут надо вместо cmd --> sCmd (исходя из последующего кода)
2. Ты не вытащил sMsg из sData и не подготовил его для дальнейшего применения в коде.
3. И да, зря ты сразу просле шапки функции ChatArrival(tUser, sData) написал проверку на право, это надо было сделать при отправке команды, примерно так:

Код
if sCmd == "!pmmsg" and tProfiles[tUser.iProfile] == 1 then
логику завершения проверки додумай сам.
4. В функции OpConnected(tUser) желательно создать проверку права на получение меню, как при отправке команды, иначе меню получат операторы, не имеющие права на команду, а это некорректно.

Автор: MaxFox 21.4.2011, 12:32

Цитата(Ksan @ 21.4.2011, 11:31) *
1. local cmd = sData:match"%b<>%s+(%S+).*|" -- тут надо вместо cmd --> sCmd (исходя из последующего кода)
2. Ты не вытащил sMsg из sData и не подготовил его для дальнейшего применения в коде.
3. И да, зря ты сразу просле шапки функции ChatArrival(tUser, sData) написал проверку на право, это надо было сделать при отправке команды, примерно так:
Код
if sCmd == "!pmmsg" and tProfiles[tUser.iProfile] == 1 then
логику завершения проверки додумай сам.
4. В функции OpConnected(tUser) желательно создать проверку права на получение меню, как при отправке команды, иначе меню получат операторы, не имеющие права на команду, а это некорректно.

2. Как прально вытащить и подготовить?

Автор: Артём 21.4.2011, 12:41

MaxFox, http://mydc.ru/topic2816.html в этом скрипте можно отправлять сообщения интернет пользователям не трогая локальных и наоборот, даже отдельным диапазонам можно отправлять, чем он тебе не понравился?

Автор: MaxFox 21.4.2011, 12:50

Цитата(Артём @ 21.4.2011, 12:41) *
MaxFox, http://mydc.ru/topic2816.html в этом скрипте можно отправлять сообщения интернет пользователям не трогая локальных и наоборот, даже отдельным диапазонам можно отправлять, чем он тебе не понравился?

1. В описание скрипта не вижу "можно отправлять всем, кроме указанных диапозонов"
2. Я его увидел 5 минут назад, еще до твоего поста.

Автор: Артём 21.4.2011, 13:02

Цитата
1. В описание скрипта не вижу "можно отправлять всем, кроме указанных диапозонов"

файл SendToRanges.txt с диапазонами тебе в помощь... Какие укажешь диапазоны, те и будут получать

Автор: MaxFox 21.4.2011, 13:06

Цитата(Артём @ 21.4.2011, 13:02) *
файл SendToRanges.txt с диапазонами тебе в помощь... Какие укажешь диапазоны, те и будут получать

да это и ежику понятно...
а теперь подумай, что проще, записать те диапозоны которые не будут получать, или записать ВЕСЬ спектр диапозонов интернета, кроме тех которые не должны получать? как бэ... идиотский труд... на мой взгляд... почти как удаление гланд, через попу =)

Автор: Артём 21.4.2011, 13:09

MaxFox, сам себе ищешь трудности big_smile1.gif проще указать в локальном те кому не хочешь отправлять, а в интернет кому хочешь, а потом через менюшку отправлять сообщения только Интернет, и всё! Или для тебя и это

Цитата
идиотский труд
? bad_smile.gif
P.S. Вот тебе пример, IP моей локалки и остальные-интернет IP, если отправлять буду интернет, то получат все кроме локальных
[Локальная сеть]
109.86.0.0-109.87.255.255
178.150.0.0-178.151.255.255
[Интернет]
0.0.0.0-109.85.255.255
109.88.0.0-178.149.255.255
178.152.0.0-255.255.255.255

Автор: MaxFox 21.4.2011, 13:31

Цитата(Артём @ 21.4.2011, 13:09) *
MaxFox, сам себе ищешь трудности big_smile1.gif проще указать в локальном те кому не хочешь отправлять, а в интернет кому хочешь, а потом через менюшку отправлять сообщения только Интернет, и всё! Или для тебя и это ? bad_smile.gif
P.S. Вот тебе пример, IP моей локалки и остальные-интернет IP, если отправлять буду интернет, то получат все кроме локальных
[Локальная сеть]
109.86.0.0-109.87.255.255
178.150.0.0-178.151.255.255
[Интернет]
0.0.0.0-109.85.255.255
109.88.0.0-178.149.255.255
178.152.0.0-255.255.255.255

согласен, так работать будет, но это неккоректно... ИМХО
читать http://mydc.ru/r/?http://ru.wikipedia.org/wiki/Классовая_адресация

Автор: Ksan 21.4.2011, 13:34

В любом случае достаточно одного списка (для удобства - который короче) big_smile.gif
Логика отправления - либо отправлять всем, кроме айпи из этого списка, либо отправлять только по айпи из этого списка.

Автор: MaxFox 21.4.2011, 13:35

Цитата(Ksan @ 21.4.2011, 13:34) *
В любом случае достаточно одного списка (для удобства - который короче) big_smile.gif
Логика отправления - либо отправлять всем, кроме айпи из этого списка, либо отправлять только по айпи из этого списка.

так что насчет пральной подготовки?
лучше ссыль, где можно подробно почитать... пока курю маны...

Автор: Ksan 21.4.2011, 13:57

Код
local sCmd, sMsg = sData:match"%b<>%s+(%S+)%s+(.*)|"

Где-то так.
С последним знаком разберёшься сам, думаю.

Автор: MaxFox 21.4.2011, 13:59

Цитата(Ksan @ 21.4.2011, 14:57) *
Код
local sCmd, sMsg = sData:match"%b<>%s+(%S+)%s+(.*)|"

Где-то так.
С последним знаком разберёшься сам, думаю.

учитывая, что в этой строке для меня нихрена не понятно... конечно разберусь extreme_sexy_girl.gif

Автор: Alexey 21.4.2011, 14:56

Как-то так:  Msg2Inet.lua ( 1.63 килобайт ) : 12


UPD: Обновил.

Автор: MaxFox 21.4.2011, 19:48

Цитата(Alexey @ 21.4.2011, 15:56) *
Как-то так:  Msg2Inet.lua ( 1.63 килобайт ) : 12


UPD: Обновил.

спасибо, будем изучать...