Módulo:EventosCronologicosAno: mudanças entre as edições
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 | 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 | local dataNascimento = type(item.DataNascimentoCompleta) == "string" and item.DataNascimentoCompleta 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 | local dia, mes, ano = dataNascimento:match("^(%d%d)/(%d%d)/(%d%d%d%d)$") | ||
local dia, mes = dataNascimento:match("^(%d | |||
if dia and mes and ano and tonumber(ano) == anoFiltro then | 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 | ||
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 | local dataFalecimento = type(item.DataFalecimentoCompleta) == "string" and item.DataFalecimentoCompleta 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 | local dia, mes, ano = dataFalecimento:match("^(%d%d)/(%d%d)/(%d%d%d%d)$") | ||
local dia, mes = dataFalecimento:match("^(%d | |||
if dia and mes and ano and tonumber(ano) == anoFiltro then | 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 | ||
end | end | ||
Linha 244: | Linha 230: | ||
} or {} | } or {} | ||
local estadios = smw{ | -- 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{ | local estreias = smw{ | ||
Linha 276: | Linha 263: | ||
local nascimentos = smw{ | local nascimentos = smw{ | ||
'[[ | '[[DataNascimentoCompleta::+]]', | ||
'? | '?DataNascimentoCompleta', '?ApelidoJogador2', '?Função', | ||
'sort= | 'sort=DataNascimentoCompleta', 'order=asc' | ||
} or {} | } or {} | ||
local falecimentos = smw{ | local falecimentos = smw{ | ||
'[[ | '[[DataFalecimentoCompleta::+]]', | ||
'? | '?DataFalecimentoCompleta', '?ApelidoJogador2', '?Função', | ||
'sort= | '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)") | ||
if dia and mes and ano and tonumber(ano) == anoFiltro then | 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, { | 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), | tonumber(dia), tonumber(mes), competicao, detalhes) | ||
}) | }) | ||
end | end | ||
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 | ||
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