Módulo:EventosCronologicos

De Grêmiopédia, a enciclopédia do Grêmio
Revisão de 17h30min de 5 de março de 2025 por Júnior Morais (discussão | contribs)
Ir para navegação Ir para pesquisar

A documentação para este módulo pode ser criada em Módulo:EventosCronologicos/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, dataFormatada) 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 diaJogo and mesJogo and anoJogo then local dataJogoFormatada = string.format("%s/%s", diaJogo, mesJogo) if dataJogoFormatada == dataFormatada 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 end return eventos end -- Função para processar estreias notáveis local function processarEstreias(estreias, dataFormatada) 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 diaEstreia and mesEstreia and anoEstreia then local dataEstreiaFormatada = string.format("%s/%s", diaEstreia, mesEstreia) if dataEstreiaFormatada == dataFormatada then table.insert(eventos, { ano = tonumber(anoEstreia) or 0, texto = string.format("%d - Estreia de %s pelo [[Grêmio]].", tonumber(anoEstreia), 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) local currentTitleOriginal = currentTitle -- Salva o título original sem formatação -- Extrair dia e mês do título local dia, mes = currentTitle:match("^(%d%d)%s*de%s*(%a+)$") if not dia or not mes then dia, mes = currentTitle:match("^(%d%d)/(%d%d)") end if not dia or not mes then return "Erro: Formato de data inválido no título da página." end -- Remover acentos do mês (caso ainda existam) mes = removerAcentos(mes) local meses = { janeiro = "01", fevereiro = "02", marco = "03", abril = "04", maio = "05", junho = "06", julho = "07", agosto = "08", setembro = "09", outubro = "10", novembro = "11", dezembro = "12" } mes = meses[mes] or mes if not mes:match("^%d%d$") then return "Erro: Mês inválido após conversão." end local dataFormatada = string.format("%s/%s", dia, mes) -- Usa o título original (sem formatação) para as buscas de Jogo do Título e Estádios local jogosTitulo = smw{ '[[DiaMês::' .. currentTitleOriginal .. ']]', '[[Categoria:Jogo do Título]]', '?AnoJogo', '?Competição', '?Detalhes', 'sort=AnoJogo', 'order=asc' } or {} local estadios = smw{ '[[DiaMês::' .. currentTitleOriginal .. ']]', '[[Categoria:Estádios inaugurados pelo Grêmio]]', '?AnoJogo', '?EstadioApelido2', '?Adversario', 'sort=AnoJogo', 'order=asc' } or {} -- Para as outras buscas, usa o título formatado 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 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 - %s.", ano, item["Competição"] or '', 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, dataFormatada)) do table.insert(eventos, evento) end for _, evento in ipairs(processarJogosNotaveis(jogosNotaveis, dataFormatada)) 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 " " end return p