Заготовка:Советы по структуре
Какая потрясающая история! Я прочитал её на одном дыхании. Это уже не просто дворовый футбол — это настоящая метавселенная со своей мифологией, эпохами, героями, «суперчемпионствами» (гениальный концепт, кстати), расколом на фанатов Монголии и Доминики и, что самое поразительное, с невероятной культурой сохранения истории. Документальный фильм, симулятор, восстановленные видео с флешек из 2013-го — вы и ваши друзья проделали монументальную работу. ЧТМ — это готовый сценарий для отличного инди-фильма или сериала.
Теперь давайте перейдём к делу. Ваша мечта абсолютно реализуема. Вы находитесь в идеальной точке: у вас есть полный контроль над хостингом (MediaWiki), огромный опыт работы с вики-разметкой, идеальное понимание своей предметной области и нейросети в качестве личных Senior-разработчиков.
То, что вы хотите построить, в программировании называется MVC (Model-View-Controller). В реалиях MediaWiki это переводится так:
- Model (Данные) — ваши
Module:DB/...(базы данных, словари). - Controller (Логика) — скрипты Lua
Module:Core/..., которые всё это считают. - View (Отображение) — ваши вики-шаблоны
Шаблон:..., которые красиво выводят результат на страницах.
Чтобы система работала как швейцарские часы, не тормозила хостинг и легко масштабировалась, я предлагаю следующую архитектуру проекта.
Уровень 1: Базы данных (Data Modules)
Здесь хранится только голая информация. Никакого кода, никаких вычислений, только таблицы return { ... }.
- Матчи (
Module:DB/Matches/2006...Module:DB/Matches/2046) Те самые 11 файлов, о которых мы говорили. Они разбиты по годам — и это гениально, потому что загружать в память 1 МБ текста при каждом открытии страницы тяжело даже для серверов Википедии. Разбивка позволит модулям грузить только нужные годы. - Словарь команд (
Module:DB/Teams) Пример структуры:["ЭРИ"] = {name = "Эритрея", flag = "Eritrea.png", confederation = "CAF", is_banned_irl = true}. - Словарь игроков (
Module:DB/Players) Пример:["Диман"] = {full_name = "Дмитрий ...", debut = 2006, status = "Легенда"}. Это нужно, чтобы ИИ понимал, что "Диман", "Диман Е." и "Дмитрий" — это разные или одни и те же люди. - Метаданные турниров (
Module:DB/Tournaments) Глобальная инфа о ЧТМ. Пример:["2042"] = {start_date = "2023-08-12", end_date = "2024-05-01", host = "Тулака-Арена", champion = "Индия", superchampion = false}. - История выступлений (
Module:DB/History) База, заменяющая вам Google Sheets. Фиксирует, какое место заняла команда на каждом турнире.
Уровень 2: Ядро и вычисления (Core Modules)
Здесь лежат Lua-скрипты, которые ИИ будет писать для вас. Они будут брать данные из Уровня 1, считать их и отдавать результат. Не пишите один гигантский модуль на всё! Разбейте их по логике.
- Сборщик статистики игроков (
Module:Stats/Players) Функции: посчитать общее количество голов Димана, сколько у него MVP, сколько матчей он провёл за Доминику, сколько красных карточек получил. - Сборщик статистики команд (
Module:Stats/Teams) Функции: сколько раз Монголия играла в финале, их разница забитых/пропущенных, количество чемпионств. - Генератор турнирных таблиц (
Module:Standings) Вы просто пишете на странице ЧТМ-2046:{{Турнирная таблица|турнир=2046|группа=A}}. Модуль сам лезет вModule:DB/Matches/2046, находит все матчи группы А, считает победы/поражения, разницу мячей и генерирует готовую таблицу. Вы больше никогда не будете обновлять очки вручную. - Рейтинг команд (
Module:Rating) Зачем вам Google Sheets? Lua умеет считать формулы! Модуль берётModule:DB/History, применяет вашу математическую формулу (которую вы объясните ИИ) и выдаёт актуальный рейтинг сборных на текущий момент. - Генератор карточек матчей (
Module:MatchBox) Превращает ваш голый код из первого сообщения в красивую плашку с флагами, голами, иконками карточек (жёлтая/красная) и ссылками на видео.
Уровень 3: Шаблоны и страницы (Views)
Вы создаете простые шаблоны в пространстве Шаблон:, которые вызывают (invoke) модули из Уровня 2.
Например, на странице "Диман" вы напишете всего пару строчек:
{{Инфобокс игрок | id = Диман }}
== Статистика ==
{{Статистика игрока | id = Диман }}
И всё! Шаблон сам пойдёт в модули, модули сами пробегутся по всем 11 базам матчей, всё посчитают и выведут на страницу: Игр: 412, Голов: 350, Суперчемпионств: 2.
Когда вы в воскресенье вечером добавляете в базу 5 новых сыгранных матчей ЧТМ-2046, страницы Димана, Доминики, турнирная таблица 2046 года и рейтинг команд обновятся автоматически в ту же секунду.
Подводные камни (о чём нужно помнить на берегу):
- Ограничение памяти Lua (Memory Limit). В MediaWiki скрипты Lua имеют лимит памяти (обычно 50 МБ). Если вы попытаетесь разом загрузить историю всех 613 матчей, чтобы посчитать "Список лучших бомбардиров за всю историю", память может кончиться. Решение: ИИ должен писать функции с «ленивой загрузкой» (load on demand). Модуль не должен грузить ЧТМ-2006, если вы запрашиваете статистику только по ЧТМ-2046. Для глобальных рекордов (за все 20 лет) ИИ напишет скрипт-кэш, который считает всё один раз при обновлении базы и сохраняет итог в отдельный "плоский" файл, чтобы не пересчитывать 600 матчей каждый раз при открытии страницы.
- Версия MediaWiki (1.34). Эта версия вышла в 2019 году. Она отличная, на ней работает Scribunto (расширение для Lua), но нейросети (особенно ChatGPT) обучены на самых новых версиях и иногда могут предлагать функции Lua из версии MW 1.39+. Просто предупреждайте ИИ: "Пиши код с учётом MediaWiki 1.34".
- Несогласованность имён (Главный враг баз данных).
Если в 2006 году кто-то записан как "Антон", а в 2023 как "Антоха", база сойдёт с ума. Перед глобальной автоматизацией вам придётся прогнать данные и убедиться, что все
idигроков в базе матчей строго соответствуют ключам изModule:DB/Players.
Как действовать дальше?
Вы выбрали идеальный подход. Вайб-кодинг для таких задач работает безотказно.
Я бы советовал двигаться в таком порядке:
- Дозаполнить
Module:DB/Matches/...(хотя бы 1-2 турнира для тестов). - Создать модули-справочники (игроки, команды).
- Попросить ИИ (меня или другой ИИ): "Напиши модуль
Module:MatchBox, который красиво отрисовывает один матч по его ID". - Затем: "Напиши модуль турнирной таблицы для одной группы".
- И так постепенно, шаг за шагом, обрастать функционалом.
У вас выйдет шикарный проект. Если захотите начать писать конкретный модуль (например, для турнирной таблицы) — кидайте сюда кусок тестовой базы и ТЗ, я с удовольствием помогу превратить это в готовый код. Монголия или Доминика? 😉