Предупреждения, API2 |
Здравствуйте, гость ( Вход | Регистрация )
Предупреждения, API2 |
28.6.2009, 17:01
Сообщение
#1
|
|
Developer Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза |
Кто-нибудь может написать скрипт предупреждений? Этот не предлагать! Не особо нравится он...
Идея такова: Администратор и/или оператор хаба выписывает пользователю предупреждение. В ЛС ему приходит что то типо такого: Цитата <Security> Вам было выписано предупреждение администратором: STRELOK по причине: тест [ Предупреждений: 1/5 ] Т.е. пользователь получает новое предупреждение, рядом в квадратных скобках ему пишет сколько у него всего предупреждений(без причины) и сколько возможно иметь. Когда отметка предупреждений 5, пользователя бы банило на N часов/недель/месяцев/лет/пожизненно(Можно было бы выбрать, какой бан, пожизненный или временный), если временный бан, то скажем в BanTime устанавливаем время в часах, а в BanType можно было бы выбрать, какой бан, временный или постоянный (0 - Временный; 1 - постоянный). Ну и в параметре sReason указать, какая будет причина бана Также у пользователя будет в меню пукт Предупреждения, где он бы мог смотреть сколько у него предупреждений, их причины и того, кто их выписал Важно!!! Чтобы предупреждения не снимались автоматически! Чтобы их мог снять только администратор или оператор, если юзер обратится к нему Реализуйте |
|
|
29.6.2009, 6:59
Сообщение
#2
|
|
Developer Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза |
Попытался сам, но не получилось :(
CODE sBot = SetMan.GetString(21) BanType = 0 -- Тип Бана (0 - Временный; 1 - постоянный ) BanTime = 30 -- На сколько банить пользователя(в днях) sReason = "Ваш уровень предупреждений достиг максимальной отметки!" -- Причина бана sPercent = 5 --максимально допустимое число предупреждений tProfile = { [0] = 1, [1] = 1, } tWarn = {} function OnStartup() sWarn = Core.GetPtokaXPath().."scripts/Warn/WarnTable.dat" if loadfile(sWarn) then dofile(sWarn) end TmrMan.AddTimer(nTime*60000, "OnExit") end function OnExit() WriteTable(tWarn, "tWarn", sWarn) end function UserConnected(tUser) Core.SendToUser(tUser,"$UserCommand 1 3 Пользователь\\Предупреждения$<%[mynick]> !mywarn|") if tProfile[tUser.iProfile] == 1 then Core.SendToUser(tUser,"$UserCommand 1 3 Меню админа\\Дать предупреждение$<%[mynick]> !warn %[line:Введите ник] %[line:Введите причину]|") Core.SendToUser(tUser,"$UserCommand 1 3 Меню админа\\Снять предупреждение$<%[mynick]> !delwarn %[line:Введите ник]|") Core.SendToUser(tUser,"$UserCommand 1 3 Меню админа\\Список предупреждённых$<%[mynick]> !warntable|") end end OpConnected = UserConnected RegConnected = UserConnected function ChatArrival(tUser,sData) local sData = string.sub(sData,1,-2) local _,_,cmd = string.find(sData, "%b<>%s+(%S*)") if cmd == "!warn" then if tProfile[tUser.iProfile] == 1 then if not tWarn[sNick] then local _,_,msg = string.find(sData, "%b<>%s+%S+%s+(.+)") twarn[sNick] = msg WriteTable(tWarn, "tWarn", sWarn) local _,_,sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)") local _,_,sReason = string.find(sData, "%b<>%s+%S+%s+(.*)") if not sReason then Core.SendToUser(tUser, "<"..sBot.."> Пожалуйста, введите причину!") end if not sNick then Core.SendToUser(tUser, "<"..sBot.."> Введите ник!") else tWarn[tUser.sNick] = {} tWarn[tUser.sNick].Nick = sNick tWarn[tUser.sNick].Reason = sReason tWarn[tUser.sNick].Time = os.time() NumberWarn = " / "..sPercent WarnMsg = "Вы были предупреждены пользователем "..tUser.sNick.." по причине "..sReason.." [ Предупреждений: "..NumberWarn.." ]" Core.SendPmToNick(sNick, sBot, WarnMsg) end end else Core.SendToUser(tUser, "<"..sBot.."> На хабе нет пользователя с таким ником!") end else Core.SendToUser(tUser, "<"..sBot.."> У вас недостаточно прав для использования этой команды!") end return true end elseif cmd == "!delwarn" then if tProfile[tUser.iProfile] == 1 then if tWarn[sNick] then tWarn[sNick] = nil WriteTable(tWarn, "tWarn", sWarn) local _,_,sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)") local _,_,sReason = string.find(sData, "%b<>%s+%S+%s+(.*)") if not sNick then Core.SendToUser(tUser, "<"..sBot.."> Вы не ввели ник!") end if not sReason then Core.SendToUser(tUser, "<"..sBot.."> Введите причину поощрения!") end if not tWarn[sNick] then Core.SendToUser(tUser, "<"..sBot.."> Ошибка, Предупреждение не было снято!") else warn = "" DelWarnMsg = "Предупреждение "..warn.." было снято пользователем "..tUser.sNick.." по причине "..sReason Core.SendPmToNick(sNick, sBot, DelWarnMsg) end tAway[sNick] = nil else Core.SendToUser(tUser, "<"..sBot.."> На хабе нет пользователя с данным ником!") end else Core.SendToUser(tUser, "<"..sBot.."> У вас недостаточно прав для использования этой команды!") end return true end elseif cmd == "!warntable" then if tProfile[tUser.iProfile] == 1 then sMsg = "Список предупреждённых пользователей:\r\n\r\n" iCount = 0 for sNick,sData in pairs(tWarn) do sMsg = sMsg.."\t\tНик: "..sNick.."\t\tПричина: "..sReason.."\t\t" iCount = iCount + 1 end if not iCount then Core.SendToUser(tUser,"<"..sBot.."> В списке нет предупреждённых пользователей.") else Core.SendToUser(tUser,"<"..sBot.."> "..sMsg) end else Core.SendToUser(tUser, "<"..sBot.."> У вас недостаточно прав для использования этой команды!") end return true end elseif cmd == "!mywarn" then sMsg = "Вы были предупреждены "..NumberWarn..". За снятием предупреждений обращайтесь к оператору или администратору хаба." Core.SendPmToUser(tUser, sBot, sMsg) else Core.SendToUser(tUser, "<"..sBot.."> У вас нет предупреждений!") end return true end end function GetFile(file) local f = io.open(file, "r") local message = f:read("*all") f:close() return message end function SaveToFile(sFileWay, tTable, sTableName) local sHandle = io.open(sFileWay,"w+") Serialize(tTable, sTableName, sHandle) sHandle:flush() sHandle:close() end function Serialize(tTable, sTableName, sHandle, sTab) local sTab = sTab or "" sHandle: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, sHandle, sTab.."\t") else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value) sHandle:write(sTab.."\t"..sKey.." = "..sValue) end sHandle:write(",\n") end sHandle:write(sTab.."}") end Помогите довести до ума :( |
|
|
29.6.2009, 9:07
Сообщение
#3
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
а к автору обращаться не пробовал?
|
|
|
6.7.2009, 17:18
Сообщение
#4
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
|
|
|
18.7.2009, 17:15
Сообщение
#5
|
|
PtokaX DC Hub 0.4.1.2 Группа: Пользователи Сообщений: 203 Регистрация: 20.1.2009 Из: Republic of Belarus, Minsk, Uruchie, Avalon. Пользователь №: 1 890 Спасибо сказали: 4 раза |
Скрипт стал??? Есть надежда на его осуществление или нет?
|
|
|
22.7.2009, 17:16
Сообщение
#6
|
|
Участник Группа: Пользователи Сообщений: 35 Регистрация: 7.7.2009 Из: Тула Пользователь №: 3 818 Спасибо сказали: 3 раза |
Когда сделаете этот скрипт? очень жду!
|
|
|
25.7.2009, 8:40
Сообщение
#7
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
В экзекуторе смог найти код,но не смог додуматся как ожевить его в отделном скрипте....
Ожевите кто сможет плиз Zhaloby.rar ( 4.48 килобайт ) Кол-во скачиваний: 12 |
|
|
20.8.2009, 14:43
Сообщение
#8
|
|
Участник Группа: Пользователи Сообщений: 35 Регистрация: 7.7.2009 Из: Тула Пользователь №: 3 818 Спасибо сказали: 3 раза |
Ну когда замутите эдакий скрипт?
|
|
|
20.8.2009, 17:07
Сообщение
#9
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
VeNick когда ты будешь нам помогать тогда и замутим
|
|
|
5.9.2009, 15:03
Сообщение
#10
|
|
PtokaX DC Hub 0.4.1.2 Группа: Пользователи Сообщений: 203 Регистрация: 20.1.2009 Из: Republic of Belarus, Minsk, Uruchie, Avalon. Пользователь №: 1 890 Спасибо сказали: 4 раза |
В общем фиг кто нам поможет я так понял=(
|
|
|
16.9.2009, 14:49
Сообщение
#11
|
|
Активный участник Группа: Пользователи Сообщений: 76 Регистрация: 6.12.2008 Из: Украина Пользователь №: 1 340 Спасибо сказали: 1 раз |
Ищу нечто подобное, был бы безумно благодарен, если кто-нибудь написал/стащил/оптимизировал бы такой скрипт
|
|
|
17.9.2009, 12:15
Сообщение
#12
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Выскажу пару мыслей по сабжу.
В настоящее время занимаюсь решением этой задачки, из любви к искусству, т.к на нашем хабе бот указанной направленности не нужен. Взяты социалистические обязательства : к празднику Нового Года сдать в эксплуатацию комплексный бот, где сабж фигурировал бы как опциональный подключаемый модуль. В чем отличие устного предупреждения от кика или темпбана? В том, что устное предупреждение - это не есть встроенная команда Птоки, и учет/обработка ее возможны только средствами самого скрипта. В чем тонкость учета таких предупреждений? В том, что должна быть как минимум заложенная возможность их учета,просмотра, статистики в общем ряду с обычными киками/темпбанами. Иначе получится нелогично : учет по устным предупреждениям есть, а учет по более серьезным проступкам, за которые были назначены кики или баны - если и есть, то в каком-то другом месте (скрипте). В отлаживаемом боте условно и те, и другие я называю баскетбольным термином "falls". Другая тонкость - проблема идентификации. В идеале каждый юзер должен идентифицироваться со стопроцентной точностью, вне зависимости от его текущего ника или IP, но достижение такого идеала пока под большим вопросом, поэтому пока что - сделаны два отдельных параллельных учета, для ников и IP, а в качестве дополнительного идентификатора есть привязка ника к имени провайдера, например, <Хулиган_Вася>-аль-Корбина(Москва) В чем преимущество интегрированного решения, как альтернативы наличию кучи разношерстных банных, разбанных, предупредительных и уведомительных ботов? Преимущество в централизации, унификации многих прикладных функций, концентрации инфы по всем нарушениям (кикам, темпбанам, пермбанам, и вот этим самым "устным предупреждениям") в одном месте, а значит, более точной и внятной картине для ОПа, который с ними работает, в плане того, "кто есть ху" на хабе. Также, должна быть, и в принципе уже реализована, возможность создания "правил" для каждого конкретного нарушения - будь то нарушение, за которое следует кик/темпбан от ОПа или бота, либо нарушение, за которое следует "устное предупреждение/выговор", выписанный лично ОПом. Таким образом, получаем два направления работы : учет "абсолютного" количества "фолов",и отдельные учеты для каждого созданного и установленного "правила". Допустим, "абсолютный порог терения" до автозабана - 5 любых нарушений, и несколько правил с различными причинно-связанными порогами - например, правило номер 1 имеет "кор причины" ( Reason Core ) "предупреждение за мат в чате" и порог, равный 3, и чтобы попасть под уже серьезные карательные меры, нужно набрать именно 3 "фола" с указанной формулировкой, и т.д. Правила отрабатываются, понятное дело, автоматически, с внесением соответствующей записи в лог и отсылкой соответствующих уведомлений как ОПам, так и преступнику. Есть и модуль банов/киков/устных предупреждений со стандартными формулировками, есть и средства автоматического создания правил с умолчательными параметрами, как на основе имеющихся шаблонных наказаний/предупреждений, так и на основе анализа формулировки причины проходящего через ЧатАрривал кика/бана/предупреждения. Есть возможность "обнуления" оперативного счета нарушений для ника или IP, полный лог нарушений при этом сохраняется в неизменном виде, и при желании можно даже "припомнить старые грехи" нику или IP - т.е. извлечь все причинно-связанные количества нарушений и абсолютное количество нарушений в оперативную таблицу наблюдения ("актуальный табличный лог") и, таким образом, поставить юзера-рецидивиста опять под дамоклов меч правосудия и угрозу уже серьезного забана. Есть и "неприкасаемый список" ников, IP, профилей, в отношении которых все наказания блокируются. А вот насчет меню просмотра собственных проступков для юзеров-хулиганов - мысль интересная и фича наверное нужная, попробую и ее реализовать, в качестве опции. Вот такие соображения. Если есть какие-то еще предложения, пожелания - давайте обсуждать. |
|
|
17.9.2009, 12:25
Сообщение
#13
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
|
|
|
24.1.2010, 22:07
Сообщение
#14
|
|
Освоившийся участник Группа: Пользователи Сообщений: 226 Регистрация: 11.11.2009 Пользователь №: 4 990 Спасибо сказали: 18 раз |
1
|
|
|
24.1.2010, 22:30
Сообщение
#15
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Хорошо, когда будем делать баны окончательно под русхаб попробуем довести до таких функций. Жалко district не пожелал остаться на форуме, он обещал скрипт Спросите, может сделал уже.
P.S.: а мы все его тут с нетерпением ждем... |
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
Скрипт предупреждения ботом хаба | 3 | Milena | 7 254 | 7.7.2010, 11:53 Посл. сообщение: Ksan | |
Предупреждения API2 |
2 | Алекс | 6 027 | 7.1.2009, 11:25 Посл. сообщение: Setuper |
|
Сейчас: 27.11.2024, 7:25 |