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

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

MyDC.ru _ Запросы скриптов для PtokaX _ Предупреждения

Автор: STRELOK 28.6.2009, 17:01

Кто-нибудь может написать скрипт предупреждений? http://mydc.ru/topic186.html не предлагать! Не особо нравится он... ops.gif

Идея такова:
Администратор и/или оператор хаба выписывает пользователю предупреждение. В ЛС ему приходит что то типо такого:

Цитата
<Security> Вам было выписано предупреждение администратором: STRELOK по причине: тест [ Предупреждений: 1/5 ]

Т.е. пользователь получает новое предупреждение, рядом в квадратных скобках ему пишет сколько у него всего предупреждений(без причины) и сколько возможно иметь.

Когда отметка предупреждений 5, пользователя бы банило на N часов/недель/месяцев/лет/пожизненно(Можно было бы выбрать, какой бан, пожизненный или временный), если временный бан, то скажем в BanTime устанавливаем время в часах, а в BanType можно было бы выбрать, какой бан, временный или постоянный (0 - Временный; 1 - постоянный). Ну и в параметре sReason указать, какая будет причина бана

Также у пользователя будет в меню пукт Предупреждения, где он бы мог смотреть сколько у него предупреждений, их причины и того, кто их выписал big_smile.gif

Важно!!! Чтобы предупреждения не снимались автоматически! Чтобы их мог снять только администратор или оператор, если юзер обратится к нему big_smile.gif

Реализуйте big_smile.gif

Автор: STRELOK 29.6.2009, 6:59

Попытался сам, но не получилось :(

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

Помогите довести до ума :(

Автор: Wariner 29.6.2009, 9:07

а к автору обращаться не пробовал?

Автор: Отшельник 6.7.2009, 17:18

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

Цитата(Wariner @ 29.6.2009, 9:07) *
а к автору обращаться не пробовал?

я пробовал к автору обращатся)))Но он не отвечает big_smile.gif

Автор: Drakula 18.7.2009, 17:15

Скрипт стал??? Есть надежда на его осуществление или нет? cry.gif

Автор: VeNick 22.7.2009, 17:16

Когда сделаете этот скрипт? очень жду! exciting.gif

Автор: Артём 25.7.2009, 8:40

В экзекуторе смог найти код,но не смог додуматся как ожевить его в отделном скрипте....
Ожевите кто сможет плиз big_smile.gif  Zhaloby.rar ( 4.48 килобайт ) : 12

Автор: VeNick 20.8.2009, 14:43

Ну когда замутите эдакий скрипт?

Автор: Артём 20.8.2009, 17:07

VeNick bad_smile.gif когда ты будешь нам помогать тогда и замутим sexy_girl.gif

Автор: Drakula 5.9.2009, 15:03

В общем фиг кто нам поможет я так понял=(

Автор: truth 16.9.2009, 14:49

Ищу нечто подобное, был бы безумно благодарен, если кто-нибудь написал/стащил/оптимизировал бы такой скрипт big_smile.gif

Автор: district 17.9.2009, 12:15

Выскажу пару мыслей по сабжу.
В настоящее время занимаюсь решением этой задачки, из любви к искусству, т.к на нашем хабе бот указанной направленности не нужен.
Взяты социалистические обязательства : к празднику Нового Года сдать в эксплуатацию комплексный бот, где сабж фигурировал бы как опциональный подключаемый модуль.
В чем отличие устного предупреждения от кика или темпбана? В том, что устное предупреждение - это не есть встроенная команда Птоки, и учет/обработка ее возможны только средствами самого скрипта.
В чем тонкость учета таких предупреждений? В том, что должна быть как минимум заложенная возможность их учета,просмотра, статистики в общем ряду с обычными киками/темпбанами. Иначе получится нелогично : учет по устным предупреждениям есть, а учет по более серьезным проступкам, за которые были назначены кики или баны - если и есть, то в каком-то другом месте (скрипте). В отлаживаемом боте условно и те, и другие я называю баскетбольным термином "falls".
Другая тонкость - проблема идентификации. В идеале каждый юзер должен идентифицироваться со стопроцентной точностью, вне зависимости от его текущего ника или IP, но достижение такого идеала пока под большим вопросом, поэтому пока что - сделаны два отдельных параллельных учета, для ников и IP, а в качестве дополнительного идентификатора есть привязка ника к имени провайдера, например,
<Хулиган_Вася>-аль-Корбина(Москва)
В чем преимущество интегрированного решения, как альтернативы наличию кучи разношерстных банных, разбанных, предупредительных и уведомительных ботов? Преимущество в централизации, унификации многих прикладных функций, концентрации инфы по всем нарушениям (кикам, темпбанам, пермбанам, и вот этим самым "устным предупреждениям") в одном месте, а значит, более точной и внятной картине для ОПа, который с ними работает, в плане того, "кто есть ху" на хабе.

Также, должна быть, и в принципе уже реализована, возможность создания "правил" для каждого конкретного нарушения - будь то нарушение, за которое следует кик/темпбан от ОПа или бота, либо нарушение, за которое следует "устное предупреждение/выговор", выписанный лично ОПом. Таким образом, получаем два направления работы : учет "абсолютного" количества "фолов",и отдельные учеты для каждого созданного и установленного "правила". Допустим, "абсолютный порог терения" до автозабана - 5 любых нарушений, и несколько правил с различными причинно-связанными порогами - например, правило номер 1 имеет "кор причины" ( Reason Core ) "предупреждение за мат в чате" и порог, равный 3, и чтобы попасть под уже серьезные карательные меры, нужно набрать именно 3 "фола" с указанной формулировкой, и т.д. Правила отрабатываются, понятное дело, автоматически, с внесением соответствующей записи в лог и отсылкой соответствующих уведомлений как ОПам, так и преступнику.

Есть и модуль банов/киков/устных предупреждений со стандартными формулировками, есть и средства автоматического создания правил с умолчательными параметрами, как на основе имеющихся шаблонных наказаний/предупреждений, так и на основе анализа формулировки причины проходящего через ЧатАрривал кика/бана/предупреждения.

Есть возможность "обнуления" оперативного счета нарушений для ника или IP, полный лог нарушений при этом сохраняется в неизменном виде, и при желании можно даже "припомнить старые грехи" нику или IP - т.е. извлечь все причинно-связанные количества нарушений и абсолютное количество нарушений в оперативную таблицу наблюдения ("актуальный табличный лог") и, таким образом, поставить юзера-рецидивиста опять под дамоклов меч правосудия и угрозу уже серьезного забана.

Есть и "неприкасаемый список" ников, IP, профилей, в отношении которых все наказания блокируются.

А вот насчет меню просмотра собственных проступков для юзеров-хулиганов - мысль интересная и фича наверное нужная, попробую и ее реализовать, в качестве опции.
Вот такие соображения. Если есть какие-то еще предложения, пожелания - давайте обсуждать.

Автор: Артём 17.9.2009, 12:25

Цитата(district @ 17.9.2009, 12:15) *
Выскажу пару мыслей по сабжу.

amazing.gif это пара? shocked.gif
А как именно работает "устных предупреждений " ?

Автор: trojan 24.1.2010, 22:07

1

Автор: Nickolya 24.1.2010, 22:30

Хорошо, когда будем делать баны окончательно под русхаб попробуем довести до таких функций. Жалко district не пожелал остаться на форуме, он обещал скрипт big_smile.gif Спросите, может сделал уже.
P.S.: а мы все его тут с нетерпением ждем...