Módulo:EventosCronologicosAno: mudanças entre as edições

De Grêmiopédia, a enciclopédia do Grêmio
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 28: Linha 28:


     for _, item in ipairs(jogosNotaveis or {}) do
     for _, item in ipairs(jogosNotaveis or {}) do
         local atleta = item.ApelidoJogador2 or 'Atleta desconhecido'
         local atleta = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido'
          
          
         for _, marco in ipairs(marcos) do
         for _, marco in ipairs(marcos) do
Linha 34: Linha 34:
             local dataJogo = item[propriedade]
             local dataJogo = item[propriedade]
              
              
             if dataJogo then
             if dataJogo and type(dataJogo) == "string" then
                 local diaJogo, mesJogo, anoJogo = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
                 local diaJogo, mesJogo, anoJogo = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
                  
                  
Linha 41: Linha 41:
                         ano = tonumber(anoJogo) or 0,  
                         ano = tonumber(anoJogo) or 0,  
                         mes = tonumber(mesJogo) or 0,
                         mes = tonumber(mesJogo) or 0,
                        dia = tonumber(diaJogo) or 0,  -- Adicionar o dia
                         texto = string.format("%02d/%02d - %s completou %d jogos pelo [[Grêmio]].",  
                         texto = string.format("%02d/%02d - %s completou %d jogos pelo [[Grêmio]].",  
                                               tonumber(diaJogo), tonumber(mesJogo), atleta, marco)  
                                               tonumber(diaJogo), tonumber(mesJogo), atleta, marco)  
Linha 57: Linha 58:


     for _, item in ipairs(jogosNotaveisTreinador or {}) do
     for _, item in ipairs(jogosNotaveisTreinador or {}) do
         local atleta = item.PaginaJogador2 or 'Treinador desconhecido'
         local atleta = type(item.PaginaJogador2) == "string" and item.PaginaJogador2 or 'Treinador desconhecido'
          
          
         for _, marco in ipairs(marcos) do
         for _, marco in ipairs(marcos) do
Linha 63: Linha 64:
             local dataJogo = item[propriedade]
             local dataJogo = item[propriedade]
              
              
             if dataJogo then
             if dataJogo and type(dataJogo) == "string" then
                 local diaJogo, mesJogo, anoJogo = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
                 local diaJogo, mesJogo, anoJogo = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
                  
                  
Linha 70: Linha 71:
                         ano = tonumber(anoJogo) or 0,  
                         ano = tonumber(anoJogo) or 0,  
                         mes = tonumber(mesJogo) or 0,
                         mes = tonumber(mesJogo) or 0,
                        dia = tonumber(diaJogo) or 0,  -- Adicionar o dia
                         texto = string.format("%02d/%02d - %s completou %d jogos como treinador do [[Grêmio]].",  
                         texto = string.format("%02d/%02d - %s completou %d jogos como treinador do [[Grêmio]].",  
                                               tonumber(diaJogo), tonumber(mesJogo), atleta, marco)  
                                               tonumber(diaJogo), tonumber(mesJogo), atleta, marco)  
Linha 84: Linha 86:
     local eventos = {}
     local eventos = {}
     for _, item in ipairs(estreias or {}) do
     for _, item in ipairs(estreias or {}) do
         local dataEstreia = item.EstreiaNotavel or ''
         local dataEstreia = type(item.EstreiaNotavel) == "string" and item.EstreiaNotavel or ''
         local atleta = item.ApelidoJogador2 or 'Atleta desconhecido'
         local atleta = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido'
         local diaEstreia, mesEstreia, anoEstreia = dataEstreia:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
         local diaEstreia, mesEstreia, anoEstreia = dataEstreia:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
          
          
Linha 92: Linha 94:
                 ano = tonumber(anoEstreia) or 0,  
                 ano = tonumber(anoEstreia) or 0,  
                 mes = tonumber(mesEstreia) or 0,
                 mes = tonumber(mesEstreia) or 0,
                dia = tonumber(diaEstreia) or 0,  -- Adicionar o dia
                 texto = string.format("%02d/%02d - Estreia de %s pelo [[Grêmio]].", tonumber(diaEstreia), tonumber(mesEstreia), atleta)  
                 texto = string.format("%02d/%02d - Estreia de %s pelo [[Grêmio]].", tonumber(diaEstreia), tonumber(mesEstreia), atleta)  
             })
             })
Linha 105: Linha 108:


     for _, item in ipairs(golsMarcantes or {}) do
     for _, item in ipairs(golsMarcantes or {}) do
         local atleta = item.ApelidoJogador2 or 'Atleta desconhecido'
         local atleta = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido'
          
          
         -- Processar marcos de gols
         -- Processar marcos de gols
Linha 112: Linha 115:
             local dataGol = item[propriedade]
             local dataGol = item[propriedade]
              
              
             if dataGol then
             if dataGol and type(dataGol) == "string" then
                 local diaGol, mesGol, anoGol = dataGol:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
                 local diaGol, mesGol, anoGol = dataGol:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
                  
                  
Linha 119: Linha 122:
                         ano = tonumber(anoGol) or 0,  
                         ano = tonumber(anoGol) or 0,  
                         mes = tonumber(mesGol) or 0,
                         mes = tonumber(mesGol) or 0,
                        dia = tonumber(diaGol) or 0,  -- Adicionar o dia
                         texto = string.format("%02d/%02d - %s marcou seu %dº gol com a camisa do [[Grêmio]].",  
                         texto = string.format("%02d/%02d - %s marcou seu %dº gol com a camisa do [[Grêmio]].",  
                                               tonumber(diaGol), tonumber(mesGol), atleta, marco)  
                                               tonumber(diaGol), tonumber(mesGol), atleta, marco)  
Linha 127: Linha 131:


         -- Processar o último gol
         -- Processar o último gol
         local dataGolUltimo = item.DataGolUltimo
         local dataGolUltimo = type(item.DataGolUltimo) == "string" and item.DataGolUltimo or nil
         if dataGolUltimo then
         if dataGolUltimo then
             local diaGol, mesGol, anoGol = dataGolUltimo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
             local diaGol, mesGol, anoGol = dataGolUltimo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
Linha 135: Linha 139:
                     ano = tonumber(anoGol) or 0,  
                     ano = tonumber(anoGol) or 0,  
                     mes = tonumber(mesGol) or 0,
                     mes = tonumber(mesGol) or 0,
                    dia = tonumber(diaGol) or 0,  -- Adicionar o dia
                     texto = string.format("%02d/%02d - %s marcou seu último gol com a camisa do [[Grêmio]].",  
                     texto = string.format("%02d/%02d - %s marcou seu último gol com a camisa do [[Grêmio]].",  
                                           tonumber(diaGol), tonumber(mesGol), atleta)  
                                           tonumber(diaGol), tonumber(mesGol), atleta)  
Linha 142: Linha 147:
     end
     end
     return eventos
     return eventos
end
-- Função para converter o nome do mês para o número correspondente
local function mesParaNumero(mes)
    local meses = {
        Janeiro = 1, Fevereiro = 2, ["Março"] = 3, Abril = 4, Maio = 5, Junho = 6,
        Julho = 7, Agosto = 8, Setembro = 9, Outubro = 10, Novembro = 11, Dezembro = 12
    }
    return meses[mes] or 0
end
end


Linha 157: Linha 153:
     local eventos = {}
     local eventos = {}
     for _, item in ipairs(nascimentos or {}) do
     for _, item in ipairs(nascimentos or {}) do
         local dataNascimento = item['DiaMêsNascimento'] or ''
         local dataNascimento = type(item.DataNascimentoCompleta) == "string" and item.DataNascimentoCompleta or ''
        local anoNascimento = item.AnoNascimento or ''
         local atleta = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido'
         local atleta = item.ApelidoJogador2 or 'Atleta desconhecido'
 
       
         -- Extrair dia, mês e ano da data (formato dd/mm/aaaa)
         -- Extrair dia e mês da data
         local dia, mes, ano = dataNascimento:match("^(%d%d)/(%d%d)/(%d%d%d%d)$")
         local dia, mes = dataNascimento:match("^(%d+) de (%a+)$")
 
        -- Extrair o ano (removendo os colchetes)
        local ano = anoNascimento:match("%[%[(%d+)%]%]")
       
         if dia and mes and ano and tonumber(ano) == anoFiltro then
         if dia and mes and ano and tonumber(ano) == anoFiltro then
             local mesNumero = mesParaNumero(mes)
             table.insert(eventos, {
            if mesNumero > 0 then
                ano = tonumber(ano),
                table.insert(eventos, {  
                mes = tonumber(mes),
                    ano = tonumber(ano),  
                dia = tonumber(dia),  -- Adicionar o dia
                    mes = mesNumero,
                texto = string.format("%02d/%02d - Nascimento de %s.",
                    texto = string.format("%02d/%02d - Nascimento de %s.",  
                    tonumber(dia), tonumber(mes), atleta)
                                          tonumber(dia), mesNumero, atleta)  
            })
                })
            end
         end
         end
     end
     end
Linha 185: Linha 176:
     local eventos = {}
     local eventos = {}
     for _, item in ipairs(falecimentos or {}) do
     for _, item in ipairs(falecimentos or {}) do
         local dataFalecimento = item['DiaMêsFalecimento'] or ''
         local dataFalecimento = type(item.DataFalecimentoCompleta) == "string" and item.DataFalecimentoCompleta or ''
        local anoFalecimento = item.AnoFalecimento or ''
         local atleta = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido'
         local atleta = item.ApelidoJogador2 or 'Atleta desconhecido'
 
       
         -- Extrair dia, mês e ano da data (formato dd/mm/aaaa)
         -- Extrair dia e mês da data
         local dia, mes, ano = dataFalecimento:match("^(%d%d)/(%d%d)/(%d%d%d%d)$")
         local dia, mes = dataFalecimento:match("^(%d+) de (%a+)$")
 
        -- Extrair o ano (removendo os colchetes)
        local ano = anoFalecimento:match("%[%[(%d+)%]%]")
       
         if dia and mes and ano and tonumber(ano) == anoFiltro then
         if dia and mes and ano and tonumber(ano) == anoFiltro then
             local mesNumero = mesParaNumero(mes)
             table.insert(eventos, {
            if mesNumero > 0 then
                ano = tonumber(ano),
                table.insert(eventos, {  
                mes = tonumber(mes),
                    ano = tonumber(ano),  
                dia = tonumber(dia),  -- Adicionar o dia
                    mes = mesNumero,
                texto = string.format("%02d/%02d - Falecimento de %s.",
                    texto = string.format("%02d/%02d - Falecimento de %s.",  
                    tonumber(dia), tonumber(mes), atleta)
                                          tonumber(dia), mesNumero, atleta)  
            })
                })
            end
         end
         end
     end
     end
Linha 244: Linha 230:
     } or {}
     } or {}


     local estadios = smw{
     -- Consulta os estádios inaugurados no ano filtrado
        '[[Data2::+' .. anoFiltro .. ']]',  -- Usar Data2 em vez de AnoJogo
local estadios = smw{
        '[[Categoria:Estádios inaugurados pelo Grêmio]]',
  '[[AnoJogo::' .. anoFiltro .. ']]',  -- Filtra por Data2 no ano especificado
        '?Data2', '?EstadioApelido2', '?Adversario',  -- Incluir Data2 na consulta
  '[[Categoria:Estádios inaugurados pelo Grêmio]]', -- Filtra pela categoria correta
        'sort=Data2', 'order=asc'
  '?AnoJogo', '?Data2', '?EstadioApelido2', '?Adversario',  -- Seleciona as propriedades necessárias
    } or {}
  'sort=AnoJogo', 'order=asc' -- Ordena por Data2
} or {}


     local estreias = smw{
     local estreias = smw{
Linha 276: Linha 263:


     local nascimentos = smw{
     local nascimentos = smw{
         '[[DiaMêsNascimento::+]]',
         '[[DataNascimentoCompleta::+]]',
         '?DiaMêsNascimento', '?ApelidoJogador2', '?Função', '?AnoNascimento',
         '?DataNascimentoCompleta', '?ApelidoJogador2', '?Função',
         'sort=DiaMêsNascimento', 'order=asc'
         'sort=DataNascimentoCompleta', 'order=asc'
     } or {}
     } or {}


     local falecimentos = smw{
     local falecimentos = smw{
         '[[DiaMêsFalecimento::+]]',
         '[[DataFalecimentoCompleta::+]]',
         '?DiaMêsFalecimento', '?ApelidoJogador2', '?Função', '?AnoFalecimento',
         '?DataFalecimentoCompleta', '?ApelidoJogador2', '?Função',
         'sort=DiaMêsFalecimento', 'order=asc'
         'sort=DataFalecimentoCompleta', 'order=asc'
     } or {}
     } or {}


Linha 290: Linha 277:


     for _, item in ipairs(jogosTitulo) do
     for _, item in ipairs(jogosTitulo) do
         local dataJogo = item.Data2 or ''
         local dataJogo = type(item.Data2) == "string" and item.Data2 or ''
         local dia, mes, ano = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
         local dia, mes, ano = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
       
        mw.log("Data do jogo (Data2): " .. dataJogo)  -- Log para verificar a data
          
          
         if dia and mes and ano and tonumber(ano) == anoFiltro then
         if dia and mes and ano and tonumber(ano) == anoFiltro then
             mw.log(string.format("Evento adicionado: Dia %s, Mês %s, Ano %s", dia, mes, ano))  -- Log para verificar o evento
             local competicao = type(item["Competição"]) == "string" and item["Competição"] or 'Competição desconhecida'
            local detalhes = type(item.Detalhes) == "string" and item.Detalhes or 'Sem detalhes'
             table.insert(eventos, {  
             table.insert(eventos, {  
                 ano = tonumber(ano),  
                 ano = tonumber(ano),  
                 mes = tonumber(mes),
                 mes = tonumber(mes),
                dia = tonumber(dia),  -- Adicionar o dia
                 texto = string.format("%02d/%02d - [[Grêmio]] Campeão - %s.",  
                 texto = string.format("%02d/%02d - [[Grêmio]] Campeão - %s.",  
                                       tonumber(dia), tonumber(mes), item["Competição"] or 'Competição desconhecida', item.Detalhes or 'Sem detalhes')
                                       tonumber(dia), tonumber(mes), competicao, detalhes)
             })
             })
        else
            mw.log("Evento ignorado: data inválida ou ano não corresponde ao filtro.")  -- Log para eventos ignorados
         end
         end
     end
     end


     -- Processar estádios
     -- Processa cada estádio retornado pela consulta
    for _, item in ipairs(estadios) do
for _, item in ipairs(estadios) do
        local dataJogo = item.Data2 or ''
    local dataJogo = type(item.Data2) == "string" and item.Data2 or '' -- Obtém a data do jogo
        local dia, mes, ano = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)")
    local dia, mes, ano = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)") -- Extrai dia, mês e ano
        if dia and mes and ano and tonumber(ano) == anoFiltro then
 
            table.insert(eventos, {  
    -- Verifica se a data é válida e se o ano corresponde ao filtro
                ano = tonumber(ano),  
    if dia and mes and ano and tonumber(ano) == anoFiltro then
                mes = tonumber(mes),
        -- Adiciona o evento à lista de eventos
                texto = string.format("%02d/%02d - [[Grêmio]] inaugura %s em partida contra [[%s]].",  
        table.insert(eventos, {  
                                      tonumber(dia), tonumber(mes), item.EstadioApelido2 or 'Estádio', item.Adversario or 'Adversário desconhecido')  
            ano = tonumber(ano),  
            })
            mes = tonumber(mes),
         end
            dia = tonumber(dia),  -- Adiciona o dia
            texto = string.format("%02d/%02d - [[Grêmio]] inaugura %s em partida contra [[%s]].",  
                                  tonumber(dia), tonumber(mes), item.EstadioApelido2 or 'Estádio', item.Adversario or 'Adversário desconhecido')  
        })
    else
        -- Log para depuração (caso a data seja inválida ou o ano não corresponda)
         mw.log("Data inválida ou ano não corresponde ao filtro:", dataJogo)
     end
     end
end


     -- Processar estreias
     -- Processar estreias
Linha 352: Linha 344:
     end
     end


     -- Organizar eventos por mês
     -- Organizar eventos por mês e ordenar por dia
     local eventosPorMes = {}
     local eventosPorMes = {}
     for _, evento in ipairs(eventos) do
     for _, evento in ipairs(eventos) do
Linha 360: Linha 352:
         end
         end
         table.insert(eventosPorMes[mes], evento)
         table.insert(eventosPorMes[mes], evento)
    end
    -- Ordenar os eventos dentro de cada mês pelo dia
    for mes, eventosMes in pairs(eventosPorMes) do
        table.sort(eventosMes, function(a, b) return a.dia < b.dia end)
     end
     end



Edição atual tal como às 12h36min de 23 de março de 2025

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 = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido' for _, marco in ipairs(marcos) do local propriedade = "Jogo" .. marco local dataJogo = item[propriedade] if dataJogo and type(dataJogo) == "string" 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, mes = tonumber(mesJogo) or 0, dia = tonumber(diaJogo) or 0, -- Adicionar o dia texto = string.format("%02d/%02d - %s completou %d jogos pelo [[Grêmio]].", tonumber(diaJogo), tonumber(mesJogo), 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 = type(item.PaginaJogador2) == "string" and item.PaginaJogador2 or 'Treinador desconhecido' for _, marco in ipairs(marcos) do local propriedade = "Jogo" .. marco .. "treinador" local dataJogo = item[propriedade] if dataJogo and type(dataJogo) == "string" 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, mes = tonumber(mesJogo) or 0, dia = tonumber(diaJogo) or 0, -- Adicionar o dia texto = string.format("%02d/%02d - %s completou %d jogos como treinador do [[Grêmio]].", tonumber(diaJogo), tonumber(mesJogo), 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 = type(item.EstreiaNotavel) == "string" and item.EstreiaNotavel or '' local atleta = type(item.ApelidoJogador2) == "string" and 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, mes = tonumber(mesEstreia) or 0, dia = tonumber(diaEstreia) or 0, -- Adicionar o dia texto = string.format("%02d/%02d - Estreia de %s pelo [[Grêmio]].", tonumber(diaEstreia), tonumber(mesEstreia), 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 = type(item.ApelidoJogador2) == "string" and 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 and type(dataGol) == "string" 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, mes = tonumber(mesGol) or 0, dia = tonumber(diaGol) or 0, -- Adicionar o dia texto = string.format("%02d/%02d - %s marcou seu %dº gol com a camisa do [[Grêmio]].", tonumber(diaGol), tonumber(mesGol), atleta, marco) }) end end end -- Processar o último gol local dataGolUltimo = type(item.DataGolUltimo) == "string" and item.DataGolUltimo or nil 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, mes = tonumber(mesGol) or 0, dia = tonumber(diaGol) or 0, -- Adicionar o dia texto = string.format("%02d/%02d - %s marcou seu último gol com a camisa do [[Grêmio]].", tonumber(diaGol), tonumber(mesGol), atleta) }) end end end return eventos end -- Função para processar nascimentos local function processarNascimentos(nascimentos, anoFiltro) local eventos = {} for _, item in ipairs(nascimentos or {}) do local dataNascimento = type(item.DataNascimentoCompleta) == "string" and item.DataNascimentoCompleta or '' local atleta = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido' -- Extrair dia, mês e ano da data (formato dd/mm/aaaa) local dia, mes, ano = dataNascimento:match("^(%d%d)/(%d%d)/(%d%d%d%d)$") if dia and mes and ano and tonumber(ano) == anoFiltro then table.insert(eventos, { ano = tonumber(ano), mes = tonumber(mes), dia = tonumber(dia), -- Adicionar o dia texto = string.format("%02d/%02d - Nascimento de %s.", tonumber(dia), tonumber(mes), atleta) }) end end return eventos end -- Função para processar falecimentos local function processarFalecimentos(falecimentos, anoFiltro) local eventos = {} for _, item in ipairs(falecimentos or {}) do local dataFalecimento = type(item.DataFalecimentoCompleta) == "string" and item.DataFalecimentoCompleta or '' local atleta = type(item.ApelidoJogador2) == "string" and item.ApelidoJogador2 or 'Atleta desconhecido' -- Extrair dia, mês e ano da data (formato dd/mm/aaaa) local dia, mes, ano = dataFalecimento:match("^(%d%d)/(%d%d)/(%d%d%d%d)$") if dia and mes and ano and tonumber(ano) == anoFiltro then table.insert(eventos, { ano = tonumber(ano), mes = tonumber(mes), dia = tonumber(dia), -- Adicionar o dia texto = string.format("%02d/%02d - Falecimento de %s.", tonumber(dia), tonumber(mes), atleta) }) end end return eventos end -- Função para obter o nome do mês a partir do número local function nomeMes(mes) local meses = { "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" } return meses[mes] or "Mês desconhecido" 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', '?Data2', -- Incluir Data2 na consulta 'sort=AnoJogo', 'order=asc' } or {} -- Consulta os estádios inaugurados no ano filtrado local estadios = smw{ '[[AnoJogo::' .. anoFiltro .. ']]', -- Filtra por Data2 no ano especificado '[[Categoria:Estádios inaugurados pelo Grêmio]]', -- Filtra pela categoria correta '?AnoJogo', '?Data2', '?EstadioApelido2', '?Adversario', -- Seleciona as propriedades necessárias 'sort=AnoJogo', 'order=asc' -- Ordena por Data2 } 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 nascimentos = smw{ '[[DataNascimentoCompleta::+]]', '?DataNascimentoCompleta', '?ApelidoJogador2', '?Função', 'sort=DataNascimentoCompleta', 'order=asc' } or {} local falecimentos = smw{ '[[DataFalecimentoCompleta::+]]', '?DataFalecimentoCompleta', '?ApelidoJogador2', '?Função', 'sort=DataFalecimentoCompleta', 'order=asc' } or {} local eventos = {} for _, item in ipairs(jogosTitulo) do local dataJogo = type(item.Data2) == "string" and item.Data2 or '' local dia, mes, ano = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)") if dia and mes and ano and tonumber(ano) == anoFiltro then local competicao = type(item["Competição"]) == "string" and item["Competição"] or 'Competição desconhecida' local detalhes = type(item.Detalhes) == "string" and item.Detalhes or 'Sem detalhes' table.insert(eventos, { ano = tonumber(ano), mes = tonumber(mes), dia = tonumber(dia), -- Adicionar o dia texto = string.format("%02d/%02d - [[Grêmio]] Campeão - %s.", tonumber(dia), tonumber(mes), competicao, detalhes) }) end end -- Processa cada estádio retornado pela consulta for _, item in ipairs(estadios) do local dataJogo = type(item.Data2) == "string" and item.Data2 or '' -- Obtém a data do jogo local dia, mes, ano = dataJogo:match("^(%d%d)/(%d%d)/(%d%d%d%d)") -- Extrai dia, mês e ano -- Verifica se a data é válida e se o ano corresponde ao filtro if dia and mes and ano and tonumber(ano) == anoFiltro then -- Adiciona o evento à lista de eventos table.insert(eventos, { ano = tonumber(ano), mes = tonumber(mes), dia = tonumber(dia), -- Adiciona o dia texto = string.format("%02d/%02d - [[Grêmio]] inaugura %s em partida contra [[%s]].", tonumber(dia), tonumber(mes), item.EstadioApelido2 or 'Estádio', item.Adversario or 'Adversário desconhecido') }) else -- Log para depuração (caso a data seja inválida ou o ano não corresponda) mw.log("Data inválida ou ano não corresponde ao filtro:", dataJogo) end end -- Processar estreias for _, evento in ipairs(processarEstreias(estreias, anoFiltro)) do table.insert(eventos, evento) end -- Processar jogos notáveis for _, evento in ipairs(processarJogosNotaveis(jogosNotaveis, anoFiltro)) do table.insert(eventos, evento) end -- Processar jogos notáveis de treinadores for _, evento in ipairs(processarJogosNotaveisTreinador(jogosNotaveisTreinador, anoFiltro)) do table.insert(eventos, evento) end -- Processar gols marcantes for _, evento in ipairs(processarGolsMarcantes(golsMarcantes, anoFiltro)) do table.insert(eventos, evento) end -- Processar nascimentos for _, evento in ipairs(processarNascimentos(nascimentos, anoFiltro)) do table.insert(eventos, evento) end -- Processar falecimentos for _, evento in ipairs(processarFalecimentos(falecimentos, anoFiltro)) do table.insert(eventos, evento) end -- Organizar eventos por mês e ordenar por dia local eventosPorMes = {} for _, evento in ipairs(eventos) do local mes = evento.mes if not eventosPorMes[mes] then eventosPorMes[mes] = {} end table.insert(eventosPorMes[mes], evento) end -- Ordenar os eventos dentro de cada mês pelo dia for mes, eventosMes in pairs(eventosPorMes) do table.sort(eventosMes, function(a, b) return a.dia < b.dia end) end -- Ordenar os meses local mesesOrdenados = {} for mes in pairs(eventosPorMes) do table.insert(mesesOrdenados, mes) end table.sort(mesesOrdenados) -- Construir o resultado final local resultado = {} for _, mes in ipairs(mesesOrdenados) do table.insert(resultado, "==" .. nomeMes(mes) .. "==") -- Adiciona o cabeçalho do mês for _, evento in ipairs(eventosPorMes[mes]) do table.insert(resultado, "* " .. evento.texto) -- Adiciona cada evento em uma nova linha end table.insert(resultado, "") -- Adiciona uma linha em branco após cada mês (opcional) end return #resultado > 0 and table.concat(resultado, '\n') or "''Sem dados para o ano " .. anoFiltro .. ".''" end return p