MyDC.ru _ Скрипты с MySQL [PtokaX] _ ChatHistorySQL
Автор: alex82 25.7.2010, 13:51
ChatHistorySQL
Версия скрипта: 1.00 Версия API: API2 (PtokaX 0.4.0/0.4.1, LUA 5.1) Автор: alex82
Описание: Скрипт предназначен для сохранения истории сообщений главного чата в базе данных MySQL, и последующего вывода ее при подключении к хабу, либо по запросу. Имеется возможность поиска сообщений по нику, IP-адресу, или тексту. Также имеется возможность создания резервной копии базы данных скрипта непосредственно с помощью меню хаба, либо команды в главном чате. Скрипт умеет самостоятельно восстанавливать соединение с сервером MySQL.
ВНИМАНИЕ! Для работы скрипта требуется http://mydc.ru/topic1508.html. Перед запуском скрипта необходимо создать базу данных MySQL.
А вход\выход пользователей он не логирует, не подскажете?
Автор: Nickolya 1.9.2010, 22:07
kc_duke, нет, такого функционала в этом скрипте нету.
Автор: intlive 3.10.2010, 17:36
Приведите пожалуйста пример функции преобразования даты и времени сообщения, записанного в базу скриптом на php, или как записывать в "человекообразном" виде данные из скрипта в бд?
Автор: Nickolya 3.10.2010, 17:48
Код
date ("H:i:s Y-m-d", $row['time'])
Автор: Kingston 10.10.2010, 8:58
проблема возникла. раньше была на подобном скрипте. суть такова: при использовании встроенной команды меню пр кн мыши по юзеру в списке - Выкинуть юзера, в чат отсылается сообщение <Nick_1> is kicking Nick_2 because: и после чего скрипт не выводит сообщения непоследственно в чат, не могу разобраться никак. Вот команда:
Автор: alex82 10.10.2010, 22:29
Решение проблемы: заменяем 125 строку на эту:
Код
if me or not data:find("^["..SetMan.GetString(29):gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1").."]"..tCfg.CmdPattern) and not data:find("^%s*is%s+kicking%s+%S+%s+because:") then
Автор: DEN 007 7.1.2011, 7:45
а я не понял что скрипт с utf8 не работает?
Автор: Kingston 7.1.2011, 9:53
DEN 007 кодировку базы надо указать в конфиге, все работает как с cp1251 так и с utf8
Автор: DEN 007 7.1.2011, 10:05
пардон не заметил настройки...
Автор: DEN 007 20.2.2011, 3:27
Я вот тока не понял а как по дате искать сообщений к примеру? Ведь время записано в юних формате?
Автор: DEN 007 6.3.2011, 22:49
И так родилась мысль добавить в базу еще одну строку, суть просто, иногда в чат проходит спам или что то подобное, что юзер видеть в истории не должен, по сути это строчка переменная "0" или "1" и в зависимости от нее выводим данное сообщение или нет, то есть сообщение продолжает хранится в базе но оно не показывается юзеру.
Автор: Donki 20.7.2011, 19:58
PtokaX 4.0.0. Стоит написать в чате кириллицей, как в окошке скрипта появляется сообщение об ошибке, и текст в базу не попадает. [19:34] Синтаксис ChatHistorySQL.lua:127: LuaSQL: Error executing query. MySQL: Incorrect string value: '\xF2\xE5\xEA\xF1\xF2' for column 'message' at row 1 На латиницу ошибок не выдаёт и текст появляется в базе.
Автор: DEN 007 20.7.2011, 21:10
Donki, установи кодировку cp1251 и соединение тоже в этой кодировке.
Автор: Donki 20.7.2011, 22:03
В config.lua и так было настроено Charset = "cp1251". В каком соединении кодировку поменять?
Точка входа в процедуру @luaI_openlib не найдена в библиотеке DLL PXLUA.DLL
или вот так если mysql_2.1.1 [13:32:30] Синтаксис error loading module 'luasql.mysql' from file 'D:\system\programms\ptokax\libs\luasql\mysql.dll': Не найден указанный модуль.
Автор: mariner 24.10.2011, 15:23
Вы еще не читали релизноутсык новой птоке? Тогда советую прочитать.
В кратце - старые либы, что работали на 0.4.1.1 не катят
Автор: sergius 24.10.2011, 17:05
ждать?
Автор: Артём 24.10.2011, 17:19
sergius, нет, не ждать пока тебе дадут ссылку, а самому взять и в поиске на форуме найти.
Автор: sergius 24.10.2011, 18:43
Цитата(Артём @ 24.10.2011, 17:19)
sergius, нет, не ждать пока тебе дадут ссылку, а самому взять и в поиске на форуме найти.
Ты нормальный вообще? Речь о библиотеке идёт, а не ссылке...
Автор: Артём 24.10.2011, 18:48
sergius, в полне нормальный, а я о http://mydc.ru/index.html?showtopic=19&view=findpost&p=40183 на http://mydc.ru/index.html?showtopic=19&view=findpost&p=40183 к новой птоке, где скачал птоку там и http://mydc.ru/index.html?showtopic=19&view=findpost&p=40183 бери
Автор: sergius 24.10.2011, 23:07
Там где скачал птоку, там библиотек нет, а те что здесь пока не удалось запустить.
Автор: mariner 24.10.2011, 23:20
и не удастся. Проси сетапера собрать либу, ибо ППК MySQL, помнится, не собирал.
Автор: Saymon21 28.11.2011, 12:59
Мб кому нужно будет, добавил возможность выбора через меню, получать чат лог при входе на хаб или нет. + багфикс из #9 поста.
по какой-то магии, работающий энное время скрипт начал выдавать ошибку...
Код
21.08.2012 00:23:03 - /home/SmolHUB/ptokax/scripts/ChatHistorySQL.lua:402: LuaSQL: Error executing query. MySQL: MySQL server has gone away
с завидной периодичностью, мускуль не падал, скрипт должен сам пере подключатся если конекта нет, но он этого не делает, скрипт не вылетает продолжает работать. 402 строчка
Код
local cur = assert(con:execute("SELECT `time` FROM `"..tDBCfg.Prefix.."correct_time` WHERE `nick`='"..nick:sqlescape().."' LIMIT 1"))
функция целиком
Код
function GetCorrTime(nick) local cur = assert(con:execute("SELECT `time` FROM `"..tDBCfg.Prefix.."correct_time` WHERE `nick`='"..nick:sqlescape().."' LIMIT 1")) if cur:numrows() > 0 then return tonumber(cur:fetch({},"a").time) end return 0 end
Автор: serxxx 3.10.2015, 13:45
Цитата(DEN 007 @ 21.8.2012, 0:47)
по какой-то магии, работающий энное время скрипт начал выдавать ошибку...
Код
21.08.2012 00:23:03 - /home/SmolHUB/ptokax/scripts/ChatHistorySQL.lua:402: LuaSQL: Error executing query. MySQL: MySQL server has gone away
с завидной периодичностью, мускуль не падал, скрипт должен сам пере подключатся если конекта нет, но он этого не делает, скрипт не вылетает продолжает работать. 402 строчка
Код
local cur = assert(con:execute("SELECT `time` FROM `"..tDBCfg.Prefix.."correct_time` WHERE `nick`='"..nick:sqlescape().."' LIMIT 1"))
функция целиком
Код
function GetCorrTime(nick) local cur = assert(con:execute("SELECT `time` FROM `"..tDBCfg.Prefix.."correct_time` WHERE `nick`='"..nick:sqlescape().."' LIMIT 1")) if cur:numrows() > 0 then return tonumber(cur:fetch({},"a").time) end return 0 end
Такая же проблема, историю выдает только после запуска скрипта при первом подключении к mysql. Через время подключиться к mysql уже не может
Saymon21, Это читал, просто я не силен в этом чтоб проанализировать код и понять причину сначала в коде нашел 2 строчки с закрытием f:close() и cur:close() и удалил их чтоб не закрывали соединение. Не получилось. добавил в проблемную строчку cur:close()
Код
function GetCorrTime(nick) local cur = assert(con:execute("SELECT `time` FROM `"..tDBCfg.Prefix.."correct_time` WHERE `nick`='"..nick:sqlescape().."' LIMIT 1")) if cur:numrows() > 0 then return tonumber(cur:fetch({},"a").time) end cur:close() return 0 end
вышла другая ошибка Lost connection to MySQL server during query
Автор: Saymon21 3.10.2015, 16:04
Тогда прочитай ещё раз, пока не поймёшь, что там написано. Не всегда дело только в скриптах.
Автор: serxxx 3.10.2015, 16:20
Saymon21, ну так там написано: Если это получено в скрипте, то достаточно просто повторить запрос от клиента, чтобы соединение автоматически восстановилось. В инструкции прочитал как делать запрос Метод выполнения SQL запроса к базе данных: conn:execute("запрос") он в коде есть
Код
function GetCorrTime(nick) local cur = assert(con:execute("SELECT `time` FROM `"..tDBCfg.Prefix.."correct_time` WHERE `nick`='"..nick:sqlescape().."' LIMIT 1")) if cur:numrows() > 0 then return tonumber(cur:fetch({},"a").time) end cur:close() return 0 end
Сам MySQL работает без проблем, помимо хаба на хостинге работает сайт с чатом
Автор: Saymon21 3.10.2015, 16:27
Сайту, особенно если тот на пхп, может быть и пофиг на подобные вещи. Это раз. Два: Сделай условие на Check()
Автор: serxxx 3.10.2015, 16:57
Saymon21, поставил wait_timeout 7200 (2 часа) в MYSQL Т.е. будет работать если в течении 2-х часов будет запрос на историю Это конечно не решение, посмотрю на нагрузку. Минут 10 работает без проблем на данный момент
UPD Проблема решена, нагрузка не возросла Saymon21 спасибо вам
Автор: Tsd 16.10.2017, 19:42
Цитата(serxxx @ 3.10.2015, 15:57)
Saymon21, поставил wait_timeout 7200 (2 часа) в MYSQL Т.е. будет работать если в течении 2-х часов будет запрос на историю Это конечно не решение, посмотрю на нагрузку. Минут 10 работает без проблем на данный момент
UPD Проблема решена, нагрузка не возросла Saymon21 спасибо вам
Я решил проблему проверкой функции Check() по таймеру (10 минут).
Скрипт безусловно хорош, но я заметил некую странность (может у меня одного лыжи не едут?). При выводе запроса лога `Сообщения за указанную дату` скрипт выдавал лог с произвольного часа этого дня, захватывая следующий день. Решил проблему так: Заменил строку
Код
t = {year = tonumber(y),month = tonumber(m),day = tonumber(d)}