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, сам себе ищешь трудности проще указать в локальном те кому не хочешь отправлять, а в интернет кому хочешь, а потом через менюшку отправлять сообщения только Интернет, и всё! Или для тебя и это
Цитата
идиотский труд
?
P.S. Вот тебе пример, IP моей локалки и остальные-интернет IP, если отправлять буду интернет, то получат все кроме локальных
MaxFox, сам себе ищешь трудности проще указать в локальном те кому не хочешь отправлять, а в интернет кому хочешь, а потом через менюшку отправлять сообщения только Интернет, и всё! Или для тебя и это ?
P.S. Вот тебе пример, IP моей локалки и остальные-интернет IP, если отправлять буду интернет, то получат все кроме локальных
согласен, так работать будет, но это неккоректно... ИМХО читать http://mydc.ru/r/?http://ru.wikipedia.org/wiki/Классовая_адресация
Автор: Ksan 21.4.2011, 13:34
В любом случае достаточно одного списка (для удобства - который короче) Логика отправления - либо отправлять всем, кроме айпи из этого списка, либо отправлять только по айпи из этого списка.
Автор: MaxFox 21.4.2011, 13:35
Цитата(Ksan @ 21.4.2011, 13:34)
В любом случае достаточно одного списка (для удобства - который короче) Логика отправления - либо отправлять всем, кроме айпи из этого списка, либо отправлять только по айпи из этого списка.
так что насчет пральной подготовки? лучше ссыль, где можно подробно почитать... пока курю маны...
Автор: 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+(.*)|"
Где-то так. С последним знаком разберёшься сам, думаю.
учитывая, что в этой строке для меня нихрена не понятно... конечно разберусь