|
|
| (Не показані 2 проміжні версії цього користувача) |
| Рядок 1: |
Рядок 1: |
| local p = {}
| |
|
| |
|
| local pages_to_search = {
| |
| "Перший сезон",
| |
| "Другий сезон",
| |
| "Третій сезон",
| |
| "Четвертий сезон",
| |
| "П'ятий сезон",
| |
| "Шостий сезон",
| |
| "Сьомий сезон",
| |
| "Восьмий сезон",
| |
| "Дев'ятий сезон",
| |
| "Mafia Closed Circle",
| |
| "Ten's_Games",
| |
| "Alternatywa",
| |
| "Майстерня_Стратегічного_Саморозвитку",
| |
| "Get Names 01",
| |
| "Get Names 02",
| |
| "Get Names 03",
| |
| "Get Names 04",
| |
| "Get Names 05",
| |
| "Get Names 06",
| |
| "Get Names 07",
| |
| "Get Names 08",
| |
| "Get Names 09",
| |
| "Women's Closed Cup I",
| |
| "Women's Closed Cup II",
| |
| "Men's Closed Cup I",
| |
| "Men's Closed Cup II",
| |
| "Combined Closed Cup I",
| |
| "Combined Closed Cup II",
| |
| "Score Open Battle I",
| |
| "Score Open Battle II",
| |
| "Mafia Closed Cup I",
| |
| "Mafia Closed Cup I Online",
| |
| "My Closest Circle I",
| |
| "Фінал Року"
| |
| }
| |
|
| |
| local function get_facts_section(page_title)
| |
| local title = mw.title.new(page_title)
| |
| if not title or not title.exists then
| |
| return nil
| |
| end
| |
|
| |
| local content = title:getContent()
| |
| if not content then
| |
| return nil
| |
| end
| |
|
| |
| local section_start = mw.ustring.find(content, "==%s*[Цц]ікаві%s*[Фф]акти%s*==")
| |
|
| |
| if not section_start then
| |
| return nil
| |
| end
| |
|
| |
| local section_end = mw.ustring.find(content, "\n==[^=]", section_start + 1)
| |
|
| |
| local section_content
| |
| if section_end then
| |
| section_content = mw.ustring.sub(content, section_start, section_end - 1)
| |
| else
| |
| section_content = mw.ustring.sub(content, section_start)
| |
| end
| |
|
| |
| return section_content
| |
| end
| |
|
| |
| local function fact_contains_player(fact, player_name)
| |
| local escaped_name = mw.ustring.gsub(player_name, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1")
| |
|
| |
| local pattern1 = "%[%[" .. escaped_name .. "%]%]"
| |
| local pattern2 = "%[%[" .. escaped_name .. "|[^%]]+%]%]"
| |
|
| |
| if mw.ustring.find(fact, pattern1) or mw.ustring.find(fact, pattern2) then
| |
| return true
| |
| end
| |
|
| |
| return false
| |
| end
| |
|
| |
| local function extract_facts(section_content)
| |
| local facts = {}
| |
|
| |
| for fact in mw.ustring.gmatch(section_content, "%*[^\n]+") do
| |
| table.insert(facts, fact)
| |
| end
| |
|
| |
| return facts
| |
| end
| |
|
| |
| function p.facts(frame)
| |
| local player_name = frame.args.player or frame.args[1]
| |
|
| |
| if not player_name or player_name == "" then
| |
| player_name = mw.title.getCurrentTitle().text
| |
| end
| |
|
| |
| local result_parts = {}
| |
|
| |
| for _, page_title in ipairs(pages_to_search) do
| |
| local section = get_facts_section(page_title)
| |
|
| |
| if section then
| |
| local facts = extract_facts(section)
| |
| local player_facts = {}
| |
|
| |
| for _, fact in ipairs(facts) do
| |
| if fact_contains_player(fact, player_name) then
| |
| table.insert(player_facts, fact)
| |
| end
| |
| end
| |
|
| |
| if #player_facts > 0 then
| |
| local block = string.format("==== %s ====\n", page_title)
| |
| for _, fact in ipairs(player_facts) do
| |
| block = block .. fact .. "\n"
| |
| end
| |
| table.insert(result_parts, string.format('<div style="margin-bottom: 20px;">\n%s</div>', block))
| |
| end
| |
| end
| |
| end
| |
|
| |
| if #result_parts == 0 then
| |
| return ""
| |
| end
| |
|
| |
| return table.concat(result_parts, "\n")
| |
| end
| |
|
| |
| function p.facts_count(frame)
| |
| local player_name = frame.args.player or frame.args[1]
| |
|
| |
| if not player_name or player_name == "" then
| |
| player_name = mw.title.getCurrentTitle().text
| |
| end
| |
|
| |
| local count = 0
| |
|
| |
| for _, page_title in ipairs(pages_to_search) do
| |
| local section = get_facts_section(page_title)
| |
|
| |
| if section then
| |
| local facts = extract_facts(section)
| |
|
| |
| for _, fact in ipairs(facts) do
| |
| if fact_contains_player(fact, player_name) then
| |
| count = count + 1
| |
| end
| |
| end
| |
| end
| |
| end
| |
|
| |
| return tostring(count)
| |
| end
| |
|
| |
| return p
| |