myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> жалобная книга + MySQL, Юзеры могут пожаловаться на админов =)

Теги
fixx
сообщение 6.7.2009, 12:35
Сообщение #1


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Собственно сабж.
Помогите, пожалуйста, сам несмог..
Можно много незаморачиваться, а сделать по команде, скажем, !report <ник_на_кого_жалоба> <сообщение> - хотя менюшку желательно.
Если жалуются не на админа, то: КорСендТуЮзер "*** оператора с ником ..блабла.. несуществует".
При этом <сообщение> записывается в базу: _таблица_с_ником_админа (или некий ID админа)::: порядковый номер; дата; время; ник; сообщение.
Доступ к команде и менюшке только у профилей 3 и 2 - нефиг опам друг на друга стучать (опционально)
Антифлуд - неболее 1 жалобы 1 ника/ip в час (опционально). Интересно, а антимат возможен?
Что с базой делать - каждый сам решит, я вот на страницу выведу. Ну и жалобы через веб выведу - для забаненых. ;)
Хотя можно Мастеру дать возможность просматривать последние жалобы на хабе.
В идеале потом можно будет проводить конкурсы "Самый строгий админ" и "Самый добрый админ"
Пытался сам переделать из ChatLogsMySQL by Wariner, но, как обычно ничего невышло. big_smile.gif
Go to the top of the page
+Quote Post
Wariner
сообщение 6.7.2009, 13:18
Сообщение #2


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




ты думаешь будет так много жалоб? почету то я сомневаюсь...
Go to the top of the page
+Quote Post
fixx
сообщение 6.7.2009, 13:30
Сообщение #3


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




О, уверен, что жалоб будет много.
И даже знаю на кого больше всех - не менее 10-30 в сутки.
А жалобная книга - мальчик для битья, написал (дал затрещину) и успокоился. big_smile.gif
И ругани меньше будет, а то вечный флейм.
Go to the top of the page
+Quote Post
*FoxMalder*
сообщение 6.7.2009, 15:11
Сообщение #4


мяу =^.^=
******

Группа: Пользователи
Сообщений: 414
Регистрация: 20.5.2008
Пользователь №: 6
Спасибо сказали: 14 раз




что ж за админы такие страшные)
Go to the top of the page
+Quote Post
fixx
сообщение 6.7.2009, 15:19
Сообщение #5


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Да есть парочка - любители эпатажа, но не все это понимают (эпатаж), потому мыло мне уже заспамили. big_smile.gif
По большому счету у меня неполучается только перехватить сообщение из:
Код
sMsg = "$UserCommand 1 3 "..sMenu.."$<%[mynick]> !report %[line:Введите ник админа] %[line:Введите текст жалобы]&*#*124;|"..

и записать его в базу по принципу :
[line:Введите ник админа] - это уже существующие таблицы report_НИК_АДМИНА с полями ID;Date;Time;Nick;Msg
[line:Введите текст жалобы] - поле Msg в таблице
Ну и остальные поля
ID;Date;Time;Nick
непонимаю, как заполняются. Уже прочитал все что можно, но чего-то нехватает... Дайте толчек, прочитайте лекцию для новичков, с примерами, плиз. big_smile.gif
Go to the top of the page
+Quote Post
Wariner
сообщение 6.7.2009, 18:30
Сообщение #6


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




итак
1) не надо делать кучу таблиц! сделай одну
Код
id........Admin.......Date........Time..........Nick............Msg

2) что конкретно не получается с нахождением, как пробуешь?(есть очень хорошая статья на форуме от Setuper`a об этом)
3)
id - при создании базы надо указывать что это автозаполняемое поле, при каждой новойзаписи оно будет принимать значение n+1, где n - id последней записи
Date и Time получаются из os.date("%d-%m-%Y") и os.date("%H:%M:%S") соответственно и просто вносятся в таблицу

если что не понятно спрашивай
Go to the top of the page
+Quote Post
fixx
сообщение 6.7.2009, 20:06
Сообщение #7


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Код
----чудо-юдо
-- надо ли local добавлять?
local sBot = "бот"            
local sNameDB = "report"
local sUserDB = "report"      
local sPasswordDB = "******"  
local sAdressDB = "localhost"
local sPortDB = "3306"
local sPrefixTable = "report_"
local sMenu = "Пожаловаться на админа"
local sBeDate = os.date("%d.%m.%Y")
local sBeTime = os.date("%H:%M:%S")
local sErrAdmNick = "Ошибка. Оператора с таким ником несуществует"
tProfiles = {
    [0] = 1, -- Мастер
    [1] = 1, -- ОПератор
    [2] = 1, -- VIP
    [3] = 1, -- Зарегистрированный пользователь
    [4] = 1, -- Net
    [-1] = 0, -- Незарегистрированный юзер
}
tAdmNick = {   -- Список админов
    ["Admin"] = 1,
    ["Admin2"] = 1,
    ["Admin3"] = 1,
    ["Admin4"] = 1,    
    ["Admin5"] = 1,
    ["Admin6"] = 1,
}
require "luasql.mysql"   -- подключение библиотеки
local env = assert (luasql.mysql()) --- почти понял, вернее понял, но описать немогу грамотно =))
local con = assert (env:connect(sNameDB, sUserDB, sPasswordDB, sAdressDB, sPortDB)) -- подключение к базе
function UserConnected(tUser)
    if tProfiles[tUser.iProfile] == 1 then
        sMsg = "$UserCommand 1 3 "..sMenu.."$<%[mynick]> !report %[line:Введите ник админа] %[line:Введите текст жалобы]&*#*124;|"..
    if (not sMsg = tAdmNick[tUser.sNick] ~= 1) then    --- нужны ли скобки? И вообще сомневаюсь в правильности.
    Core.SendToUser(tUser, sErrAdmNick) -- или надо "..sErrAdmNick.."- c точками и в кавычках?
-- следующая строка вообще напрягает, INSERT INTO `%sreport` - правильно ли обозначил?
local con:execute(("INSERT INTO `%sreport` (`Admin`, `Date`, `Time`,`Nick`,`Msg`) VALUES ('%s','%s','%s','%s','%s')"):dbformat(sPrefixTable, sAdmin, sBeDate, sBeTime, tUser.sNick, sMsg))

Вобщем вот. И половины не написал, а ошибок чую оч много.
В комментариях я написал как я понимаю действие или непонимаю его.
Там же и вопросы.
Непонимаю как мне выловить ник админа из этих лайнов....
Кусками могу почти все, что задумал написать (хоть и неправильно), а собрать из кусков немогу что-то...
Плиз, не бейте меня. И можно уже перенести в "Помощь по скриптам" big_smile.gif
Go to the top of the page
+Quote Post
Wariner
сообщение 6.7.2009, 20:27
Сообщение #8


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




local лучше добавлять.
а вот тут ты не понятно что делаешь...
Код
function UserConnected(tUser)
    if tProfiles[tUser.iProfile] == 1 then
        sMsg = "$UserCommand 1 3 "..sMenu.."$<%[mynick]> !report %[line:Введите ник админа] %[line:Введите текст жалобы]&*#*124;|"..
    if (not sMsg = tAdmNick[tUser.sNick] ~= 1) then    --- нужны ли скобки? И вообще сомневаюсь в правильности.
    Core.SendToUser(tUser, sErrAdmNick) -- или надо "..sErrAdmNick.."- c точками и в кавычках?
-- следующая строка вообще напрягает, INSERT INTO `%sreport` - правильно ли обозначил?
local con:execute(("INSERT INTO `%sreport` (`Admin`, `Date`, `Time`,`Nick`,`Msg`) VALUES ('%s','%s','%s','%s','%s')"):dbformat(sPrefixTable, sAdmin, sBeDate, sBeTime, tUser.sNick, sMsg))


да сначала ты послал менюшку, причём не совсем правильно. так как менюшка всего одна надо так
Код
function UserConnected(tUser)
    if tProfiles[tUser.iProfile] == 1 then
        Core.SendToUser(tUser, "$UserCommand 1 3 "..sMenu.."$<%[mynick]> !report %[line:Введите ник админа] %[line:Введите текст жалобы]&#*124;")
        end
end

вот и вся твоя функция. все остальные действия будут выполнены в функции ChatArrival
посмотри как выполнен поиск фразы в других скриптах
из line`ов ничего выдерать не надо, ибо это просто меню, после ввода оно преобразуется в строку типа
Код
!report Admin Да он просто казёл))))
Go to the top of the page
+Quote Post
fixx
сообщение 7.7.2009, 1:10
Сообщение #9


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Код
require "luasql.mysql"   -- подключение библиотеки
local env = assert (luasql.mysql()) --- почти понял, вернее понял, но описать немогу грамотно =))
local con = assert (env:connect(sNameDB, sUserDB, sPasswordDB, sAdressDB, sPortDB)) -- подключение к базе
function UserConnected(tUser)
    if tProfiles[tUser.iProfile] == 1 then
        Core.SendToUser(tUser, "$UserCommand 1 3 "..sMenu.."$<%[mynick]> !report %[line:Введите ник админа] %[line:Введите текст жалобы]&#*124;")
    end
end
OpConnected = UserConnected
RegConnected = UserConnected
function ChatArrival(tUser, sData)
    local sAdmin, sMsg = sData:match"^!report (%S+)%s(.*)" -- уфф.. с этим разобрался, помог Setuper, его статья про регулярные выражения и захваты - 7 раз прочитал (там многое умалчивается, оказывается) , и еще спасибо Alexey за подсказки о том, о чем умалчивалось. =))
    
    if not tAdmNick[sAdmin] or tAdmNick[sAdmin] ~= 1 then -- спасибо, Setuper!!!
        Core.SendToUser(tUser, sErrAdmNick) -- эт я сам сообразил, благо примеров много.
    end
-- следующая строка вообще напрягает, INSERT INTO `%sreport` - правильно ли обозначил?
    local con:execute(("INSERT INTO `%sreport` (`Admin`, `Date`, `Time`,`Nick`,`Msg`) VALUES ('%s','%s','%s','%s','%s')"):dbformat(sPrefixTable, sAdmin, sBeDate, sBeTime, tUser.sNick, sMsg))

end

Шапка с переменными и таблицами выше - я не трогал.
А так пока вроде должно даже работать, .... вроде..., пока непробовал. (застрял при создании таблицы с полем id - разберусь) С мускулом мы хоть и не на "ты", но иногда здороваемся big_smile.gif
добавлено позже: Ну вот и поздоровались, кавычку пропустил в запросе )))
Как обычно все отметил в коментариях. big_smile.gif
Благодарности тоже.
Однако, даже если код рабочий, буду работать над антифлудом. Пока не определился как, что, почему и каким образом, но мысли есть (например добавить в таблицу поле IP, а в скрипт - таймер).
И еще, нет ли возможности вместо вручную забиваемой таблицы tAdmNick использовать *.xml файл птоки?

Так и знал, что именно здесь будет косяк :(
Код
    local con:execute(("INSERT INTO `%sreport` (`Admin`, `Date`, `Time`,`Nick`,`Msg`) VALUES ('%s','%s','%s','%s','%s')"):dbformat(sPrefixTable, sAdmin, sBeDate, sBeTime, tUser.sNick, sMsg))

Синтакс new.lua:46: unexpected symbol near ':'
я уж и так эти двоеточия и эдак.. хоть удаляю - все равно такую ерру пишет...
Go to the top of the page
+Quote Post
Wariner
сообщение 7.7.2009, 11:14
Сообщение #10


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




да вроде всё правильно написано....
Go to the top of the page
+Quote Post
fixx
сообщение 7.7.2009, 17:49
Сообщение #11


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Все равно не работает.
Вроде бы и метод dbformat определен...
Прикрепленный файл  new.lua ( 1.99 килобайт ) Кол-во скачиваний: 9
Go to the top of the page
+Quote Post
Wariner
сообщение 7.7.2009, 18:07
Сообщение #12


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




тут вижу несколько проблем.
1) всё таки лучше если ты сначала будешь находить команду а уже по команде делать какие либо действия(возьми из того же чатлога)
2) лучше если таблица будет создаваться в скрипте
Go to the top of the page
+Quote Post
fixx
сообщение 7.7.2009, 21:19
Сообщение #13


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




1) - непонял. Вроде все так как в чатлоге. Можно подробнее чуть-чуть. big_smile.gif
2) - это сделал, только она несоздается, потому что ошибка все таже вылезает.
--------------------------------------------------------------------------------------------
Закомментировал глючную строчку и скрипт запустился, создал таблицу и даже выводит сообщение ErrAdmNick
Go to the top of the page
+Quote Post
Wariner
сообщение 7.7.2009, 21:43
Сообщение #14


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




насчёт команд:
Код
function ChatArrival(tUser, sData)
    local sData = sData:sub(1,-2)
    local sCmd = sData:match"%b<>%s+([!+-/*]%S+)"
    if sCmd == "!mainlogs" then

выложи то что ты уже сделал посмотрю
Go to the top of the page
+Quote Post
fixx
сообщение 7.7.2009, 22:05
Сообщение #15


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Вот.
Прикрепленный файл  new.lua ( 2.34 килобайт ) Кол-во скачиваний: 7

Если закомментировать 57 строку, то запускается и создает базу. И все, кроме записи в базу, работает.

Цитата(Wariner @ 7.7.2009, 22:43) *
насчёт команд:
Код
function ChatArrival(tUser, sData)
    local sData = sData:sub(1,-2)
    local sCmd = sData:match"%b<>%s+([!+-/*]%S+)"
    if sCmd == "!mainlogs" then

выложи то что ты уже сделал посмотрю


Этот код чет никак не могу сунуть в ChatArrival
Чисто даже на логическом уровне неполучается. Если сунуть "как есть"... то получается, что если команда та, что надо, то выполняем
Код
    local sAdmin, sMsg = sData:match"^!report (%S+)%s(.*)"

а если нет? то ретурн что?
Go to the top of the page
+Quote Post
Wariner
сообщение 7.7.2009, 22:32
Сообщение #16


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




ты путаешь менюшки и команды. ща гляну код

весь твой косяк был в том что ты написал local перед con))))
так же поправил некоторые косяки
1) нельзя дату и время выносить как сделал это ты. ибо они примут временное значение включения скрипта! исправил, а так же исправил формат даты! в постах выше писал про удобную для человека дату, а в MySQL свои типы почитать тут http://www.mysql.ru/docs/man/Date_and_time_types.html
2) забыл убрать звёздочку при создании менюшек
3) добавил нахождение команды
4) чутка преукрасил
Прикрепленные файлы
Прикрепленный файл  new.lua ( 2.83 килобайт ) Кол-во скачиваний: 19
 


Спасибо сказали:
Go to the top of the page
+Quote Post
fixx
сообщение 7.7.2009, 23:15
Сообщение #17


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Во, Спасибо!
Работает =)
Go to the top of the page
+Quote Post
fixx
сообщение 8.7.2009, 15:19
Сообщение #18


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Код
function ChatArrival(tUser, sData)
    local sData = sData:sub(1,-2)
    local sCmd = sData:match"%b<>%s+([!+-/*]%S+)"
    if sCmd == "!report" then
        local sAdmin, sMsg = sData:match"%b<>%s+[!+-/*]%S+%s+(%S+)%s+(.*)"
        if not tAdmNick[sAdmin] then
            Core.SendToUser(tUser, ("<%s> %s"):format(sBot, sErrAdmNick))
            
        elseif (not sMsg) or (not sMsg:match"%S") then
            Core.SendToUser(tUser, ("<%s> *** Вы не ввели текст жалобы!"):format(sBot))
        else    
            con:execute(("INSERT INTO `%sReport` (`Admin`, `Date`, `Time`,`Nick`,`Msg`) VALUES ('%s','%s','%s','%s','%s')"):dbformat(sPrefixTable, sAdmin, os.date("%Y-%m-%d"),os.date("%H:%M:%S"), tUser.sNick, sMsg))  --вносим жалобу в базу
            Core.SendToUser(tUser, ("<%s> *** Жалоба отправлена удачно!"):format(sBot))
        end
        return true
    end    
end

Подскажите, как в эту функцию еще условий добавить?
ну допустим
Код
if tAdmNick[sAdmin] == 0 then
Core.SendToUser(tUser, ("<%s> %s"):format(sBot, sMaster))

Вобщем весь код такой:
Если в таблице tAdmNick нет такой записи, то отправляем sErrAdmNick
а если в таблице есть запись, но она равна 0, то отправляем sMaster
Или ткните носом, где про это написано. Смотрел другие скрипты, там прям так и написано, но у меня так неработает.
И еще. Что делает этот последний кусок :
Код
string.dbformat = function(self, ...)
    local t = {...}
    for k, v in ipairs(t) do
        t[k] = tostring(v):gsub("'", "\\'")
    end
    return self:format(unpack(t))
end

Именно он ругается, если я что-то добавляю.
Go to the top of the page
+Quote Post
Setuper
сообщение 8.7.2009, 15:23
Сообщение #19


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




метод dbformat экранирует одиночную кавычку для внесения данных в бд.


Спасибо сказали:
Go to the top of the page
+Quote Post
fixx
сообщение 9.7.2009, 12:38
Сообщение #20


МЕДВЕД =)
****

Группа: Пользователи
Сообщений: 187
Регистрация: 6.8.2008
Пользователь №: 332
Спасибо сказали: 4 раза




Со всем предыдущим разобрался, почитав всякие факи.
Сделал таблицу запретных слов в виде:
Код
tMat = {  
    ["бла"] = 1,
    ["стер"] = 1
{

Однако слово "бла" отлавливается нормально, а "Бла" или "бластер" нет.
И еще. tMat получается объемной, подумываю поместить в мускул, но пока об этом рано думать.
================================================
Скрипт получился гибкий, можно использовать как Гостевую книгу, или даже как ПМ Офлайн...
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new Topic has attachmentsMysql
win32 - API 2 | Самая распространённая база данных
78 Setuper 112 802 19.8.2017, 8:59 Посл. сообщение: Kinsler
No New Posts lua mysql
4 shadow3c 9 393 20.8.2014, 20:33 Посл. сообщение: shadow3c
No New Posts Topic has attachmentsmysql
RusHub | Библиотека базы данных mysql
8 Setuper 21 881 18.8.2014, 4:05 Посл. сообщение: shadow3c
No New Posts Topic has attachmentsКнига рецептов. Ошибка сокета
1 mazzahaker 6 215 12.10.2013, 13:54 Посл. сообщение: Артём
No New Posts Mysql
Unix | База данных
11 Jaska 22 278 21.9.2013, 18:17 Посл. сообщение: KCAHDEP
No new Эффективность mysql
текстовый файл или mysql?
23 Iskandark 22 847 29.12.2011, 9:47 Посл. сообщение: mariner
No New Posts Скрипт антимат и антиреклама с базой в Mysql
1 Vizunchik 7 207 7.12.2011, 20:17 Посл. сообщение: Ksan
No New Posts RusHub and MySQL?! есть ли и как ...
вопросы про mysql, md5 hash и т.д.
4 DRUG_ADDICT 10 094 3.4.2011, 7:03 Посл. сообщение: alex82
No New Posts Topic has attachmentsCustomLocations + MySQL
Определяем провайдера по IP-адресу
0 alex82 7 131 7.3.2011, 18:39 Посл. сообщение: alex82
No New Posts Релизы/Заказы с MySQL
API 2 | MySQL
0 Kingston 5 457 6.2.2011, 10:08 Посл. сообщение: Kingston
No New Posts Topic has attachmentsУстановка и настройка Ubuntu 10.04 под PtokaX 4.1.2 с MySQL. Финал.
Инструкция для новичков в Линуксе
11 TiGRpp 29 411 2.9.2010, 5:09 Посл. сообщение: TiGRpp
No new Topic has attachmentsПоиск по TTH на MySQL
18 Lesh™ 21 595 15.8.2010, 12:40 Посл. сообщение: Lesh™
No New Posts От: Поиск по TTH на MySQL
От темы с ID: 3549
1 Lesh™ 6 685 14.7.2010, 0:30 Посл. сообщение: Lesh™
Closed Скрипт для внесени в данных в MySQL прям из чата командой.
Нужно маленький скриптик который будет экспортировать определенный тек
1 DEN 007 6 359 4.7.2010, 9:45 Посл. сообщение: Setuper
No New Posts От: Гостевая Книга
От темы с ID: 308
0 _Deagle_Factory_ 4 353 1.5.2010, 20:13 Посл. сообщение: _Deagle_Factory_

 



RSS Сейчас: 23.11.2024, 5:30