Переделка скриптов, Прошу помощи |
Здравствуйте, гость ( Вход | Регистрация )
Переделка скриптов, Прошу помощи |
11.8.2011, 0:40
Сообщение
#1
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
Всем привет. Прошу помочь мне с двумя скриптами, т. к. сам я не силён в этом деле.
В общем имеется на хабе 2 скрипта, первый показывает время в чате по запросу пользователя, второй блокирует рекламу с хабами. Сделать нужно следующее: Раскрыть! sBot = SetMan.GetString(21) RutSubs={ -- Описания раннего утра [1] = "Спать ещё надо)", [2] = "На работу проснулись?)", [3] = "Раннее утро.", [4] = "Петухи поют за окном)", [5] = "В школу пора?)", [6] = "Солнце встаёт)", } UtrSubs={ -- Описания утра [1] = "Утро.", [2] = "Утро на дворе)", [3] = "Школота учится)", [4] = "Скоро день)", [5] = "Утро за окном.", [6] = "На работу пора, чё в DC сидим?)", } DaySubs={ -- Описания дня [1] = "День)", [2] = "Сейчас день.", [3] = "Светлое время суток.", [4] = "Город как большой муравейник)", [5] = "Работа в городе кипит)", } SkveSubs={ -- Описания предвечернего времени суток [1] = "Скоро вечер.", [2] = "Люди возращаются с работы.", [3] = "Час пик в автобусах)", [4] = "Заканчивается рабочий день...", [5] = "Наступает вечер.", } VeSubs={ -- Описания вечера [1] = "Вечер.", [2] = "Молодёжь гуляет по паркам)", [3] = "Город зажигает фонари...)", [4] = "Рабочий день закончен!", [5] = "Затихает городская суета...", } PozdveSubs={ -- Описания позднего вечера [1] = "Поздний вечер)", [2] = "Спокойной ночи малыши уже кончились ", [3] = "Спать пора)", [4] = "Идущим спать, спокойной ночи)", [5] = "Город постепенно засыпает...", [6] = "Скоро ночь)", } NoSubs={ -- Описания ночи [1] = "Чё не спим?)", [2] = "Ночь, бегом спать!)", [3] = "Не спится?)", [4] = "Ночь.", [5] = "Тёмное время суток.", [6] = "Бессонница?)", [7] = "Тёёёёёмная ночь.....", [8] = "Шо не спим, хлопчик?", } function ChatArrival(tUser, sData) local cmd = sData:match"%b<>%s+(%S+).*|" if cmd == "!сегодня" or cmd == "!date" or cmd == "!дата" or cmd == "!today" then local iHour, sMsg = tonumber(os.date"%H"), " Точное время "..os.date("%X").." " if iHour >= 4 and iHour < 7 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. RutSubs[math.random(#RutSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 7 and iHour < 12 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. UtrSubs[math.random(#UtrSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 12 and iHour < 17 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. DaySubs[math.random(#DaySubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 17 and iHour < 18 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. SkveSubs[math.random(#SkveSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 18 and iHour <= 22 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. VeSubs[math.random(#VeSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 22 and iHour <= 24 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. PozdveSubs[math.random(#PozdveSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 00 and iHour <= 4 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. NoSubs[math.random(#NoSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") end return true end end function UserConnected(tUser) Core.SendToUser(tUser,"$UserCommand 1 3 Ресурсы\\Время\\Сегодня...$<%[mynick]> !дата|") end RegConnected,OpConnected=UserConnected,UserConnected Нужно чтобы в топике хаба отображалось время с датой. Как это сделать в данном скрипте? И здесь: Раскрыть! --[[ Скрипт антирекламы 1.1 на основе скрипта ChatFilter V1.02 by KoYoT Совместимость: ptokax 0.4.0.0, lua 5.13 by [fwx]Diver Переделано и дополнено [VHZ]ZmuriK ]]-- sBot = "Антиреклама" -- имя бота BotReg = 0 --показывать бота в списке пользователей BanMode = 1 -- 0 - перманентный бан по нику и IP -- 1 - временный бан по нику и IP. время задается в BanTime -- 2 - кик -- 3 - только предупреждение BanTime = 120 -- время бана в минутах, для режима 1 UserSay = 0 -- заменять фразу с рекламой на случайное выражение из MessageToAll text = "\r\n\t\tПредупреждение: Вы нарушили правилa хаба и будете забанены, если продолжите испытывать терпение администрации хаба.\r\nЕсли вы открыли свой хаб - это, конечно, просто замечательно. Но то, что вы своими сообщениями об этом пытаетесь изнасиловать мозг всех посетителей хаба одновременно - это уже перебор. Нужно заявить миру о своём детище, пишите на форумах. Если кто-то попросил дать ссылку - добро пожаловать к нему в приват." text_to_op = " пытался сообщить в общий чат следующую фразу:" sByByText = "Вы были забанены за рекламу!" sReason = "Нарушение правил хаба. Реклама ресурсов запрещена!" -- Кого нужно проверять (1 - да, 0 - нет) -- CanDo = { [-1] = 1, -- Незарегестрированный [0] = 0, -- Мастер [1] = 0, -- ОП [2] = 1, -- Вип [3] = 1, -- Зарегестрированный [4] = 1, -- Модератор } -- Что запрещаем adverTable = { "dchub","DCHUB","DChub","DcHub","DchUb", "DchuB","dCHub","dChUb","dChuB","dcHUb", "dcHuB","dchUB","DCHub","DChUb","DChuB", "DcHUb","DchUB","dCHUb","dCHuB","dChUB", "dcHUB","DCHUb","DCHuB","DChUB","DcHUB", "dCHUB","adc","d c h u b://","dchub://", "d*c*h*u*b://","d-c-h-u-b://","d/c/h/u/b://", "d`c`h`u`b://","d!c!h!u!b://","d@c@h@u@b://", "d#c#h#u#b://","d$c$h$u$b://","d%c%h%u%b://", "d^c^h^u^b://","d&c&h&u&b://","d(c(h(u(b://", "d)c)h)u)b://","d_c_h_u_b://","d=c=h=u=b://","d+c+h+u+b://", "d\c\h\u\b://","d?c?h?u?b://","d.c.h.u.b://", "d>c>h>u>b://","d,c,h,u,b://","d<c<h<u<b://", "d~c~h~u~b://","d№c№h№u№b://","d;c;h;u;b://", "d:c:h:u:b://","d|c|h|u|b://","d]c]h]u]b://", "d[c[h[u[b://","d{c{h{u{b://","d}c}h}u}b://", "adc","Adc","aDc","adC","ADc","aDC","AdC", "a d c://","adc://","a*d*cb://","a-d-c://", "a/d/c://","a`d`c://","a!d!c://","a@d@c://", "a#d#c://","a$d$c://","a%d%c://","a^d^c://", "a&d&c://","a(d(c://","a)d)c://","a_d_c://", "a=d=c://","a+d+c://","a\d\c://","a?d?c://", "a.d.c://","a>d>c://","a,d,c://","a<d<c://", "a~d~c://","a№d№c://","a;d;c://","a:d:c://", "a/d/c://","a|d|c://","a]d]c://","a[d[c://", "a{d{c://","a}d}c://","a d c://"," adc://", "f-h.sytes.net", } -- Что разрешаем safeTable = { "dchub://vlz.e-telecom.ru","dchub://10.50.48.12","dchub://vlz.sytes.net", } MessageToAll = { "Народ, кто хочет выпить пива? Угощаю.", "У меня сегодня праздник! Проставляюсь всем!", "Постучите мне по голове, чтобы я проснулся.", "Ау, где я?", "Народ. Ау. Где я?", "Что здесь происходит?", "Больше так пить не буду.", "Хочу быть взрослым.", "Хочу быть умным.", "Почему у меня усы не растут?", "На какую кнопку нужно нажимать чтобы выключить комп?", "абыРвалГ", "Народ. Какое сегодня число?", "Народ. Какой сегодня месяц?", "Не понял.", "Мои мысли, мои скакуны.", "Раздолбай я, раздолбай.", "Пора менять клавиатуру.", } ------------------------------[ Code Section ]------------------------------ function OnStartup() if BotReg == 1 then Core.RegBot(sBot, "", "", true) end PhrasLen = table.maxn(MessageToAll) end function ChatArrival(tUser,sData) if CanDo[tUser.iProfile] == 0 then return false end local s,e,msg = string.find(sData,"%b<>%s(.*)") if checkForAdvertising(msg) then if checkForSafe(msg) then return false end Core.SendPmToOps(sBot, "*** "..tUser.sNick.." "..text_to_op.." "..msg) if UserSay == 1 then Core.SendToAll("<"..tUser.sNick.."> "..MessageToAll[math.random(PhrasLen)]) end if BanMode == 0 then Core.SendToUser(tUser,"<"..sBot.."> "..sByByText) BanMan.Ban(tUser,sReason,sBot,true) end if BanMode == 1 then Core.SendToUser(tUser,"<"..sBot.."> "..sByByText) BanMan.TempBan(tUser,BanTime,sReason,sBot,true) end if BanMode == 2 then Core.SendToUser(tUser,"<"..sBot.."> "..sByByText) Core.Kick(tUser,sBot,sReason) end if BanMode == 3 then Core.SendToUser(tUser,"<"..sBot.."> *** "..text) end collectgarbage("collect") return true end end function ToArrival(tUser,sData) if CanDo[tUser.iProfile] == 0 then return false end local s,e,msg = string.find(sData,"%b<>%s(.*)") if checkForAdvertising(msg) then if checkForSafe(msg) then return false end Core.SendPmToOps(sBot, "*** "..tUser.sNick.." "..text_to_op.." "..msg) if UserSay == 1 then Core.SendToAll("<"..tUser.sNick.."> "..MessageToAll[math.random(PhrasLen)]) end if BanMode == 0 then Core.SendToUser(tUser,"<"..sBot.."> "..sByByText) BanMan.Ban(tUser,sReason,sBot,true) end if BanMode == 1 then Core.SendToUser(tUser,"<"..sBot.."> "..sByByText) BanMan.TempBan(tUser,BanTime,sReason,sBot,true) end if BanMode == 2 then Core.SendToUser(tUser,"<"..sBot.."> "..sByByText) Core.Kick(tUser,sBot,sReason) end if BanMode == 3 then Core.SendToUser(tUser,"<"..sBot.."> *** "..text) end collectgarbage("collect") return true end end function checkForAdvertising(msg) for _,v in ipairs(adverTable) do if string.find(msg, v) then return true end end return false end function checkForSafe(msg) for _,v in ipairs(safeTable) do if string.find(msg, v) then return true end end return false end Не работает вот это: -- Что разрешаем safeTable = { "dchub://vlz.e-telecom.ru","dchub://10.50.48.12","dchub://vlz.sytes.net", } Т. е. если писать эти адреса в чате, то они тоже блокируются, хотя не должны. Где ошибка? Надеюсь на Вашу помощь. Заранее спасибо. |
|
|
11.8.2011, 7:38
Сообщение
#2
|
|
Освоившийся участник Группа: Пользователи Сообщений: 260 Регистрация: 1.6.2010 Пользователь №: 6 968 Спасибо сказали: 83 раза |
Не работает вот это: -- Что разрешаем safeTable = { "dchub://vlz.e-telecom.ru","dchub://10.50.48.12","dchub://vlz.sytes.net", } Т. е. если писать эти адреса в чате, то они тоже блокируются, хотя не должны. Где ошибка? Всё работает, исключения не подпадают под запрет и проходят в чат. Кстати, в этом скрипте есть лазейка: если ввести в чат фразу, содержащую и запрет, и исключение, например Цитата Заходите на Пупкин-ХАБ! . . . . . dchub://pupkinhub.ru . . . . . (рекомендует администрация dchub://vlz.sytes.net) то она пройдёт в чат без фильтрации |
|
|
11.8.2011, 7:47
Сообщение
#3
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
[offtop]
Делаем ставки, господа, через сколько постов Дамакс кинет ссылку на свой скрипт? )) [/offtop] |
|
|
11.8.2011, 8:18
Сообщение
#4
|
|
Освоившийся участник Группа: Пользователи Сообщений: 260 Регистрация: 1.6.2010 Пользователь №: 6 968 Спасибо сказали: 83 раза |
[offtop] Делаем ставки, господа, через сколько постов Дамакс кинет ссылку на свой скрипт? )) [/offtop] По многочисленным просьбам трудящихся: Антиреклама для PtokaX Хороший скрипт не грех порекомендовать |
|
|
11.8.2011, 13:03
Сообщение
#5
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
|
|
|
11.8.2011, 15:50
Сообщение
#6
|
|
Освоившийся участник Группа: Пользователи Сообщений: 260 Регистрация: 1.6.2010 Пользователь №: 6 968 Спасибо сказали: 83 раза |
Fe(one)X
В исключениях нужно экранировать символы ( ) . % + - * ? [ ] ^ $ Для этого перед ними нужно поставить символ % (например dchub://vlz%.e%-telecom%.ru) |
|
|
11.8.2011, 18:52
Сообщение
#7
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
Fe(one)X В исключениях нужно экранировать символы ( ) . % + - * ? [ ] ^ $ Для этого перед ними нужно поставить символ % (например dchub://vlz%.e%-telecom%.ru) Спасибо, помогло. ;-) ЗЫ: А со скриптом времени поможете? |
|
|
11.8.2011, 20:25
Сообщение
#8
|
|
Освоившийся участник Группа: Пользователи Сообщений: 260 Регистрация: 1.6.2010 Пользователь №: 6 968 Спасибо сказали: 83 раза |
Вставляешь в конце скрипта:
Раскрывающийся текст Код function OnStartup() tmr = TmrMan.AddTimer (60*60000) -- проверка и смена топика каждые 60 минут end function OnTimer(tmr) local iHour = tonumber(os.date"%H") if iHour >= 4 and iHour < 7 then SetMan.SetString(10, RutSubs[math.random(#RutSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X")) elseif iHour >= 7 and iHour < 12 then SetMan.SetString(10, UtrSubs[math.random(#UtrSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X")) elseif iHour >= 12 and iHour < 17 then SetMan.SetString(10, DaySubs[math.random(#DaySubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X")) elseif iHour >= 17 and iHour < 18 then SetMan.SetString(10, SkveSubs[math.random(#SkveSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X")) elseif iHour >= 18 and iHour <= 22 then SetMan.SetString(10, VeSubs[math.random(#VeSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X")) elseif iHour >= 22 and iHour <= 24 then SetMan.SetString(10, PozdveSubs[math.random(#PozdveSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X")) elseif iHour >= 00 and iHour <= 4 then SetMan.SetString(10, NoSubs[math.random(#NoSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X")) end return true end Запускаешь скрипт в ровное время (9.00, 10.00, 11.00 и т.д.). Смена топика произойдёт через час после запуска. Можешь изменить время. |
|
|
23.8.2011, 21:21
Сообщение
#9
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
Damaks, спасибо конечно, но это немного нето. Дело в том, что у меня на хабе стоит скрипт Автотопик, который автоматически меняет топик каждые 20 секунд. Так вот можно сделать так, чтобы время отображалось рядом с топиком? Или сделать так чтобы время отображалось в автотопике? Заранее спасибо.
И ещё: Раскрыть! -- This script is converted with PtokaX LUA API Converter v0.9 at 10/17/08 09:10:38 -------------------------------------------------------------------- -- ChatFilter V1.02 by KoYoT -- Скрипт на блокировку рекламы хабов, мат и прочего. -- Безобидно отучает пользователей от злоупотребления терпением администратора хаба. -------------------------------------------------------------------- -- Эти фразы будут заменять не прошедшие цензуру строки -- Можно добавлять без ограничений Phrases = { [1] = "Реклама на хабе запрещена - Читай правила !rules", [2] = "Реклама на хабе запрещена - Наш сайт } local tProfiles = { [0] = 0, -- Мастер [1] = 0, -- ОПератор [2] = 0, -- VIP [3] = 1, -- Зарегистрированный пользователь [-1] = 1, -- Незарегистрированный пользователь } -- Ключевые буквосочетания, по которым вводим цензуру (добавляем сами под конкретные нужды) -- Чем их больше, тем больше нагрузка на процессор Filter = { [1] = "http", [2] = "ftp", [3] = "www", [4] = "%d+%.%d+%.%d+%.%d+", [5] = "%d+%,%d+%,%d+%,%d+", [6] = "%d+%-%d+%-%d+%-%d+", [7] = "%d+% %d+% %d+% %d+", [8] = "%d+%_%d+%_%d+%_%d+", } PhrasLen = #Phrases FilterLen = #Filter ----------------------------------------------- function ChatArrival(curUser,data) if tProfiles[curUser.iProfile] == 1 then Core.GetUserAllData(curUser) local _,_,sdata = string.find( data, "^%b<>%s(.*)$") if sdata then sdata = StringLower(sdata) for i = 1, FilterLen do if string.find( sdata, Filter[i]) then Core.SendToAll("<"..curUser.sNick.."> ".. Phrases[math.random(PhrasLen)]) return true end end end end end ----------------------------------------------- function StringLower(arg) -- Приводим текстовую строку в нижний регистр local res = "" local Byte, Len = nil, string.len(arg) arg = string.lower(arg) for i = 1, Len do Byte = string.byte(arg, i) if (Byte >= 192) and (Byte < 224) then Byte = Byte + 32 end if (Byte == 168) or (Byte == 184) then Byte = 229 end -- убираем проблему с Ё res = res..string.char(Byte) end return res end ----------------------------------------------- Помогите кто-нибудь сделать в этом скрипте таблицу исключений для заданных адресов. Увы времени разобраться самому категорически не хватает, т. к. помимо хаба ещё сайт, радиопроект и прочее, а также личная жизнь... В общем заранее спасибо за помощь. |
|
|
24.8.2011, 0:52
Сообщение
#10
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
...Увы времени разобраться самому категорически не хватает, т. к. помимо хаба ещё .... Думаешь, остальные занимаются только скриптами и им за это платят деньги? У всех есть другие дела, и может, поболее твоих. Думаю, если сильно надо, разберешься, тем более исключения делать - раз плюнуть, примеров исключений море во множестве скриптов! Извините.. |
|
|
24.8.2011, 13:27
Сообщение
#11
|
|
Освоившийся участник Группа: Пользователи Сообщений: 260 Регистрация: 1.6.2010 Пользователь №: 6 968 Спасибо сказали: 83 раза |
|
|
|
26.8.2011, 19:08
Сообщение
#12
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
Думаешь, остальные занимаются только скриптами и им за это платят деньги? У всех есть другие дела, и может, поболее твоих. Думаю, если сильно надо, разберешься, тем более исключения делать - раз плюнуть, примеров исключений море во множестве скриптов! Извините.. Ну что поделать если я полный нуб в этом деле... Вот сегодня попробовал, посидел, но ничего не вышло. Да, не буду спорить и у меня кривые руки... Вот к примеру попробовал с другого скрипта прикрутить таблицу исключений к этому, но в итоге ничего не работает: Раскрыть! -- This script is converted with PtokaX LUA API Converter v0.9 at 10/17/08 09:10:38 -------------------------------------------------------------------- -- ChatFilter V1.02 by KoYoT -- Скрипт на блокировку рекламы хабов, мат и прочего. -- Безобидно отучает пользователей от злоупотребления терпением администратора хаба. -------------------------------------------------------------------- -- Эти фразы будут заменять не прошедшие цензуру строки -- Можно добавлять без ограничений Phrases = { [1] = "Реклама на хабе запрещена - Читай правила !rules", [2] = "Реклама на хабе запрещена - Наш сайт } local tProfiles = { [0] = 0, -- Мастер [1] = 0, -- ОПератор [2] = 0, -- VIP [3] = 1, -- Зарегистрированный пользователь [-1] = 1, -- Незарегистрированный пользователь } -- Что разрешаем safeTable = { "http://vlz.e-telecom.ru","http://vlz.sytes.net", } -- Ключевые буквосочетания, по которым вводим цензуру (добавляем сами под конкретные нужды) -- Чем их больше, тем больше нагрузка на процессор Filter = { [1] = "http", [2] = "ftp", [3] = "www", [4] = "%d+%.%d+%.%d+%.%d+", [5] = "%d+%,%d+%,%d+%,%d+", [6] = "%d+%-%d+%-%d+%-%d+", [7] = "%d+% %d+% %d+% %d+", [8] = "%d+%_%d+%_%d+%_%d+", } PhrasLen = #Phrases FilterLen = #Filter ----------------------------------------------- function ChatArrival(curUser,data) if tProfiles[curUser.iProfile] == 1 then Core.GetUserAllData(curUser) local _,_,sdata = string.find( data, "^%b<>%s(.*)$") if sdata then sdata = StringLower(sdata) for i = 1, FilterLen do if string.find( sdata, Filter[i]) then Core.SendToAll("<"..curUser.sNick.."> ".. Phrases[math.random(PhrasLen)]) return true end end end end end ----------------------------------------------- function StringLower(arg) -- Приводим текстовую строку в нижний регистр local res = "" local Byte, Len = nil, string.len(arg) arg = string.lower(arg) for i = 1, Len do Byte = string.byte(arg, i) if (Byte >= 192) and (Byte < 224) then Byte = Byte + 32 end if (Byte == 168) or (Byte == 184) then Byte = 229 end -- убираем проблему с Ё res = res..string.char(Byte) end return res end ----------------------------------------------- function checkForSafe(msg) for _,v in ipairs(safeTable) do if string.find(msg, v) then return true end end return false end Где я допустил ошибку? Если написать адрес из таблицы исключений, то адрес блокируется. % пробовал ставить, но не помогло. Damaks, я уже понимаю, что порядком надоел, но со временем в топике так ничего и не выходит. Я вот попробовал поэкспериментировать с кодом времени в скрипте Автотопик, но опять же ничего не получилось. В общем думаю сделать вот как: Раскрыть! local sBot = SetMan.GetString(21) local iTimer = 20 local sTopic = Core.GetPtokaXPath().."scripts/Topic/topic.dat" tTopic = {} function OnStartup() if loadfile(sTopic) then dofile(sTopic) end TmrMan.AddTimer(iTimer*1000) end function OnTimer() if tTopic ~= {} then SetMan.SetString(10,tTopic[math.random(1,table.maxn(tTopic))]:sub(1,256)) end end function OpConnected(tUser) if tUser.iProfile == 0 then Core.SendToNick(tUser.sNick,"$UserCommand 1 3 Админцентр\\Топики хаба\\Добавить топик$<%[mynick]> !topic_add %[line:добавить топик]|") Core.SendToNick(tUser.sNick,"$UserCommand 1 3 Админцентр\\Топики хаба\\Просмотреть все топики$<%[mynick]> !topic_view|") Core.SendToNick(tUser.sNick,"$UserCommand 1 3 Админцентр\\Топики хаба\\Удалить топик$<%[mynick]> !topic_del %[line:введите номер топика]|") end end function ChatArrival(tUser, sData) local data = string.sub(sData, 1, -2) local _, _, cmd = string.find(data, "%b<>%s+(%S+)") if tUser.iProfile == 0 then if cmd == "!topic_add" then local _, _, msg = string.find(data, cmd.."(.*)") if not msg then Core.SendToUser(tUser, "<"..sBot.."> Вы не ввели топик!") else tTopic[table.maxn(tTopic)+1] = msg WriteTable(tTopic, " tTopic", sTopic) Core.SendToUser(tUser, "<"..sBot.."> Топик успешно добавлен!") end return true end if cmd == "!topic_view" then local msg = "Топики для автосмены:" for i,v in pairs(tTopic) do msg = msg.."\r\n\r\n\t ["..i.."] "..v end if msg == "Топики для автосмены:" then Core.SendToUser(tUser, "<"..sBot.."> Нет топиков!") else Core.SendToUser(tUser, "<"..sBot.."> "..msg) end return true end if cmd == "!topic_del" then local _, _, iNumb = string.find(data, "%b<>%s+%S+%s+(%d+)") if not iNumb then Core.SendToUser(tUser, "<"..sBot.."> Вы не ввели номер топика!") else if not tTopic[tonumber(iNumb)] then Core.SendToUser(tUser, "<"..sBot.."> Топика с таким номером не существует!") else table.remove (tTopic, tonumber(iNumb)) WriteTable(tTopic, " tTopic", sTopic) Core.SendToUser(tUser, "<"..sBot.."> Топик удачно удалён!") end end return true end end end function WriteTable(tTable, tablename, file) local handle = io.open(file, "w") Serialize(tTable, tablename, handle) handle:close() end function Serialize(tTable, sTableName, hFile, sTab) sTab = sTab or ""; hFile:write(sTab..sTableName.." = {\n" ); for key, value in pairs(tTable) do local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key); if(type(value) == "table") then Serialize(value, sKey, hFile, sTab.."\t"); else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value); hFile:write(sTab.."\t"..sKey.." = "..sValue); end hFile:write(",\n"); end hFile:write(sTab.."}"); end Имеется скрипт Автотопик, который содержит следующий набор топиков: Раскрыть! tTopic = { [1] = "Неофициальный хаб сети «Евротелеком»", [2] = "Приятного общения!", [3] = "Спасибо, что Вы с нами!", [4] = "Главный хаб города Волжского!", [5] = "Будьте с нами и зовите всех сюда!", [6] = "Добавляйте в избранные командой /fav", [7] = "1,5 года успешной работы!", } Топики хранятся в файле topic.dat Идея состоит в следующем, что если в конце топика написать к примеру os.date("%X"), то это понималось как время и приписывалось в конец топика, т. е. выглядеть это в файле должно вот как: Добавляйте в избранные командой /fav os.date("%X") или на хабе так: Добавляйте в избранные командой /fav 12:34:05 Как это реализовать? С кодом экспериментировал вот с этим: Раскрыть! function ChatArrival(tUser, sData) local cmd = sData:match"%b<>%s+(%S+).*|" if cmd == "!сегодня" or cmd == "!date" or cmd == "!дата" or cmd == "!today" then local iHour, sMsg = tonumber(os.date"%H"), " Точное время "..os.date("%X").." " if iHour >= 4 and iHour < 7 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. RutSubs[math.random(#RutSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 7 and iHour < 12 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. UtrSubs[math.random(#UtrSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 12 and iHour < 17 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. DaySubs[math.random(#DaySubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 17 and iHour < 18 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. SkveSubs[math.random(#SkveSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 18 and iHour <= 22 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. VeSubs[math.random(#VeSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 22 and iHour <= 24 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. PozdveSubs[math.random(#PozdveSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") elseif iHour >= 00 and iHour <= 4 then Core.SendToAll("<"..sBot.."> *** "..tUser.sNick..", ".. NoSubs[math.random(#NoSubs)].." Сегодня: "..os.date("%d.%m.%Y").." Московское время: "..os.date("%X").."") end return true end end Надеюсь, что понятно объяснил. Ребят помогите пожалуйста, буду очень Вам благодарен за помощь. ЗЫ: Damaks, про список хабов нашей области помню, как будет время составлю и передам тебе. |
|
|
26.8.2011, 20:57
Сообщение
#13
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Fe(one)X, в скрипте отправки топика измени одну строку так:
Код function OnTimer() if tTopic ~= {} then SetMan.SetString(10,tTopic[math.random(1,table.maxn(tTopic))]:sub(1,256).." Время: "..os.date("%X")) -- изменённая строка* end end И будет выводить твои топики + текущее время (но только на момент отправки, потом до следующего топика время будет висеть одно и то же). Может, лучше хотя бы без секунд? Тогда время в топике будет более корректно выглядеть. Если без секунд, то строка должна выглядет так: Код SetMan.SetString(10,tTopic[math.random(1,table.maxn(tTopic))]:sub(1,256).." Время: "..os.date("%H:%M")) -- изменённая строка*
|
|
|
30.8.2011, 23:17
Сообщение
#14
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
Ksan, спасибо огромное. Работает на ура.
А в скрипте антирекламы можешь подсказать где я допустил ошибку? |
|
|
31.8.2011, 0:39
Сообщение
#15
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Fe(one)X, функцию function checkForSafe(msg) ты написал, но нет обращения к ней, то есть, у тебя нет проверки вхождения выражения из таблицы исключений в сообщение юзера.
Короче, надо вместо строки Код if sdata then написать так Код if sdata and not checkForSafe(sdata) then |
|
|
1.9.2011, 0:30
Сообщение
#16
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
Ksan, всё работает, спасибо тебе огромнейшее.
Собственно это всё что мне требовалось, тему можно закрывать, ещё раз всем спасибо. |
|
|
1.9.2011, 5:07
Сообщение
#17
|
|
Активный участник Группа: Пользователи Сообщений: 93 Регистрация: 25.1.2010 Пользователь №: 5 828 Спасибо сказали: 7 раз |
Вот не знаю, как у вас, а у меня есть вопросы к автотопику:
-скрипт работает сам при запуске, время отображается, топик меняется, но 1. из меню команда на просмотр списка не работает у меня почему-то, хотя в осн чат и поступает 2. удаление номера топика также не происходит, хотя команда в чат проходит 3. тоже самое и с добавлением нового номера топика двигать в разные места пробовал... Подскажите, может, что не так делаю! ps. Просьба к Fe(one)X прикрепить сюда готовый скрипт тогда для АPI 2 |
|
|
21.12.2011, 2:05
Сообщение
#18
|
|
Активный участник Группа: Пользователи Сообщений: 58 Регистрация: 6.2.2010 Из: Россия, г. Волжский Пользователь №: 5 963 Спасибо сказали: 0 раз |
Вот не знаю, как у вас, а у меня есть вопросы к автотопику: -скрипт работает сам при запуске, время отображается, топик меняется, но 1. из меню команда на просмотр списка не работает у меня почему-то, хотя в осн чат и поступает 2. удаление номера топика также не происходит, хотя команда в чат проходит 3. тоже самое и с добавлением нового номера топика двигать в разные места пробовал... Подскажите, может, что не так делаю! ps. Просьба к Fe(one)X прикрепить сюда готовый скрипт тогда для АPI 2 Эм, если честно не знаю, я привык топики править в самом файле в папке со скриптами, поэтому не знаю есть эта проблема или нет, хотя по команде скрипт топики выводит в чат. У меня другая проблема, решил заменить скрипт статистики (старый был сильно большой по объёму), но мне надо в нём сделать вот что: Код скрипта function UserConnected(tUser) local Profile = (ProfMan.GetProfile(tUser.iProfile) and ProfMan.GetProfile(tUser.iProfile).sProfileName) or "Guest" Core.SendToUser(tUser,"\n[::] Информация: \n[::] : Ник " ..tUser.sNick.." \n[::] Класс : "..Profile.." ("..tUser.iProfile..") \n[::] Ваш ip: "..tUser.sIP.." \n[::] Страна: "..tostring(IP2Country.GetCountryName(tUser)).."\n") end RegConnected = UserConnected OpConnected = UserConnected Нужно чтобы за место страны скрипт выдавал информацию пользователю с какой он сети. Слово Страна на Сеть поменять не сложно, но что требуется добавить и изменить в самом коде? Диапазоны сетей имеются, нужен только образец. Заранее спасибо за помощь. |
|
|
21.12.2011, 16:29
Сообщение
#19
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Как самый простой вариант - в ip-to-country.csv прописать провадеров как отдельные страны. Нормальный вариант - сделать самому проверку на принадлежности IP нужным диапазон. Такой код есть во мнгоих скриптах. Можно оттуда выдрать и изменить под себя.
|
|
|
21.12.2011, 18:12
Сообщение
#20
|
|
Участник Группа: Пользователи Сообщений: 38 Регистрация: 7.6.2009 Пользователь №: 3 508 Спасибо сказали: 0 раз |
вот Этот скрипт добавит в описание юзера, его сеть
Скриптиг ------------------------------------------------------------------- Конфиг бота: ------------------------------------------------------------------- -- Профильные теги: tProfileTag= { [0] = "[:Администратор:]", [1] = "[:Оператор:]", [2] = "[:vip:]", [3] = "[:Зарегестрированные:]", [-1] = "[:Не Зарегестрированные:]" } -- Теги сети: RangeDesc = { "10.21.0.1-10.26.255.255-[Билайн Киев ]", --127.0.0.1-127.0.0.255 за место этого свой ипы на раён "10.0.0.1-10.255.255.255-[Билайн]", "10.41.0.1-10.44.255.255-[Билайн Запорожье]", "10.51.0.1-10.53.255.255-[Билайн Львов]", "10.61.0.1-10.64.255.255-[Билайн Харьков]", "10.71.0.0-10.71.255.255-[Билайн Днепропетровск]", "10.92.0.0-10.92.255.255-[Билайн ОДЕССА]", } -- Теги полов: tMaleTags = { ["x"] = "[:*:]", -- Неизвестно ["m"] = "[:М:]", -- Мужской ["w"] = "[:Ж:]", -- Женский } -- Тег при IP, не входящем в описанные: sNoDescMsg = "[Интернет]" -- Профили у которых "не будет" шары ( 1 - нет шары, 0 - есть ) by AУA™.lua tNoShareProfiles = { [0] = 0, -- Админ [1] = 0, -- ОПератор [2] = 0, -- VIP [3] = 0, -- Зарегеный юзер [-1] = 0, -- Не заргеный юзер } -- Можно ли будет скачать с юзера "без шары" (0 - нет, 1 - да) bCanDownload = 1 -- Будет ли откликаться юзер "без шары" на поисковые завпросы (0 - нет, 1 - да) bAnswToSearch = 1 -- Будет ли описание полсе тега (1), либо в описании будет только тег (0) bIsFuuDescr = 0 sMenuWay = "::Опции юзера::\\Ваш пол\\" -- Путь в меню к командам пола sSexTblWay = "Sex.tbl" -- Файл с полом юзеров ---------------------------------------------------------------- Конец конфига! ---------------------------------------------------------------- -- Дальше лучше ничего не меняй! ))) function OnStartup() sBot = SetMan.GetString(21) tNeedToSend = {} tNeedToSend2 = {} tSex = {} if loadfile(sSexTblWay) then dofile(sSexTblWay) end local tableover = Core.GetOnlineUsers() or {} for i, v in pairs(tableover) do table.insert(tNeedToSend, v.sNick) end TmrMan.AddTimer(1000, "OnTimer") end function OnExit() SaveToFile(sSexTblWay, tSex, "tSex") end function OnError(sErrorMsg) OnExit() end OpConnected = UserConnected RegConnected = UserConnected function MyINFOArrival(curUser,sData) table.insert(tNeedToSend, curUser.sNick) end function GetNickListArrival(curUser,sData) table.insert(tNeedToSend2, curUser.sNick) end tCmds = { ["mysex"] = function(sUser, sData) local _,_,arg1 = string.find(sData, "%b<>%s+%S+%s+(%S+)") if arg1 ~= nil then local sUserNick = sUser.sNick if arg1 == "м" then tSex[sUserNick] = "m" OnExit() MyINFOArrival(sUser) Core.SendToUser(sUser, "<"..sBot.."> Вы выбрали пол: мужской.") elseif arg1 == "ж" then tSex[sUserNick] = "w" OnExit() MyINFOArrival(sUser) Core.SendToUser(sUser, "<"..sBot.."> Вы выбрали пол: женский.") else Core.SendToUser(sUser, "<"..sBot.."> Укажите свой пол правильно: !mysex <м/ж>") end return true else Core.SendToUser(sUser, "<"..sBot.."> Вы не указали свой пол! Правильно: !mysex <м/ж>") return true end end, ["sexlist"] = function(sUser, sData) local _,_,arg1 = string.find(sData, "%b<>%s+%S+%s+(%S+)") if arg1 == nil then local sMsg = "\r\n\t"..string.rep("«»",25).."\r\n\t\tСписок мальчиков.\r\n\t"..string.rep("«»",25).."\r\n" for i,v in pairs(tSex) do if (v == "m") then sMsg = sMsg.. "\r\n\t\t• "..i end end sMsg = sMsg.."\r\n\r\n\t"..string.rep("«»",25).."\r\n\t\tСписок девочек.\r\n\t"..string.rep("«»",25).."\r\n" for i,v in pairs(tSex) do if (v == "w") then sMsg = sMsg.. "\r\n\t\t• "..i end end Core.SendToUser(sUser, "<"..sBot.."> "..sMsg) return true elseif arg1 == "м" then local sMsg = "\r\n\t"..string.rep("«»",25).."\r\n\t\tСписок мальчиков.\r\n\t"..string.rep("«»",25).."\r\n" for i,v in pairs(tSex) do if (v == "m") then sMsg = sMsg.. "\r\n\t\t• "..i end end Core.SendToUser(sUser, "<"..sBot.."> "..sMsg) return true elseif arg1 == "ж" then local sMsg ="\r\n\t"..string.rep("«»",25).."\r\n\t\tСписок девочек.\r\n\t"..string.rep("«»",25).."\r\n" for i,v in pairs(tSex) do if (v == "w") then sMsg = sMsg.. "\r\n\t\t• "..i end end Core.SendToUser(sUser, "<"..sBot.."> "..sMsg) return true end end, } function ChatArrival(sUser,sData) local sData = string.sub(sData, 1, -2) local _,_,cmd = string.find(sData, "%b<>%s+[%!%+%?%#](%S+)") if tCmds[cmd] then tCmds[cmd](sUser, sData); return true else return 0 end end function OnTimer() ReWrite() end function ReBuilMyINFO(curUser) local descript, userip = nil, CalcIP(curUser.sIP) if userip ~= 0 then for index,descIP in pairs(RangeDesc) do local _,_,startRange,endRange,RangeDescript = string.find(descIP, "(.*)-(.*)-(.*)") startRange = CalcIP(startRange) endRange = CalcIP(endRange) if userip>=startRange and userip<=endRange then descript = RangeDescript end end if descript == nil then descript = sNoDescMsg end Core.GetUserData(curUser, 16) local nick,share = curUser.sNick,curUser.iShareSize if tNoShareProfiles[curUser.iProfile] == 1 then share = 0 end local sMale = tMaleTags["x"] if tSex[curUser.sNick] then sMale = tMaleTags[tSex[curUser.sNick]] end local addtag = descript.." "..tProfileTag[curUser.iProfile].." "..sMale if bIsFuuDescr == 1 then addtag = addtag.." "..curUser.sDescription end return "$MyINFO $ALL "..nick.." "..addtag.."$ $ $ $"..share.."$" end end function CalcIP(ipcalc) local _,_,a,b,c,d = string.find(ipcalc, "(%d+).(%d+).(%d+).(%d+)") local calc = 0 if (tonumber(a) and tonumber(b) and tonumber© and tonumber(d)) then calc = a*16777216 + b*65536 + c*256 + d return calc else return 0 end end function OverWrite(curUser) local tableover = Core.GetOnlineUsers() or {} for i, Userover in pairs(tableover) do local sNewMyINFO = ReBuilMyINFO(Userover) Core.SendToUser(curUser, sNewMyINFO) end end function ReWrite() for i, v in pairs(tNeedToSend) do local v2 = Core.GetUser(v) if v2 then local sNewMyINFO = ReBuilMyINFO(v2) Core.SendToAll(sNewMyINFO) Core.SendToUser(v2, sNewMyINFO) tNeedToSend[i] = nil end end for i, v in pairs(tNeedToSend2) do local v3 = Core.GetUser(v) if v3 then local tableover = Core.GetOnlineUsers() or {} for k, l in pairs(tableover) do local sNewMyINFO = ReBuilMyINFO(l) Core.SendToUser(v3, sNewMyINFO) end tNeedToSend2[i] = nil end end end function SearchArrival(curUser, sData) if bAnswToSearch == 0 then local tableover = Core.GetOnlineUsers() or {} for i, Userover in pairs(tableover) do if tNoShareProfiles[Userover.iProfile] ~= 1 then Core.SendToUser(Userover, sData) end end return 1 end end function ConnectToMeArrival(curUser, sData) if bCanDownload == 0 then local _,_, sToNick = string.find(sData, "^$%S+%s+(%S+)") local sToNick = Core.GetUser(sToNick) if sToNick and tNoShareProfiles[sToNick.iProfile] == 1 then return 1 end end end MultiConnectToMeArrival = ConnectToMeArrival RevConnectToMeArrival = ConnectToMeArrival SRArrival = ConnectToMeArrival UDPSRArrival = ConnectToMeArrival function SaveToFile(sFileWay, tTable, sTableName) local sHandle = io.open(sFileWay,"w+") sHandle:write(Serialize(tTable, sTableName)) sHandle:flush() sHandle:close() end function Serialize(tTable, sTableName, sTab) sTab = sTab or "" sTmp = "" sTmp = sTmp..sTab..sTableName.." = {\n" for key, value in pairs(tTable) do local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key); if(type(value) == "table") then sTmp = sTmp..Serialize(value, sKey, sTab.."\t"); else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value); sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue end sTmp = sTmp..",\n" end sTmp = sTmp..sTab.."}" return sTmp end А вот этот при входе юзера посылает сообщение с какой он сети. и Вообще имеет Очень хороший функционал по управлению юзерами разных сетей. называется NetworkSeparation ДА ВОТ ЖЕШ! ОН мож что пригодится? все брал тут |
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
ВАЖНО: Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
1 049 | Wariner | 991 361 | 3.2.2019, 12:51 Посл. сообщение: MIKHAIL | |
ВАЖНО: Модули для скриптов RusHub | 26 | Setuper | 45 394 | 21.3.2017, 17:31 Посл. сообщение: Alexey | |
От: Вопросы Разработчикам Скриптов От темы с ID: 173 |
0 | MIKHAIL | 4 337 | 23.1.2015, 0:56 Посл. сообщение: MIKHAIL | |
От: Установка скриптов От темы с ID: 5657 |
0 | MIKHAIL | 4 800 | 29.7.2014, 23:37 Посл. сообщение: MIKHAIL | |
Установка скриптов Нужна помощь по установке |
2 | _wRz_ | 7 309 | 29.7.2014, 16:11 Посл. сообщение: Артём | |
От: Вопросы Разработчикам Скриптов От темы с ID: 173 |
29 | Wariner | 25 996 | 28.1.2014, 13:11 Посл. сообщение: Alexey | |
Единая платформа для скриптов Обсуждения вопроса создания единой платформы скриптов |
5 | Enyby | 9 056 | 18.1.2012, 20:15 Посл. сообщение: Setuper | |
Вопросы Разработчикам Скриптов с SQL вопросы по скриптам (мелкие вопросы) |
101 | Wariner | 62 320 | 6.12.2011, 0:34 Посл. сообщение: Enyby | |
ВАЖНО: Метод Быстрого Перевода Скриптов Под API_1 Самостоятельный быстрый перевод из API_2 ---> в API_1 |
30 | Setuper | 51 272 | 14.8.2011, 21:16 Посл. сообщение: Олешка | |
От: Переделка скриптов От темы с ID: 4941 |
6 | Ksan | 9 692 | 12.8.2011, 11:33 Посл. сообщение: Ksan | |
ВАЖНО: Запросы Скриптов Ваши идеи по разработке скриптов под HeXHuB |
36 | Setuper | 49 339 | 16.5.2011, 9:40 Посл. сообщение: ANDRBEST | |
Документация DBHub - Написание скриптов на Perl | 0 | Артём | 7 673 | 20.10.2010, 18:08 Посл. сообщение: Артём | |
Заготовки скриптов для PtokaX Делимся болванками скриптов |
4 | alex82 | 11 751 | 11.10.2010, 2:49 Посл. сообщение: alex82 | |
ВАЖНО: Запросы Скриптов | 6 | njnj | 13 622 | 3.7.2010, 8:45 Посл. сообщение: Accelerator | |
От: Вопросы Разработчикам Скриптов От темы с ID: 173 |
0 | Alexey | 3 232 | 29.6.2010, 15:11 Посл. сообщение: Alexey |
|
Сейчас: 26.11.2024, 22:45 |