Módulo:EventosCronologicosAno
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:EventosCronologicosAno/doc
local p = {} -- Função para substituir caracteres especiais local function removerAcentos(str) local substituicoes = { ["ç"] = "c", ["Ç"] = "C", ["á"] = "a", ["à"] = "a", ["ã"] = "a", ["â"] = "a", ["é"] = "e", ["ê"] = "e", ["í"] = "i", ["ó"] = "o", ["ô"] = "o", ["õ"] = "o", ["ú"] = "u", ["Á"] = "A", ["À"] = "A", ["Ã"] = "A", ["Â"] = "A", ["É"] = "E", ["Ê"] = "E", ["Í"] = "I", ["Ó"] = "O", ["Ô"] = "O", ["Õ"] = "O", ["Ú"] = "U" } for acento, substituicao in pairs(substituicoes) do str = str:gsub(acento, substituicao) end return str end -- Função para processar jogos notáveis local function processarJogosNotaveis(jogosNotaveis, anoFiltro) local eventos = {} local marcos = {100, 200, 300, 400, 500, 600, 700} for _, item in ipairs(jogosNotaveis or {}) do local atleta = item.ApelidoJogador2 or 'Atleta desconhecido' for _, marco in ipairs(marcos) do local propriedade = "Jogo" .. marco local dataJogo = item[propriedade] if dataJogo then local diaJogo, mesJogo, anoJogo = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)") if anoJogo and tonumber(anoJogo) == anoFiltro then table.insert(eventos, { ano = tonumber(anoJogo) or 0, texto = string.format("%d - %s completou %d jogos pelo [[Grêmio]].", tonumber(anoJogo), atleta, marco) }) end end end end return eventos end -- Função para processar treinadores notáveis local function processarJogosNotaveisTreinador(jogosNotaveisTreinador, anoFiltro) local eventos = {} local marcos = {100, 200, 300, 400, 500} for _, item in ipairs(jogosNotaveisTreinador or {}) do local atleta = item.PaginaJogador2 or 'Treinador desconhecido' for _, marco in ipairs(marcos) do local propriedade = "Jogo" .. marco .. "treinador" local dataJogo = item[propriedade] if dataJogo then local diaJogo, mesJogo, anoJogo = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)") if anoJogo and tonumber(anoJogo) == anoFiltro then table.insert(eventos, { ano = tonumber(anoJogo) or 0, texto = string.format("%d - %s completou %d jogos como treinador do [[Grêmio]].", tonumber(anoJogo), atleta, marco) }) end end end end return eventos end -- Função para processar estreias notáveis local function processarEstreias(estreias, anoFiltro) local eventos = {} for _, item in ipairs(estreias or {}) do local dataEstreia = item.EstreiaNotavel or '' local atleta = item.ApelidoJogador2 or 'Atleta desconhecido' local diaEstreia, mesEstreia, anoEstreia = dataEstreia:match("^(%d%d)/(%d%d)/(%d%d%d%d)") if anoEstreia and tonumber(anoEstreia) == anoFiltro then table.insert(eventos, { ano = tonumber(anoEstreia) or 0, texto = string.format("%d - Estreia de %s pelo [[Grêmio]].", tonumber(anoEstreia), atleta) }) end end return eventos end -- Função para processar gols marcantes local function processarGolsMarcantes(golsMarcantes, anoFiltro) local eventos = {} local marcos = {1, 50, 100, 150, 200} for _, item in ipairs(golsMarcantes or {}) do local atleta = item.ApelidoJogador2 or 'Atleta desconhecido' -- Processar marcos de gols for _, marco in ipairs(marcos) do local propriedade = "DataGol" .. marco local dataGol = item[propriedade] if dataGol then local diaGol, mesGol, anoGol = dataGol:match("^(%d%d)/(%d%d)/(%d%d%d%d)") if anoGol and tonumber(anoGol) == anoFiltro then table.insert(eventos, { ano = tonumber(anoGol) or 0, texto = string.format("%d - %s marcou seu %dº gol com a camisa do [[Grêmio]].", tonumber(anoGol), atleta, marco) }) end end end -- Processar o último gol local dataGolUltimo = item.DataGolUltimo if dataGolUltimo then local diaGol, mesGol, anoGol = dataGolUltimo:match("^(%d%d)/(%d%d)/(%d%d%d%d)") if anoGol and tonumber(anoGol) == anoFiltro then table.insert(eventos, { ano = tonumber(anoGol) or 0, texto = string.format("%d - %s marcou seu último gol com a camisa do [[Grêmio]].", tonumber(anoGol), atleta) }) end end end return eventos end function p.getEventos(frame) local smw = mw.smw.ask local currentTitle = mw.ustring.toNFC(mw.title.getCurrentTitle().text) -- Remover espaços extras e normalizar o título currentTitle = mw.text.trim(currentTitle) currentTitle = removerAcentos(currentTitle:lower()) -- Extrair o ano do título local anoFiltro = currentTitle:match("^(%d%d%d%d)$") if not anoFiltro then return "Erro: O título da página deve ser um ano válido (ex: 2023)." end anoFiltro = tonumber(anoFiltro) if not anoFiltro then return "Erro: Ano inválido." end local jogosTitulo = smw{ '[[AnoJogo::' .. anoFiltro .. ']]', '[[Categoria:Jogo do Título]]', '?AnoJogo', '?Competição', '?Detalhes', 'sort=AnoJogo', 'order=asc' } or {} local estadios = smw{ '[[AnoJogo::' .. anoFiltro .. ']]', '[[Categoria:Estádios inaugurados pelo Grêmio]]', '?AnoJogo', '?EstadioApelido2', '?Adversario', 'sort=AnoJogo', 'order=asc' } or {} local estreias = smw{ '[[EstreiaNotavel::+]]', '?EstreiaNotavel', '?ApelidoJogador2', 'sort=EstreiaNotavel', 'order=asc' } or {} local jogosNotaveis = smw{ '[[Jogo100::+]] OR [[Jogo200::+]] OR [[Jogo300::+]] OR [[Jogo400::+]] OR [[Jogo500::+]] OR [[Jogo600::+]] OR [[Jogo700::+]]', '?Jogo100', '?Jogo200', '?Jogo300', '?Jogo400', '?Jogo500', '?Jogo600', '?Jogo700', '?ApelidoJogador2', 'sort=Jogo100', 'order=asc' } or {} local jogosNotaveisTreinador = smw{ '[[Jogo100treinador::+]] OR [[Jogo200treinador::+]] OR [[Jogo300treinador::+]] OR [[Jogo400treinador::+]] OR [[Jogo500treinador::+]]', '?Jogo100treinador', '?Jogo200treinador', '?Jogo300treinador', '?Jogo400treinador', '?Jogo500treinador', '?PaginaJogador2', 'sort=Jogo100', 'order=asc' } or {} local golsMarcantes = smw{ '[[DataGol1::+]] OR [[DataGol50::+]] OR [[DataGol100::+]] OR [[DataGol150::+]] OR [[DataGol200::+]] OR [[DataGolUltimo::+]]', '?DataGol1', '?DataGol50', '?DataGol100', '?DataGol150', '?DataGol200', '?DataGolUltimo', '?ApelidoJogador2', 'sort=DataGol1', 'order=asc' } or {} local eventos = {} for _, item in ipairs(jogosTitulo) do local ano = tonumber(item.AnoJogo) or 0 table.insert(eventos, { ano = ano, texto = string.format("%d - [[Grêmio]] Campeão - %s. Detalhes: %s", ano, tostring(item["Competição"] or ''), tostring(item.Detalhes or 'Sem detalhes')) }) end for _, item in ipairs(estadios) do table.insert(eventos, { ano = tonumber(item.AnoJogo) or 0, texto = string.format("%d - [[Grêmio]] inaugura %s em partida contra [[%s]].", tonumber(item.AnoJogo), item.EstadioApelido2 or 'Estádio', item.Adversario or 'Adversário desconhecido') }) end for _, evento in ipairs(processarEstreias(estreias, anoFiltro)) do table.insert(eventos, evento) end for _, evento in ipairs(processarJogosNotaveis(jogosNotaveis, anoFiltro)) do table.insert(eventos, evento) end for _, evento in ipairs(processarJogosNotaveisTreinador(jogosNotaveisTreinador, anoFiltro)) do table.insert(eventos, evento) end for _, evento in ipairs(processarGolsMarcantes(golsMarcantes, anoFiltro)) do table.insert(eventos, evento) end table.sort(eventos, function(a, b) return a.ano < b.ano end) local resultado = {} for _, evento in ipairs(eventos) do table.insert(resultado, evento.texto) end return #resultado > 0 and table.concat(resultado, '<br>') or "''Sem dados para o ano " .. anoFiltro .. ".''" end return p