Модуль:FetchData3: відмінності між версіями

нема опису редагування
Немає опису редагування
Мітка: Ручний відкіт
Немає опису редагування
Рядок 32: Рядок 32:
     -- Отримуємо заголовки (перший рядок після {|)
     -- Отримуємо заголовки (перший рядок після {|)
     local headers = {}
     local headers = {}
     local first_row = mw.ustring.match(table_content, "{|[^\n]*\n!(.-)[\n]")
     local first_row = nil
   
    -- Шукаємо рядок з заголовками
    for line in mw.ustring.gmatch(table_content, "([^\n]+)") do
        if mw.ustring.match(line, "^!") then
            first_row = line
            break
        end
    end
      
      
     if first_row then
     if first_row then
         -- Розбиваємо заголовки по ||
        -- Замінюємо   на пробіли
         for header in mw.ustring.gmatch(first_row, "([^|]+)") do
        first_row = mw.ustring.gsub(first_row, " ", " ")
       
         -- Розбиваємо по ! або !!
         for header in mw.ustring.gmatch(first_row, "!+%s*([^!]+)") do
             local trimmed = mw.text.trim(header)
             local trimmed = mw.text.trim(header)
             if trimmed ~= "" then
             if trimmed ~= "" then
Рядок 85: Рядок 96:
--- Генерує іконку медалі
--- Генерує іконку медалі
local function get_medal_icon(value)
local function get_medal_icon(value)
    -- Перевіряємо, чи значення не порожнє
     if not value or value == "" or value == " " then
     if not value or value == "" or value == " " then
         return nil
         return nil
     end
     end
      
      
    -- Видаляємо пробіли
     value = mw.text.trim(value)
     value = mw.text.trim(value)
      
      
Рядок 130: Рядок 139:
--- Генерує посилання на турнір
--- Генерує посилання на турнір
local function get_tournament_link(header_name)
local function get_tournament_link(header_name)
    -- Визначаємо, чи це сезон
     local season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(фінал%)")
     local season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(фінал%)")
     if not season_num then
     if not season_num then
Рядок 137: Рядок 145:
      
      
     if season_num then
     if season_num then
        -- Конвертуємо назву сезону в число
         local season_map = {
         local season_map = {
             ["Перший"] = 1, ["Другий"] = 2, ["Третій"] = 3,
             ["Перший"] = 1, ["Другий"] = 2, ["Третій"] = 3,
Рядок 148: Рядок 155:
             local roman = to_roman(season_number)
             local roman = to_roman(season_number)
              
              
            -- Визначаємо тип (Фінал або Рейтинг)
             local type_text = ""
             local type_text = ""
             if mw.ustring.find(header_name, "фінал") then
             if mw.ustring.find(header_name, "фінал") then
Рядок 156: Рядок 162:
             end
             end
              
              
            -- Видаляємо (фінал) та (рейтинг) з посилання
             local clean_name = mw.ustring.gsub(header_name, "%s*%(фінал%)%s*", "")
             local clean_name = mw.ustring.gsub(header_name, "%s*%(фінал%)%s*", "")
             clean_name = mw.ustring.gsub(clean_name, "%s*%(рейтинг%)%s*", "")
             clean_name = mw.ustring.gsub(clean_name, "%s*%(рейтинг%)%s*", "")
Рядок 165: Рядок 170:
     end
     end
      
      
    -- Для інших турнірів просто повертаємо назву
     return string.format("[[%s]]", header_name)
     return string.format("[[%s]]", header_name)
end
end
Рядок 186: Рядок 190:
      
      
     -- Отримуємо дані з таблиці "Призовий_фонд"
     -- Отримуємо дані з таблиці "Призовий_фонд"
     local prize_data, err2 = get_player_row("Призовий_фонд", name)
     local prize_data = get_player_row("Призовий_фонд", name)
   
    -- Створюємо мапу призових
    local prize_map = {}
    if prize_data then
        for j = 1, #prize_data.headers do
            local header = prize_data.headers[j]
            local value = prize_data.cells[j] or ""
            prize_map[header] = value
        end
    end
      
      
     -- Мапа дат турнірів (потрібно буде заповнити)
     -- Мапа дат турнірів
     local tournament_dates = {
     local tournament_dates = {
         ["Перший сезон"] = "30.05.2023",
         ["Перший сезон"] = "09.09.2023",
         ["Другий сезон"] = "15.08.2023",
         ["Другий сезон"] = "28.10.2023",
         ["Третій сезон"] = "30.10.2023",
         ["Третій сезон"] = "23.12.2023",
         ["Четвертий сезон"] = "15.01.2024",
         ["Четвертий сезон"] = "10.02.2024",
         ["П'ятий сезон"] = "30.03.2024",
         ["П'ятий сезон"] = "06.04.2024",
         ["Шостий сезон"] = "15.06.2024",
         ["Шостий сезон"] = "11.05.2024",
         ["Сьомий сезон"] = "30.08.2024",
         ["Сьомий сезон"] = "06.07.2024",
         ["Восьмий сезон"] = "15.11.2024",
         ["Восьмий сезон"] = "10.08.2024",
         ["Дев'ятий сезон"] = "28.02.2025",
         ["Дев'ятий сезон"] = "28.09.2024",
         ["Mafia Closed Cup I"] = "15.07.2024",
         ["Mafia Closed Cup I"] = "12.11.2023",
         ["Mafia Closed Cup I Online"] = "01.08.2024",
         ["Mafia Closed Cup I Online"] = "28.01.2024",
         ["Фінал Року"] = "31.12.2024"
         ["Фінал Року"] = "13.10.2024"
     }
     }
      
      
Рядок 215: Рядок 229:
              
              
             if medal then
             if medal then
                 -- Отримуємо назву турніру без (фінал)/(рейтинг)
                 -- Прибираємо (фінал)/(рейтинг) для пошуку призових
                 local clean_header = mw.ustring.gsub(header, "%s*%(фінал%)%s*", "")
                 local clean_header = mw.ustring.gsub(header, "%s*%(фінал%)%s*", "")
                 clean_header = mw.ustring.gsub(clean_header, "%s*%(рейтинг%)%s*", "")
                 clean_header = mw.ustring.gsub(clean_header, "%s*%(рейтинг%)%s*", "")
                 clean_header = mw.text.trim(clean_header)
                 clean_header = mw.text.trim(clean_header)
                  
                  
                 -- Отримуємо призові з таблиці "Призовий_фонд"
                 -- Нормалізуємо апостроф
                clean_header = mw.ustring.gsub(clean_header, "'", "'")
               
                -- Шукаємо призові
                local prize_value = prize_map[clean_header]
                if not prize_value then
                    clean_header = mw.ustring.gsub(clean_header, "'", "'")
                    prize_value = prize_map[clean_header]
                end
               
                 local prize_amount = "0 ₴"
                 local prize_amount = "0 ₴"
                 if prize_data then
                 if prize_value and prize_value ~= "" and prize_value ~= "-" and prize_value ~= "0" then
                    for j = 3, #prize_data.headers do
                    prize_amount = prize_value .. " ₴"
                        local prize_header = mw.text.trim(prize_data.headers[j])
                        if prize_header == clean_header then
                            local prize_value = prize_data.cells[j]
                            if prize_value and prize_value ~= "" and prize_value ~= "-" then
                                prize_amount = prize_value .. " ₴"
                            end
                            break
                        end
                    end
                 end
                 end
                  
                  
                 -- Отримуємо дату турніру
                 -- Дата турніру
                 local date = tournament_dates[clean_header] or "01.01.2023"
                 local date = tournament_dates[clean_header] or "01.01.2023"
                  
                  
                 -- Форматуємо посилання на турнір
                 -- Посилання на турнір
                 local tournament_link = get_tournament_link(header)
                 local tournament_link = get_tournament_link(header)
                  
                  
Рядок 244: Рядок 258:
                 local place_text = ""
                 local place_text = ""
                 if cell_value == "1" then
                 if cell_value == "1" then
                     place_text = "1-е місце"
                     place_text = "1-е"
                 elseif cell_value == "2" then
                 elseif cell_value == "2" then
                     place_text = "2-е місце"
                     place_text = "2-е"
                 elseif cell_value == "3" then
                 elseif cell_value == "3" then
                     place_text = "3-є місце"
                     place_text = "3-є"
                 elseif cell_value == "4" then
                 elseif cell_value == "4" then
                     place_text = "Фіналіст"
                     place_text = "Участь"
                 elseif cell_value == "S" or mw.ustring.match(cell_value, "^S%d") then
                 elseif cell_value == "S" or mw.ustring.match(cell_value, "^S%d") then
                     place_text = "Найкращий"
                     place_text = "Кращий"
                 end
                 end