myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
История благодарностей участнику hjet. Спасибо сказали: 1
Дата поста: В теме: За сообщение: Спасибо сказали:
2.11.2012, 13:51 Запрос помощи или особенности плагиностроения для хаба
для домохозяек и пенсионеров
Всем снова привет кхе.. кхе..
Выдалось у меня пару свободных часов и решил я, на старости лет, сделать покоряющий своей гениальностью, восхваляющий мое имя в века, в усладу миллионов страждущих скромный скрипт, идея которого сводится к простому... но, скачала предыстория:
Щавель со спиртом - русский вариант Махито

Введение
или как старый дед придумал, как убить пару вечерних часов

Есть у меня список дружественных хабов, туда входят хабы моего города + несколько хабов из пиринга (кто не в курсе что это или живет не в москве/подмосковье, то кратко - это локальная сеть между разными провайдерами - не играет роли где они находятся, в твоем городе или в соседнем, имеющими договоренность по обмену внутрисетевым трафиком, а еще короче для обывателя - халява). Итак, уже давно была у меня идея по автоматизации этого списка ну или хоть как то этот список обрабатывать или еще что-то - в те времена я еще не сформулировал свое желание (и трава была зеленее). Как вы могли понять по моим предыдущим сообщениям и темам, я очень краток в написании текстов и далек от какого-либо программирования, но, как говорится в русской народной пословице - глаза бояться, в лес не ходить. Поэтому я решил начать что-то делать и начал я опять с потрошения чужих скриптов и вылепливания некоего мутанта...

Часть 1
или как старый дед луну лепил и отвечал на свои же вопросы

Где мы будем хранить список хабов? Ну конечно не в Вологде, а в файле friendlyhubs.dat лежащему в папке data в папке скриптов (а то каждый скрипт пихает свои файлы dat куда попало, надо же порядок навести?). Что мы будем там хранить? Все что угодно (адрес сайта, имя админа, включен ли хаб, скольк юзеров на хабе, описание в свободном стиле и т.д. и т.п.), но для начала я добавил то, что необходимо - название, адрес, порт и статус:
Код
dFH = {
    [1] = {
        ['hName'] = 'Супер Хаб Деда Пердеда',
        ['hAddr'] = 'localhost',
        ['hPort'] = '411',
        ['hOnline'] = true,
    },
    [2] = {
        ['hName'] = 'Ахтун! 100500 бабок продакшн',
        ['hAddr'] = '127.0.0.1',
        ['hIp'] = '127.0.0.1',
        ['hPort'] = '412',
        ['hOnline'] = false,
    },
}

Создать - создали, теперь подключаем:

Код
dirData = Core.sScriptsDir.."data/" --папка с данными
dataFriendHub = dirData.."friendlyhubs.dat" --список хабов

Выводить мне этот список надо внутри файла motd после захода бабко-юзверя на мой деревенский хаб (мотды у меня специфические с уникальной разметкой в боевом стиле "вырви глаз"):

Код
»»    Дружественные хабы:
    [FriendHubsList]

»»    Мы рекомендуем вам добавить эти хабы в избранное. Хабы из этого списка проверены
    временем, одобрены другими пользователями, имеют схожие правила с нашим хабом и
    находятся под контролем адекватных и отзывчивых администраторов. Чтобы увидеть весь
    список хабов, наберите в чате !ВсеХабы или выберите в меню хаба
        » Помощь » Список хабов
    
»»    Вашего хаба нет в списке? Узнайте как сюда попасть набрав в чате !КакПопастьВСписокХабов
    или через меню хаба
        » Помощь » Как попасть в список хабов?

«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»

Как видите - вместо FriendHubsList будет список хабов + долгоиграющие планы по прикручиванию команд и меню... Продолжаем разговор... Подключаем этот мотд:

Код
dirMotd = Core.sScriptsDir.."motd/" --папка мотдов
motdEnter = Files.LoadText(dirMotd.."enter.txt") --мотд при входе на хаб

Теперь делаем вывод на экран от имени бота:

Код
require"files" -- подключем модуль работы с файлами
sBot = Config.sHubBot -- имя бота

-- делаем что-то при входе юзера на хаб (как видите у меня некая функция ReplaceTag с непонятным никому названием - о в следующей главе)
function OnUserEnter(UID)
    Core.SendToUser(UID, ReplaceTag(motdFriendHub, UID), sBot)
end


Самое легкое осталось позади...

Часть 2
или как старый дед велосипед придумывал

Функция ReplaceTag очень простая она подменяет по регулярке что мы ей напихаем:

Код
-- функция подстановки значений в текст
function ReplaceTag(inpute, UID)
    local message = inpute:gsub("%[(%S+)%]", {
        -- Инфо о юзере
        nick = UID.sNick, -- ник
        ip = UID.sIP, -- ip
        port = UID.iPortConn, -- порт
        realport = UID.iPort, -- реальный порт
        mac = UID.sMacAddress, -- мак-адрес
        
        -- Инфо о хабе
        hubname = Config.sHubName, -- имя хаба
        hubtopic = Config.sTopic, -- топик хаба
        onlineusers = Core.GetUsersCount(), -- юзеров онлайн
        
        -- Хаб лист
        FriendHubsList = FriendlyHubs(), -- список хабов
    })
    return message
end

Да чтож такое! Опять какая то функция FriendlyHubs! Что же она у меня делает (знатоки лунного языка, приготовьтесь - есть шанс пустить себе кровь из глаз):

Код
-- Список дружественных хабов
function FriendlyHubs()
    local result = ''
    local port = ''
    local link = ''

    if loadfile(dataFriendHub) then
        dofile(dataFriendHub)
        for key, value in pairs(dFH) do
            
            -- если порт не 411 - добавляем к ссылке порт
            if value['hPort'] ~= '411' then
                port = ':'..value['hPort']
            end
            
            -- если хаб онлайн - добавляем ссылку, а если нет - пошел нахрен
            if value['hOnline'] == true then
                link = 'dchub://'
            end

            result = result.."\n".."\t["..value['hName'].."]\t\t-\t"..link..value['hAddr']..port
        end
    end
    return result
end


Эпилог
или как старый дед вникал

Собираем это все в правильно последовательности и проверяем результат - все работает прекрасно. На этом моя плодотворная деятельность закончилась (но будет продолжена).

Зачем мне статус хаба? В силу своей необъятной любви к себе и своей врожденной скромности, я хотел бы еще скрипт, который можно было бы повесить в крон и 1 раз в час проверять статус хаба и обновлял файл friendlyhubs.dat... Вот такая вот еще идея...

Есть предложения по улучшению/оптимизации/доработке кода?
мамин_парень

RSS Сейчас: 23.11.2024, 0:48