Плохо что работает по таймеру, и делает либо в главный чат, либо в ПМ всем! :angry: а так весело когда анекдоты или погода выскакивают, лучше конечно чтоб было по желанию пользователя... файл под (API2)
Перевел под API 2 но выводит ошибку C:\PtokaX\scripts\b_RSSFeed.lua:493: attempt to index field '?' (a nil value)
У тебя просто нет нужных библиотек для скрипта...
Автор: derschaman 10.7.2008, 11:53
Цитата(Strannik @ 9.7.2008, 20:20)
Перевел под API 2 но выводит ошибку C:\PtokaX\scripts\b_RSSFeed.lua:493: attempt to index field '?' (a nil value)
..хмм... если мне не изменяет память, то для версий ptokax 4.1.x.x в коде скрипта необходимо использовать абсолютные пути к папкам и файлам, а не относительные, как было ранее...
...в переведённом - пути остались прежние, будет сыпать ошибками или тупо не работать, если не исправить...
Автор: Infernus-pro 10.7.2008, 15:27
Цитата
если мне не изменяет память, то для версий ptokax 4.1.x.x в коде скрипта необходимо использовать абсолютные пути к папкам и файлам, а не относительные, как было ранее...
я проверял скрипт на версии PtokaX 0.4.1.0RC1 (абсолютные пути не требуются) - та же ошибка.
Автор: Strannik 10.7.2008, 17:18
Цитата(brigadir @ 10.7.2008, 2:19)
У тебя просто нет нужных библиотек для скрипта...
Под PtokaX 3.6.0.0 все прекрасно работает полный скрипт у Gangster А нужно для PtokaX 4.1.1.0
Автор: rus.region78 10.7.2008, 20:01
К этому скрипту нужна библиотека: PxWSA Socket Library, которая с новой PtokaX не работает.... :P
Автор: Strannik 10.7.2008, 21:16
Цитата(rus.region78 @ 10.7.2008, 20:01)
К этому скрипту нужна библиотека: PxWSA Socket Library, которая с новой PtokaX не работает.... :P
выдает такое Синтаксис C:\0.4.1.1\scripts\FeedWatch.lua:62: module 'socket.http' not found: no field package.preload['socket.http'] no file 'C:\0.4.1.1\socket\http.lua' no file 'C:\0.4.1.1\libs\socket\http.lua' no file 'C:\0.4.1.1\scripts\libs\socket\http.lua' no file 'C:\0.4.1.1\socket\http.dll' no file 'C:\0.4.1.1\libs\socket\http.dll' no file 'C:\0.4.1.1\scripts\libs\socket\http.dll' no file 'C:\0.4.1.1\socket.dll' no file 'C:\0.4.1.1\libs\socket.dll' no file 'C:\0.4.1.1\scripts\libs\socket.dll' как понял не хватает дллок и еще чего-то, подскажите где взять и куда их потом положить
Автор: Инкогнито 17.7.2008, 0:03
поставил дополнительные библиотееки отсюда http://mydc.ru/topic43.html в итоге все заработало, только шрифт нечитабльный, где можно изменить кодировку? Скриптик с первого поста FeedWatch.lua
Автор: Инкогнито 17.7.2008, 22:46
еще вопросик, как убрать бота от этого самого РСС из списка юзеров
Автор: dimetrius 18.7.2008, 1:12
По идее в строке:
Цитата
sBot = "Ленты_новостей", ---- Имя бота
удлить полностью Ленты_новостей, т.е. чтоб между кавычками ничего не осталось!
Или ещё есть выражение для определения имени бота основного! не помню..
Автор: Infernus-pro 18.7.2008, 14:34
Цитата
еще вопросик, как убрать бота от этого самого РСС из списка юзеров
Цитата
Или ещё есть выражение для определения имени бота основного! не помню..
Вроде так:
Цитата
sBot = SetMan.GetString(21)
Автор: Инкогнито 18.7.2008, 23:34
да имя бота я сразу убрал, просто когда настраиваешь рсс, в списке появляется юзер с названием это ленты, т.е. откуда он взят. У меня лента с хайтека, появляется юзер в списке "Hi-Tech Zone"
Автор: rus.region78 20.7.2008, 16:26
Цитата(Инкогнито @ 19.7.2008, 0:34)
да имя бота я сразу убрал, просто когда настраиваешь рсс, в списке появляется юзер с названием это ленты, т.е. откуда он взят. У меня лента с хайтека, появляется юзер в списке "Hi-Tech Zone"
Код
ParseFeed = function(xml) New = {} if not FeedNick then local _,_,title = xml:find("<title>([^<]-)</title>") title = "(bot)Спиридон" or title
я дал имя титулам бота хаба, теперь он не регистрируется в списке юзеров...
Автор: Инкогнито 21.7.2008, 1:25
опять же не совсем то о чем говорил, просто на хабе в списке юзеров не отображается ни одного бота, как буд-то их там вообще нет. Ьак что предложеный вами вариант не подходит, покапавшись немного в скрипте еще, все-таки решение было найдено
Код
ParseFeed = function(xml) New = {} if not FeedNick then local _,_,title = xml:find("<title>([^<]-)</title>") title = title or "N/A" FeedNick = title:gsub("[ %c]",string.char(160)) Core.RegBot(FeedNick,"RSS Feed Bot",Feed,true)
в это части кода убрал последнюю строку и все, больше он не отображается в списке юзеров. Пока работает, ошибок не обнаружено.
Автор: Gangster 17.8.2008, 15:37
ну так кто выложит рабочий скрипт ррс чтобы менюшка пахала и можно было добовлять сови ррс
Автор: Fodin 22.8.2008, 2:12
Все это здорово и замечательно. Пока кодировочка у RSS - 1251. А если будет UTF-8, то тут-то и будет "приплыли". А таких лент - до черта. В Луа нет функции перекодировки. Лично мне пришлось dll писать под это дело.
Автор: Инкогнито 26.8.2008, 1:53
Цитата(Fodin @ 22.8.2008, 5:12)
Все это здорово и замечательно. Пока кодировочка у RSS - 1251. А если будет UTF-8, то тут-то и будет "приплыли". А таких лент - до черта. В Луа нет функции перекодировки. Лично мне пришлось dll писать под это дело.
угу, верно сказал про кодировочку, поделись dll-кой пожалуйста если не трудно
Автор: Nickolya 26.8.2008, 18:31
Вот функция перевода из утф в коир, пришлось как-то сворганить, причем из функции которая переделывала коир в утф , из-за неумения создания библиотек, изобретаем велосипеды... Вот код:
Код
s208 = string.char(208) s209 = string.char(209)
function utf8towinru(text) text = text:gsub(s208.."(.)", function(sch) if (string.byte(sch)>=144 and string.byte(sch)<=191) then return string.char(string.byte(sch)+48) end if (string.byte(sch)==129) then return "Ё" end return s208..sch end) text = text:gsub(s209.."(.)", function(sch) if (string.byte(sch)>=128 and string.byte(sch)<=143) then return string.char(string.byte(sch)+112) end if (string.byte(sch)==145) then return "ё" end return s209..sch end) return text end
Автор: Setuper 26.8.2008, 18:47
2Fodin: поделитесь опытом создания dll, а именно конфигурацией def файлов, и компиляцией dll для sqlite под апи2 (исходники предоставлю).
Автор: viktor6 3.1.2009, 15:38
Так что нет рабочего скрипта??
Автор: MEXAHuK 6.1.2009, 5:56
оч. прошу спецов доделать этот скрипт. народу: или вы выложте поласта норм раб. скрипт
Автор: MEXAHuK 27.1.2009, 13:33
Цитата(Nickolya @ 26.8.2008, 20:31)
Вот функция перевода из утф в коир, пришлось как-то сворганить, причем из функции которая переделывала коир в утф , из-за неумения создания библиотек, изобретаем велосипеды... Вот код:
Код
s208 = string.char(208) s209 = string.char(209)
function utf8towinru(text) text = text:gsub(s208.."(.)", function(sch) if (string.byte(sch)>=144 and string.byte(sch)<=191) then return string.char(string.byte(sch)+48) end if (string.byte(sch)==129) then return "Ё" end return s208..sch end) text = text:gsub(s209.."(.)", function(sch) if (string.byte(sch)>=128 and string.byte(sch)<=143) then return string.char(string.byte(sch)+112) end if (string.byte(sch)==145) then return "ё" end return s209..sch end) return text end
как применить это к конкретному скрипту из первого поста? выложи файл который может читать утф8 кодированные хмльки поласта
Автор: serrrios 8.2.2009, 13:54
Для подключения УТФ8 в скрипте на первом посте:
1) Найти:
Код
local msg = ParseFeed(Decode(fd))
Заменить на:
Код
local msg = ParseFeed(utf8towinru(fd))
2) В конце файла добавить:
Код
s208 = string.char(208) s209 = string.char(209)
utf8towinru = function(text) text = text:gsub(s208.."(.)", function(sch) if (string.byte(sch)>=144 and string.byte(sch)<=191) then return string.char(string.byte(sch)+48) end if (string.byte(sch)==129) then return "Ё" end return s208..sch end) text = text:gsub(s209.."(.)", function(sch) if (string.byte(sch)>=128 and string.byte(sch)<=143) then return string.char(string.byte(sch)+112) end if (string.byte(sch)==145) then return "ё" end return s209..sch end) return text end
3) Сказать спасибо
Автор: li4nost 8.3.2009, 4:19
скажите, какую рабочую версии (или наиболее стабильную) поставить на апи2?
Автор: Cramac 10.7.2009, 16:44
Выложите рабочую версию, а то некоторые ссылки уже не работают :(
Автор: STRELOK 10.7.2009, 17:58
Полностью рабочий скрипт. Не отправляет сообщения в ПМ юзерам(убрал это, т.к. считаю что это не нужно). Добавил команду, меню, отправка результата только при вводе команды в чат
UPD: аттач загрузить не удалось :( , поэтому скачиваем отсюда: http://mydc.ru/r/?http://core454.hut1.ru/RSS_Feed.lua
Автор: Cramac 11.7.2009, 9:43
запустил этот скрипт, при вводе !rss или выбор через меню пишет : Неизвестная команда. что не так?
Автор: district 11.7.2009, 10:34
Может быть, это репорт другого скрипта, который перехватывает команду и сверяет ее со списком известных ему команд? Нужно попробовать поместить Rss-ленты в верх списка скриптов.
Автор: Cramac 11.7.2009, 11:05
Спасибо, как то сразу не подумал про это...
А как узнать список команд доступных? Как добавить источник?
Автор: Wariner 11.7.2009, 11:28
всё зависит от того каким скриптом это делается!!!!
Автор: district 11.7.2009, 12:35
Буквально на днях щупал один многофункциональный бот известный... там была такая сверка. Убей не вспомню название, память что решето ... :inv: Думаю надо смотреть начиная с мультиботов, установленных на хабе, потом по степени убывания размеров самого бота.
Автор: xRayNeo 11.7.2009, 17:31
STRELOK,
Код
function ChatArrival(tUser,sData) sData = string.sub(sData,1,-2) local _,_,cmd = string.find(sData, "%b<>%s+(%S+)") if cmd == "!"..sCmd.."" then if tProfile[tUser.iProfile] == 1 then Core.SendPmToUser(tUser,Bot,GetFeed()) end return true end end
Сложно придумать большую дыру для ддоса =) Ты не думал, что при таком использовании хаб можно запросто уронить? Скачивание и обработка фида должны проводиться периодически, а не по запросу юзера. Подумай, что будет, если ленту одновременно запросят несколько человек. ИМХО надо оставить обработку по таймеру и хранить ленту в виде строки или таблицы, а по запросу юзера выдавать ее в ЛС.
Автор: STRELOK 11.7.2009, 18:33
Тогда качайте скрипт из первого поста
Автор: xRayNeo 12.7.2009, 0:39
Цитата(STRELOK @ 11.7.2009, 19:33)
Тогда качайте скрипт из первого поста
Нет, я сам делал скрипт по вашему примеру Просто кое-что желательно сделать иначе. Могу выложить свой вариант, если кому нужно.
У меня обновление фида и его парсинг производится по таймеру (как в оригинале), а по запросу юзера (как в варианте STRELOK) выдается уже обработанная лента, хранящаяся в памяти в виде строки. Да, памяти кушает скрипт больше, зато надежнее.
Автор: Setuper 12.7.2009, 2:08
Ддосить не удастся из-за антифлуда. Другое дело если он отключен. Да и вообще мало кто знает как это делается. Некоторые админы вообще отключают защиту от ддоса на хабе (ддос по средствам отсылки в dc-команде ip адреса жертвы).
Хотя соглашусь, что экономичнее запрашивать периодически и хранить в памяти. А то дёргать сайт и парсить при каждой команде слишком нагрузочно.
Автор: DemoN 22.7.2009, 0:18
Поставил это дело на хаб, не пашет, ругается на библиотеку (она есть) и кроме того пишет это:
[01:16] Синтакс F:\******\scripts\b_RSSFeed.lua:493: attempt to call global 'libinit' (a nil value)
Как исправить? Спасибо!
Автор: Lesh™ 15.10.2009, 23:03
Поделитесь более мение рабочей версией, плиз...
Автор: 12345 15.11.2009, 13:25
А под php можна его както переделать?
Автор: Uncle_Dif 17.12.2009, 16:53
Почитал-с-ума-сошел.
Так есть он, этот скрипт, готовый - не самододелываемый?
Дождался, качнул самый первый экземпляр, пацталом))) Робит, имхо как и задумано. А я думал новостей узнаю)))
Автор: SAG 10.4.2010, 6:35
Что надо сделать, чтобы скрипт отсылал сообщения только определённному IP диапазону?
Автор: GreyDer 14.6.2010, 16:04
Цитата(STRELOK @ 10.7.2009, 17:58)
Полностью рабочий скрипт. Не отправляет сообщения в ПМ юзерам(убрал это, т.к. считаю что это не нужно). Добавил команду, меню, отправка результата только при вводе команды в чат
UPD: аттач загрузить не удалось :( , поэтому скачиваем отсюда: <span class='inv'><![CDATA[]]></span>http://mydc.ru/r/?http://core454.hut1.ru/RSS_Feed.lua<span class='inv'><![CDATA[]]></span>
можешь скрипт энтот перезалить на др ресурс? а то уже ссыль сдохла..
Автор: Accelerator 14.6.2010, 16:16
Цитата(GreyDer @ 14.6.2010, 19:04)
можешь скрипт энтот перезалить на др ресурс? а то уже ссыль сдохла..
http://mydc.ru/topic111.html?view=findpost&p=24208 На том адресе такой же когда-то лежал
Автор: DEN 007 26.7.2010, 10:24
А вот у мя вопрос.. как сделать следующее... к примеру парсить не с одного новостного канала а с нескольких, Смысл?
Вот к примеру в менюшке: Яндекс новости, новости с кинопоиска, новости с вашего сайта, еще откуда то.. Не совсем удобно для каждого канала создавать отдельный скрипт, да и память грузит...
и еще почему он не кеширует инфу? этож вызывает нагрузку... я про скрипт и з вот http://mydc.ru/index.html?showtopic=111&view=findpost&p=24208 поста
А во нашел.. хеширует он)) тока у меня файлик не создавался... Как исправить? (для freebsd) Находим
Цитата
local File = "FeedWatch.dat"
Заменяем на
Цитата
local File = Core.GetPtokaXPath().."scripts/FeedWatch.dat"
Кажись Я начинаю понимать этот язык..)
Автор: Nickolya 26.7.2010, 12:39
Толкового скрипта нет, но в темах по рсс были поделки, работающие по нескольким каналам в одном скрипте. Толковый скрипт на ранней стадии написания...
Автор: Ksan 24.9.2010, 15:31
Выложена отдельной темой http://mydc.ru/topic3901.html, переведенная из API1 в API2, работает под библиотекой луасокет и нет проблем с UTF-8.