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

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

MyDC.ru _ Помощь по скриптам для PtokaX _ Помогите с одним вопросиком по скрипту (Отправка каждой строки от бота)

Автор: DrakonSP 15.1.2010, 20:04

Вообщем имееться код

Нажать для просмотра
Код
elseif cmd == tCmd.SearchNick then
    local nick  = string.match(data, "%b<>%s*%p%S+%s(%S+)$")
    if nick then
        local msg = ""
        local results = 0
        for i in pairs(tUserNicks) do
            for i2 in pairs(tUserNicks[i]) do
                if string.find(i2:lower(),nick:lower()) then
                        msg = msg..BuildStats(i,true)
                        results = results+1
                        break
                    end
                end
            end
            if results == 0 then
            Core.SendToUser(user,"<"..sBot.."> Информация по нику "..nick.." не найдена в базе.")
            else
                msg = "Результат поиска по нику '"..nick.."'.".." Всего найдено записей: "..results..
                msg
            Core.SendPmToNick(user.sNick,sBot,msg)
            end
        else
            Core.SendToUser(user,"<"..sBot.."> Ошибка: Нужно ввести ник или часть ника. Введите "..sPrefix..tCmd.SearchNick.." <Ник>")
        end
        return true

Этот код являеться частью функции ChatArrival(user,data)
А эта фунция являеться частью скрипта StatPX 1.04
Это так для доп. информации.

Вообщем теперь сам вопрос...
Как сделать так что бы определёная строчка сообщения выводимой скриптом отправлялась от бота?
В этом коде есть участок, который отвечает за отправку сообщения (в данном случае о поиске пользователя) в приват.
Нажать для просмотра
Код
        if results == 0 then
            Core.SendToUser(user,"<"..sBot.."> Информация по нику "..nick.." не найдена в базе.")
        else
            msg = "Результат поиска по нику '"..nick.."'.".." Всего найдено записей: "..results..
            msg
            Core.SendPmToNick(user.sNick,sBot,msg)
        end

при этом бот выводит сообщение ввиде:
Цитата
[время] <бот_хаба> Результат поиска по нику "Ник_юзера". Всего найдено записей: "число_записей"
Информация о нике

И это выглядит так
Нажать для просмотра
Цитата
[20:51:03] <Hub-Bot> Результат поиска по нику 'toopizza'. Всего найдено записей: 1
===================================================
Статистика пользователя 'toopizza'
===================================================
- Ник: toopizza
- IP: 89.222.214.82
- Ранг: Рядовой

Общее время проведения на хабе 29 мин.
Среднее время проведения на хабе 7 мин. в сутки

Первый визит на хаб 12 янв в 01:10
Пришёл на хаб 15 янв в 16:49
Покинул хаб 15 янв в 16:50

С данного IP-адреса заходили под никами:
- toopizza - 5 раз(а)
- DrakonSP - 2 раз(а)
===================================================

я же хочу что бы было как то так:
Цитата
[время] <бот_хаба> Результат поиска по нику "Ник_юзера".
[время] <бот_хаба> Всего найдено записей "число_записей"
[время] <бот_хаба> Информация о нике.

Для этого я попытался переделать код следующим образом:
Нажать для просмотра
Код
        if results == 0 then
            Core.SendToUser(user,"<"..sBot.."> Информация по нику "..nick.." не найдена в базе.")
        else
            msg = "Результат поиска по нику '"..nick.."'."
            Core.SendPmToNick(user.sNick,sBot,msg)
            msg = "Всего найдено записей: "..results..
            msg
            Core.SendPmToNick(user.sNick,sBot,msg)
        end

И получил следующий результат:
Цитата
[время] <бот_хаба> Результат поиска по нику "ник_юзера".
[время] <бот_хаба> Всего найдено записей: "число_записей"Результат поиска по нику "ник_юзера".

Почему то вообще перестала отображаться Информация о нике
И 2 раза выводится сообщение "Результат поиска по нику "ник_юзера"."
Вообщем я прошу помогите как сделать так что бы всё норм выводилось.
Спасибо.

Автор: Wariner 15.1.2010, 20:21

я не понял а в чём вопрос то?

Автор: Хабыч 15.1.2010, 20:34

в начало скрипта sBot = "имя бота"

к сообщниям так же приделывай <"..sBot..">

Автор: DrakonSP 15.1.2010, 20:46

Цитата(Хабыч @ 15.1.2010, 21:34) *
в начало скрипта sBot = "имя бота"

к сообщниям так же приделывай <"..sBot..">

Так от тупо пишет имя бота вначале строки
А мне надо что бы бот отправлял это сообщение

Автор: Хабыч 15.1.2010, 20:49

говори конкретней что тебе нужно?

можеш и так поставить если я так понял sBot = SetMan.GetString(21)
таким обрабом имя бота будет братся из настроек птоки

Автор: DrakonSP 15.1.2010, 20:53

Цитата(Хабыч @ 15.1.2010, 21:49) *
говори конкретней что тебе нужно?

можеш и так поставить если я так понял sBot = SetMan.GetString(21)

Что бы отображалось не вот так
Нажать
Цитата
[20:51:03] <Hub-Bot> Результат поиска по нику 'toopizza'. Всего найдено записей: 1
===================================================
Статистика пользователя 'toopizza'
===================================================
- Ник: toopizza
- IP: 89.222.214.82
- Ранг: Рядовой

Общее время проведения на хабе 29 мин.
Среднее время проведения на хабе 7 мин. в сутки

Первый визит на хаб 12 янв в 01:10
Пришёл на хаб 15 янв в 16:49
Покинул хаб 15 янв в 16:50

С данного IP-адреса заходили под никами:
- toopizza - 5 раз(а)
- DrakonSP - 2 раз(а)
===================================================


А вот так
Нажать
Цитата
[20:51:03] <Hub-Bot> Результат поиска по нику 'toopizza'.
[20:51:03] <Hub-Bot> Всего найдено записей: 1
[20:51:03] <Hub-Bot>
===================================================
Статистика пользователя 'toopizza'
===================================================
- Ник: toopizza
- IP: 89.222.214.82
- Ранг: Рядовой

Общее время проведения на хабе 29 мин.
Среднее время проведения на хабе 7 мин. в сутки

Первый визит на хаб 12 янв в 01:10
Пришёл на хаб 15 янв в 16:49
Покинул хаб 15 янв в 16:50

С данного IP-адреса заходили под никами:
- toopizza - 5 раз(а)
- DrakonSP - 2 раз(а)
===================================================


Автор: Хабыч 15.1.2010, 20:56

ну я не телепат, даже не знаю что за скрипт ты делаешь. я тебе показал как, ищи где нужно в скрипте добавить big_smile.gif

Автор: DrakonSP 15.1.2010, 20:57

Цитата(Хабыч @ 15.1.2010, 21:56) *
ну я не телепат, даже не знаю что за скрипт ты делаешь. я тебе показал как, ищи где нужно в скрипте добавить big_smile.gif

Т.е. sBot = SetMan.GetString(21) обеспечит мне то что я хочу если я провильно его расположу в скрипте?

Блин я же в первом посте всё написал!

Автор: Хабыч 15.1.2010, 20:59

да. не надо капсить!!! блин ищи где инфа вся и добавляй <"..sBot.."> только зачем всё это не пойму...

Код
msg = "<"..sBot.."> Результат поиска по нику '"..nick.."'."
            Core.SendPmToNick(user.sNick,sBot,msg)
            msg = "<"..sBot.."> Всего найдено записей: "..results..

думаю так должно работать

Автор: DrakonSP 15.1.2010, 21:20

Цитата(Хабыч @ 15.1.2010, 21:59) *
да. не надо капсить!!! блин ищи где инфа вся и добавляй <"..sBot.."> только зачем всё это не пойму...

Код
msg = "<"..sBot.."> Результат поиска по нику '"..nick.."'."
            Core.SendPmToNick(user.sNick,sBot,msg)
            msg = "<"..sBot.."> Всего найдено записей: "..results..

думаю так должно работать

неа =))
Фишка в том что <"..sBot.."> просто пишет имя бота перед сообщением
А мне надо что бы бот отпралял это сообщение
Делаю вот так
Код
        else
            msg = "<Результат поиска по нику '"..nick.."'."
            Core.SendPmToNick(user.sNick,sBot,msg)
            msg = "<Всего найдено записей: "..results..
            msg
            Core.SendPmToNick(user.sNick,sBot,msg)
        end

и получаю в DC++ фиг с маслом =))
Цитата
[21:14:52] <Hub-Bot> <Hub-Bot> Результат поиска по нику 'toopizza'.
[21:14:52] <Hub-Bot> <Hub-Bot> Всего найдено записей: 1Результат поиска по нику 'toopizza'.

т.е. впринципе бот отправил сообщение "Всего найдено записей: 1"
но почему то к самой концовке этого сообщения добавил первой, а инфу о юзере скушал на обед

Автор: Хабыч 15.1.2010, 21:23

Не надо цитироватиь так посты! big_smile.gif дай выложи всю свою работу попробую глянуть

Автор: DrakonSP 15.1.2010, 21:38

Да я выложу если не разберусь сейчас
А то просто идея пришла одна...

Сделал...

Код
        else
            Core.SendPmToNick(user.sNick,sBot,"Результат поиска по нику '"..nick.."'")
            Core.SendPmToNick(user.sNick,sBot,"Всего найдено записей: "..results.."")
            Core.SendPmToNick(user.sNick,sBot,msg)
        end

Вместо прежнего...
Код
        else
            msg = "Результат поиска по нику '"..nick.."'.".." Всего найдено записей: "..results..
            msg
            Core.SendPmToNick(user.sNick,sBot,msg)
        end

Не думал что будет настолько простой код =))
Но опять же разочарован в том что это будет не очень практично например для большого текста
Если кто то знает способ по практичней чем этот отпишитесь =))
Или киньте сюда чисто функцию которая бы заменяла на "msg" текст "Результат поиска по нику '"..nick.."'"
Как это сделанно выше.
А сам текст был написан внутри этой функции или выведен в отдельный текстовый файл, что очень удобно.

Автор: Wariner 15.1.2010, 22:29

Извиняюсь бред какой то написан... выражайтесь точно что вам надо. разбиение на строчки уже сделаны так что ещё?!

Автор: DrakonSP 15.1.2010, 22:53

Цитата(Wariner @ 15.1.2010, 22:29) *
Извиняюсь бред какой то написан... выражайтесь точно что вам надо. разбиение на строчки уже сделаны так что ещё?!

Вот код вывода поиска по нику в скрипте StatPX 1.04
Нажмите для просмотра
Код
elseif cmd == tCmd.SearchNick then
    local nick  = string.match(data, "%b<>%s*%p%S+%s(%S+)$")
    if nick then
        local msg = ""
        local results = 0
        for i in pairs(tUserNicks) do
            for i2 in pairs(tUserNicks[i]) do
                if string.find(i2:lower(),nick:lower()) then
                    msg = msg..BuildStats(i,true)
                    results = results+1
                    break
                end
            end
        end
        if results == 0 then
            Core.SendToUser(user,"<"..sBot.."> Информация по нику "..nick.." не найдена в базе.")
        else
            Core.SendPmToNick(user.sNick,sBot,"Результат поиска по нику '"..nick.."'")
            Core.SendPmToNick(user.sNick,sBot,"Всего найдено записей: "..results.."")
            Core.SendPmToNick(user.sNick,sBot,msg)
        end

строчка
Код
Core.SendPmToNick(user.sNick,sBot,msg)
выводит в PM информацию о юзере
В свою очередь информация находиться в функции BuildStats(IP,Ext)
Нажмите для просмотра
Код
function BuildStats(IP,Ext)
    if tUserStat[IP] then
        local iAverage = os.difftime(os.time(os.date("*t")), tUserStat[IP].FirstVisit)/(60*60*24)
        if iAverage < 1 then iAverage = 1 end
        local sMsg =
        "\n"..string.rep("=", 51).."\n"..
        " Статистика пользователя '"..tUserStat[IP].Name.."'"..
        "\n"..string.rep("=", 51).."\n"..
        " - Ник: "..tUserStat[IP].Name.."\n"..
        " - IP: "..IP.."\n"..
        " - Ранг: "..GetRank(IP).."\n\n"..
        " Общее время проведения на хабе "..
        MinutesToTime(tUserStat[IP].TotalTime, true).."\n"..
        " Среднее время проведения на хабе "..
        MinutesToTime((tUserStat[IP].TotalTime/iAverage), true).." в сутки".."\n"
        if Ext then
            sMsg = sMsg..
        "\n"..
        " Первый визит на хаб "..GetDate(tUserStat[IP].FirstVisit).."\n"..
        " Пришёл на хаб "..GetDate(tUserStat[IP].Enter).."\n"
            if tUserStat[IP].Online < 1 then
                sMsg = sMsg..
        " Покинул хаб "..GetDate(tUserStat[IP].Leave).."\n"
            end
            sMsg = sMsg..
        "\n"..
        " С данного IP-адреса заходили под никами:".."\n"
            if tUserNicks[IP] then
                for nick in pairs(tUserNicks[IP]) do
                    sMsg = sMsg..
        " - "..nick.."  -  "..tUserNicks[IP][nick].." раз(а)".."\n"
                end
            end
        end
        sMsg = sMsg..
        ""..string.rep("=", 51).."\n"
        return sMsg
    else
        return nil
    end
end

Вопрос в том что бы вывести всю информацию (Текст, возможно даже большого обьёма) в текстовый файл.
Это даст практичность в редактировании данных (Текста)
Т.к. текст будет находиться не в самом скрипте, а вотдельном файле.
Если переделать к примеру весь скрипт, то есть такой плюс что скрипт будет меньше кушать памяти и будет более быстро работать.
Как то так.

Автор: Wariner 15.1.2010, 23:08

От этого скрипт меньше кушать не станет, если не начнёт ещё больше...

Автор: Хабыч 15.1.2010, 23:11

извеняюсь если что но я старался обьяснить так как я понял изначально.

сорри за оффтоп

Автор: DrakonSP 15.1.2010, 23:13

Цитата(Wariner @ 15.1.2010, 23:08) *
От этого скрипт меньше кушать не станет, если не начнёт ещё больше...

Может Вы и правы.
Но врятле будет кушать больше.
И в конце концов это удобно.

Автор: Nickolya 16.1.2010, 16:26

Вместо

Код
msg = "Результат поиска по нику '"..nick.."'.".." Всего найдено записей: "..results..
                msg
            Core.SendPmToNick(user.sNick,sBot,msg)
сделать
Код
            Core.SendPmToNick(user.sNick,sBot,"Результат поиска по нику '"..nick.."'.")
            Core.SendPmToNick(user.sNick,sBot,"Всего найдено записей: "..results)
            Core.SendPmToNick(user.sNick,sBot,msg)
в чем проблема у вас и зачем заводить тему не в ту степь я не понимаю. Если не разбираетесь в вопросе лучше не помогать, а то еще больше запутываете человека, не переоценивайте себя.

Автор: DrakonSP 16.1.2010, 21:02

Цитата(Nickolya @ 16.1.2010, 16:26) *
Вместо
Код
msg = "Результат поиска по нику '"..nick.."'.".." Всего найдено записей: "..results..
                msg
            Core.SendPmToNick(user.sNick,sBot,msg)
сделать
Код
            Core.SendPmToNick(user.sNick,sBot,"Результат поиска по нику '"..nick.."'.")
            Core.SendPmToNick(user.sNick,sBot,"Всего найдено записей: "..results)
            Core.SendPmToNick(user.sNick,sBot,msg)
в чем проблема у вас и зачем заводить тему не в ту степь я не понимаю. Если не разбираетесь в вопросе лучше не помогать, а то еще больше запутываете человека, не переоценивайте себя.

Спс я уже разобрался несколькими постами выше =))