5261
редагування
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 13: | Рядок 13: | ||
local content = title:getContent() | local content = title:getContent() | ||
if not content then return nil end | if not content then return nil end | ||
-- Escape для імен з дужками/крапками | -- Escape для імен з дужками/крапками | ||
local escaped = mw.ustring.gsub(player_name, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1") | local escaped = mw.ustring.gsub(player_name, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1") | ||
local player_pattern = "%[%[" .. escaped .. "%]%]" | local player_pattern = "%[%[" .. escaped .. "%]%]" | ||
local | -- 1. Вилучаємо вміст таблиці wikitable (все між {| і |}) | ||
local table_content = mw.ustring.match(content, "{|.-([|].-.-[|]})") | |||
if not table_content then return nil end | |||
-- | -- 2. Знаходимо початок блоку, що містить ім'я гравця. | ||
-- Ми шукаємо | <№>\n| [[Гравець]] | |||
-- Перша колонка: [|]%s*.-%s* | |||
-- Друга колонка (ім'я): [|]%s* + player_pattern | |||
-- Шаблон, що захоплює весь блок даних гравця (4 комірки) | |||
-- [|]%s*.-%s*[|]%s*[[Гравець]].- - Це шукає | <будь-що> | [[Гравець]] <будь-що> | |||
-- Ми шукаємо шаблон, який починається з |- і містить 4 комірки. | |||
local search_pattern = | |||
"[|]%s*.-%s*[%-]%s*[|]%s*(" .. player_pattern .. ".-)" -- Знаходимо |- , потім першу комірку, потім [[гравець]] | |||
------- | |||
-- | -- Ми знаємо, що ім'я гравця знаходиться у 2-й комірці. | ||
------------------------------ | -- Отже, шаблон повинен захопити 1-шу, 2-гу, 3-тю та 4-ту комірки, що йдуть підряд | ||
-- [|]%s*.-%s* - Комірка 1 (№) | |||
-- [|]%s*" .. player_pattern .. "%s* - Комірка 2 (Ім'я гравця) | |||
-- [|]%s*.-%s* - Комірка 3 (Дата/Сума) | |||
-- [|]%s*.-%s* - Комірка 4 (Провідник) | |||
local full_row_pattern = "([|]%s*.-%s*[|]%s*" .. player_pattern .. "%s*[|]%s*.-%s*[|]%s*.-%s*)" | |||
local full_row_match = mw.ustring.match(table_content, full_row_pattern) | |||
if not full_row_match then return nil end | |||
-- 3. Розділяємо захоплений блок на комірки (яких має бути 4) | |||
local cells = {} | local cells = {} | ||
for cell in mw.ustring.gmatch( | |||
-- Розділяємо блок по символу | | |||
for cell in mw.ustring.gmatch(full_row_match, "[|](.-)") do | |||
local trimmed_cell = mw.text.trim(cell) | |||
if trimmed_cell ~= "" then | |||
table.insert(cells, trimmed_cell) | |||
end | |||
end | end | ||
-- Перевірка індексування: | |||
-- cells[1] = №, cells[2] = [[Гравець]], cells[3] = Дата/Сума, cells[4] = Провідник/Рахунок | |||
local result = cells[column_index] | local result = cells[column_index] | ||
if not result then return nil end | if not result then return nil end | ||
-- | -- 4. Прибираємо [[link|text]] і [[link]] | ||
result = mw.ustring.gsub(result, "%[%[([^%]|]+)|([^%]]+)%]%]", "%2") -- [[link|text]] -> text | |||
result = mw.ustring.gsub(result, "%[%[([^%]]+)%]%]", "%1") -- [[link]] -> link | |||
result = mw.ustring.gsub(result, "%[%[([^%]|]+)|([^%]]+)%]%]", "%2") | |||
result = mw.ustring.gsub(result, "%[%[([^%]]+)%]%]", "%1") | |||
return mw.text.trim(result) | return mw.text.trim(result) | ||
| Рядок 71: | Рядок 81: | ||
if not d then return dateString end | if not d then return dateString end | ||
local start = os.time({day = d, month = m, year = y}) | -- Оскільки os.time працює з числами, перетворюємо | ||
local finish = os.time({day = 25, month = 10, year = 2024}) | d = tonumber(d) | ||
m = tonumber(m) | |||
y = tonumber(y) | |||
local start = os.time({day = d, month = m, year = y, hour = 0, min = 0, sec = 0}) | |||
local finish = os.time({day = 25, month = 10, year = 2024, hour = 0, min = 0, sec = 0}) | |||
local diff = math.floor((finish - start) / 86400) | local diff = math.floor((finish - start) / 86400) | ||
if diff < 0 then diff = 0 end -- Якщо дата в майбутньому | |||
return string.format("%s (%d | return string.format("%s (%d д)", dateString, diff) | ||
end | end | ||
| Рядок 84: | Рядок 101: | ||
---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ||
-- Для Гравців: № (1), Ім'я (2), Дата (3), Провідник (4) | |||
function p.recruiter(frame) | function p.recruiter(frame) | ||
local name = mw.title.getCurrentTitle().text | local name = mw.title.getCurrentTitle().text | ||
local raw = fetch_from_table("Гравці", name, 4) | |||
-- Додаткова логіка для рекрутера: якщо "Відсутній", то "Не вказано" | |||
if raw == "Відсутній" then return "Не вказано" end | |||
return raw or "Не вказано" | |||
end | end | ||
| Рядок 95: | Рядок 116: | ||
end | end | ||
-- Для Фундація, Призовий_фонд, Фіналіст: | |||
-- № (1), Ім'я (2), Сума/Рахунок (3), [Можливо, Дата, 4] | |||
-- Припускаємо, що потрібне значення знаходиться у колонці 3 | |||
-- Оновлюємо індекс на 3 | |||
function p.foundation(frame) | function p.foundation(frame) | ||
local name = mw.title.getCurrentTitle().text | local name = mw.title.getCurrentTitle().text | ||
local raw = fetch_from_table("Фундація", name, 3) | |||
-- Додаємо ₴ | |||
return (raw or "0") .. " ₴" | |||
end | end | ||
function p.prize_pool(frame) | function p.prize_pool(frame) | ||
local name = mw.title.getCurrentTitle().text | local name = mw.title.getCurrentTitle().text | ||
local raw = fetch_from_table("Призовий_фонд", name, 3) | |||
-- Додаємо ₴ | |||
return (raw or "0") .. " ₴" | |||
end | end | ||
function p.final(frame) | function p.final(frame) | ||
local name = mw.title.getCurrentTitle().text | local name = mw.title.getCurrentTitle().text | ||
local raw = fetch_from_table("Фіналіст", name, 3) | |||
-- Припускаємо, що тут потрібне число, яке має бути доповнене "/9" | |||
if raw and raw ~= "" then | |||
return raw .. "/9" | |||
else | |||
return "0/9" | |||
end | |||
end | end | ||
return p | return p | ||