Версия для печати темы
MyDC.ru _ Скрипты для RusHub'а _ CollectorMagnets
Автор: STRELOK_IS74 18.2.2010, 17:08
Название: CollectorMagnets
Автор: Serx
Перевод под RusHub: STRELOK
Описание:
Сохраняет магнет ссылки. Выводит их по категориям, от ника, за дату.
Для работы скрипта необходимо скачать модуль files http://mydc.ru/index.html?showtopic=2937&view=findpost&p=25266
Автор: STRELOK_IS74 23.2.2010, 11:57
Добавлена Версия 2.0:
- Вернул функцию сохранения в файл
- Функция очистки старых магнет ссылок
Автор: STRELOK_IS74 3.3.2010, 18:05
Добавил новую версию скрипта.
Версия 3.0:
- Если в сообщении несколько магнет ссылок, то сохраняются все
- Добавил служебные сообщения
- Добавил функцию Экстренной очистки базы магнет ссылок
Автор: Otshelnik-Fm 7.3.2010, 1:54
Пожелания: сортировка по расширению файла и возможность удалить одну магнет ссылку введя ее id. При сохранении магнет ссылки чтобы сохранялось все сообщение (хороший ужасик magnet:..... - стоит смотреть) - а то получаем просто сбор магнетов, а сообщение несло дополнительную информацию.
И вопрос - как переделать в скрипте чтобы сохраняло и http ссылки?
Код
for sMagnet in sData:gmatch"(http://%S+)" do
вот так
Как сделать чтоб сохранял и ссылки веб и магнет?
Автор: STRELOK_IS74 7.3.2010, 8:12
Должно быть что то типо такого
Код
for sMagnet in sData:gmatch"([magnet][http]:%S+)" do
Но захватывает только 2 последних символа:
Код
tp://ya.ru
. Не могу понять, что нужно поставить, чтобы захватило полностью все символы :(
Автор: Setuper 7.3.2010, 12:04
как вариант:
Код
for sMagnet in sData:gmatch"([mh][at][gt][np]e?t?:%S+)" do
хотя в таком варианте может захватываться и кое-что лишнее.
Для 100% уверенности, что захватиться то, что нам нужно надо делать 2 цикла:
Код
for sMagnet in sData:gmatch"(magnet:%S+)" do
...
end
for sMagnet in sData:gmatch"(http:%S+)" do
...
end
Автор: Otshelnik-Fm 27.7.2010, 18:22
Отличный скрипт.
Хотелось чтобы сохранял полностью предложение сообщение содержащее ссылку (можно не более 200-400 символов). При просмотре не понятно что это за магнет ссылка или http. А с комментарием - было бы понятней.
Автор: Accelerator 27.7.2010, 18:30
После
Код
local sNick = sData:match"(%b<>)"
добавляем
Код
local sMsg = sData:match"%b<>%s+(.*)"
Код
table.insert(tMagnet,{sMagnet, sNick, os.time()+iTime*3600})
меняем на
Код
table.insert(tMagnet,{sMsg, sNick, os.time()+iTime*3600})
Автор: Otshelnik-Fm 27.7.2010, 19:05
спасибо . Работает. подскажи еще как сделать вместо
Код
local ClearTmr = 240 -- Через сколько часов очищать базу
установить ограничение - хранить последние 200 ссылок. у меня сейчас 270 выводятся в течении 10 секунд.
Это нужно из-за того что не всегда кидаются ссылки. бывает неделю тишина, а иногда за час по 30 ссылок
Автор: Setuper 27.7.2010, 19:22
Лучше переделать скрипт под использование с бд, и не удалять ссылки, а просто дать возможность пользователю ввести 2 параметра: 1 - количество ссылок, которые показывать, 2 - место откуда показывать, а также сделать системный параметр: максимальное количество для показа.
Если не указано место откуда показывать, то по умолчанию брать как последняя ссылка, количество ссылок - это количество ссылок, которое будет показано (вплоть до последней ссылки, если не указано до какой во втором параметре). И первый параметр нельзя вводить больше чем системная настройка, в противном случае показывать количество ссылок в соответствии с системной настройкой. Сисмемную настройку можно взять, допустим 20 для быстроты показа.
Теперь пример. В базе 270 ссылок. Системная настройка: 20.
Пользователь вводит команду: +show 20 - показываем 20 последних ссылок
+show 20 200 - показываем 20 ссылок начиная с 200, то есть с 200 до 220
+show 200 200 - покажет опять же с 200 по 220, так как первый параметр больше системной настройки, и значит вместо него берётся системная настройка.
Таким образом можно будет просмотреть или найти любую ссылку и при этом ничего долго загружаться не будет
Автор: Accelerator 27.7.2010, 19:22
После
Код
table.insert(tMagnet,{sMsg, sNick, os.time()+iTime*3600})
добавь
Код
if #tMagnet > 200 then
table.remove(tMagnet,1)
end
Думаю перед этим нужно будет предварительно почистить таблицу.
2
Setuper: Пока времени переделывать скрипт нет. Если будет время и желание - переделаем
Автор: Otshelnik-Fm 28.7.2010, 19:01
пока крашить не буду. пусть сколько есть выводит.
А скрипт не цепляет иногда ссылки. Почему не разобрался. Специально экспериментировал с описанием. Вроде бы как если после адреса идет: пробел, тире, пробел, а потом текст - не ловит. Если тире убрать - то выведет ссылку с описанием. Но не всегда так. Почему - разбираюсь.
Автор: Accelerator 26.8.2010, 15:00
Как и просили ранее перевёл скрипт от http://mydc.ru/topic2772.html. Скрипт в первом посту.
P.S.: Позже, возможно, займусь модернизацией, если будет время и желание
Автор: alcorp 20.11.2010, 20:50
Вы конечно, извините меня, но скрипт не запускается вообще!
Автор: Артём 20.11.2010, 21:23
alcorp, Вы конечно, извините меня, но вы уверены что вы в ту ветку влезли? Это скрипт под русхаб
Автор: Otshelnik-Fm 18.12.2010, 17:25
Ошибка:
Цитата
[Fri Dec 17 21:37:36 2010] Y:\Soft\rushub_2.2.0\libs\files.lua:32: bad argument #1 to 'open' (string expected, got nil)
работает со скриптом http://mydc.ru/topic3102.html .
Незнаю может быть в ветку CollectorMagnets надо было писать. Если не тут - перенесите.
Автор: Accelerator 18.12.2010, 18:38
Скрипт перезалил. Пробуйте.
Автор: shadow3c 19.11.2012, 12:57
Все завилось с пол тычка. Но возник вопрос как часто сохраняет скрипт магниты в базу. Что-то не нашел в настройках.
Сделал чтобы сохраняло сразу после того как ктото вбросит магнит в чат. Добавив две строчки.
Код
Files.SaveTable(MagnetFile, tMagnet, "tMagnet")
Files.SaveTable(NicksFile, tNicks, "tNicks")
Получилось так
Код
table.insert(tMagnet,{Time*86400+os.time(), Hash, form, os.date("%d.%m.%Y @ %H:%M:%S"), tUser.sNick, sMsg})
end
Files.SaveTable(MagnetFile, tMagnet, "tMagnet")
Files.SaveTable(NicksFile, tNicks, "tNicks")
end
Таймера сохранения не нашел. Можете подсказать как добавить или задать интервал если он там есть.
Спасибо.
Автор: Saymon21 19.11.2012, 15:02
Код не смотрел.
В функцию OnStartup, если такая есть (если нет, дописать)
Код
Core.AddTimer(1,1*60000, "savedb")
И допиши функцию:
Код
function savedb()
Files.SaveTable(MagnetFile, tMagnet, "tMagnet")
Files.SaveTable(NicksFile, tNicks, "tNicks")
end
Автор: Accelerator 20.12.2012, 20:05
Скрипт сохраняет все ссылки после остановки хаба.
Код
function OnExit()
Files.SaveTable(MagnetFile, tMagnet, "tMagnet")
Files.SaveTable(NicksFile, tNicks, "tNicks")
end
На сохранении по таймеру не заморачивался, ибо проблем не возникало.
Автор: mod 20.3.2013, 17:16
Ещеб дать возможность самому юзеру включать отображение последних магнет при входе, при настройке "local ShowConnected = nil "
Автор: shadow3c 9.11.2013, 18:47
Ребята у меня проблема . Может кто знает как решить
Если юзер скидывает несколько магнитов в одном сообщении то это сообщение вноситься в базу токое количество раз сколько там магнитов.
Вот парсящий кусок.
Код
function OnChat(UID, sData)
local sCmd = sData:match"%b<>%s+[!+*](%S+)"
local tUser = Core.GetUser(UID, 8)
for Magnet in sData:gmatch"(magnet:%S+)" do
if Magnet then
local Hash = Magnet:match"urn:tree:tiger:(%w+)&xl="
local bRepeat = true
local sMsg = sData:match"%b<>%s+(.*)"
local form = Magnet:match"&dn=(%S+)"
if form then
local bType = true
form = string.lower(form:sub(-3))
for i,v in pairs(TypeFile) do
for j,k in ipairs(v) do
if k == form then
bType = nil
form = i
end
end
end
if bType then
form = other
end
end
for i,v in ipairs(tMagnet) do
if v[2] == Hash then
bRepeat = nil
break
end
end
if bRepeat then
table.insert(tMagnet,{Time*86400+os.time(), Hash, form, os.date("%d.%m.%Y @ %H:%M:%S"), tUser.sNick, sMsg})
end
Files.SaveTable(MagnetFile, tMagnet, "tMagnet")
Files.SaveTable(NicksFile, tNicks, "tNicks")
end
end
вот пример глючащего магнита
Код
magnet:?xt=urn:tree:tiger:PG3OP5MHIMSJKJGVNHXMSELQWVKDPGQP6B2T6OA&xl=247819&dn=nastroyka_6str.rar
magnet:?xt=urn:tree:tiger:CF7C3SOYIZ5CXJXDKGBNGYVRMX7JBG7OBH6OHSQ&xl=157911&dn=PitchPerfect_Tuner_setup.rar
а вот как это выводит программа
Код
№926 : [ [3c]_server ] : [ Архивы: ap_guitar.rar (829,70 кБ)
AP_Guitar_Tuner_v1_02.rar (735,64 кБ) ] добавлено: [ 09.11.2013 @ 19:13:14 ]
№927 : [ [3c]_server ] : [ Архивы: ap_guitar.rar (829,70 кБ)
AP_Guitar_Tuner_v1_02.rar (735,64 кБ) ] добавлено: [ 09.11.2013 @ 19:13:14 ]
Автор: shadow3c 19.11.2013, 4:28
Кому надо криволапое решение проблемы не учитывающее все нюансы вот оно )
Код
function OnChat(UID, sData)
local sCmd = sData:match"%b<>%s+[!+*](%S+)"
local tUser = Core.GetUser(UID, 8)
for Magnet in sData:gmatch"(magnet:%S+)" do
if Magnet then
local Hash = Magnet:match"urn:tree:tiger:(%w+)&xl="
local bRepeat = true
local sMsg = sData:match"%b<>%s+(.*)"
local form = Magnet:match"&dn=(%S+)"
if form then
local bType = true
form = string.lower(form:sub(-3))
for i,v in pairs(TypeFile) do
for j,k in ipairs(v) do
if k == form then
bType = nil
form = i
end
end
end
if bType then
form = other
end
end
for i,v in ipairs(tMagnet) do
if v[2] == Hash then
bRepeat = nil
break
end
end
if bRepeat then
table.insert(tMagnet,{Time*86400+os.time(), Hash, form, os.date("%d.%m.%Y @ %H:%M:%S"), tUser.sNick, sMsg})
end
Files.SaveTable(MagnetFile, tMagnet, "tMagnet")
Files.SaveTable(NicksFile, tNicks, "tNicks")
break
end
end