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

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

MyDC.ru _ Kорзина _ RSS ленты

Автор: STRELOK 18.6.2009, 19:10

1. Помогите переделать скрипт RSS лент. Данный скрипт отсылает новости с RSS ленты всем пользователям в PM или MainChat, мне нужно сделать так, чтобы RSS новости отсылались в Pm только тому юзеру, который ввёл определённую команду( Например: !rss ) и соответственно скрипт отправлял результат, а не отправление всем по таймеру

2. Как сделать так, чтобы данный скрипт показывал не одну RSS ленту, а несколько. Скажем меню
Пользователь//RSS ленты//Новости с форума Факториал - команда !rssfactorial, лента: http://mydc.ru/r/?http://forum.factorial.ru/index.php?act=rssout&id=1;
Пользователь//RSS ленты//Новости с нашего форума - команда !rssmyforum, лента http://mydc.ru/r/?http://core.pvt.454.ru/forum/index.php?act=rssout&id=1

Что то типо такого.

Особенно важно, чтобы был осуществлён в скрипте пункт 1 в данной теме.

 FeedWatch.lua ( 7.29 килобайт ) : 40
 

Автор: STRELOK 19.6.2009, 12:40

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

Код
GetFeed = function()
    local st = socket.gettime()
    local s,fd,sz,hd = "",http.request(Feed)
    if fd and sz then
        local td,plural = socket.gettime()-st,"секунды."
        if td > 1 then plural = "секунд." end
        local time = string.format("%.2f "..plural,td)
        local msg = ParseFeed(Decode(fd))
        local Send = function(str)
        end
        local sMsg = ""..tostring(cnt).." новых цитат "..plural.." с: "..Feed.."\n\n"..reply.."\n\n"..
        "\t\t\tОбработано за: "..time.."\n\n"
        Mem()
    end
     return sMsg
end

function ChatArrival(tUser,sData)
    sData = string.sub(sData,1,-2)
    local _,_,cmd = string.find(sData, "%b<>%s+(%S+)")
    if cmd == "!rss" then
                Core.SendPmToUser(tUser,Bot,GetFeed())
        end
return true    
    end


Подскажите, как нужно правильно?

Автор: Wariner 19.6.2009, 21:13

просто ты не учёл(забыл как правильно это называется) типо области видимости переменных

Код
GetFeed = function()
    local st = socket.gettime()
    local s,fd,sz,hd = "",http.request(Feed)
        local sMsg
    if fd and sz then
        local td,plural = socket.gettime()-st,"секунды."
        if td > 1 then plural = "секунд." end
        local time = string.format("%.2f "..plural,td)
        local msg = ParseFeed(Decode(fd))
        local Send = function(str)
        end
        sMsg = ""..tostring(cnt).." новых цитат "..plural.." с: "..Feed.."\n\n"..reply.."\n\n"..
        "\t\t\tОбработано за: "..time.."\n\n"
        Mem()
    end
    return sMsg
end

Автор: STRELOK 20.6.2009, 5:31

Вылазит ошибка:

Цитата
\scripts\FeedWatch.lua:137: attempt to concatenate global 'reply' (a nil value)

Автор: STRELOK 21.6.2009, 9:37

Так никто и не знает как ошибку исправить? :(

Автор: Setuper 21.6.2009, 15:17

Нужно посмотреть определена ли глобальная переменная reply, если не определена, её нужно определить.

Автор: STRELOK 21.6.2009, 16:13

Цитата(Setuper @ 21.6.2009, 16:17) *
Нужно посмотреть определена ли глобальная переменная reply, если не определена, её нужно определить.

А как это сделать?

Автор: Setuper 21.6.2009, 16:14

просто ищешь где ей присваивается значение

Автор: STRELOK 21.6.2009, 18:40

Здесь?

Код
            if bool then
                cnt = cnt + 1
                [b]for i,v in ipairs(val) do reply = reply.."\t"..v.."\n" end[/b]
                reply = reply.."\n"
            end

Но что нужно сделать то? Как её нужно определить?

Исправил. Спасибо Nickolya