#!/usr/bin/env -S node --env-file-if-exists=.env // Fixes flavor text formatting on files robogurgum created for patches 7.3/7.31 // see https://discord.com/channels/312060255469305856/1412850908668100810 import {getMediawikiClient} from '../../lib/config.js'; import {diff} from '../../lib/util/diff.js'; const mw = await getMediawikiClient(); function fixPageContent (pageContent) { const flavorTextRegexp = /\| flavor-text = ([\s\S]*?)\n\|/; let match = pageContent.match(flavorTextRegexp); if (!match) return pageContent; let flavorText = match[1]; if (!flavorText.trim()) return pageContent; let newFlavorText = flavorText // linebreaks with // - no
or
etc before or after // - no {{action fact}} after (that renders a line break at the start) .replace(/(?)\n(?!)(?!{{action fact|\s*$)/gi, '
\n') // spans that set color via inline style instead of using {{colorize}} .replace(/([^<]+)<\/span>/g, '`$1`') .replace(/([^<]+)<\/span>/g, '``$1``') .replace(/([^<]+)<\/span>/g, '```$1```') // convert lunar/phaenna credit bonuses to use {{action fact}}, but only // when we can be sure it won't add extra line breaks .replace( /(\n?)`([\w\d _-]+)(?<=Credit Bonus)(?::`|`:) +([^\n<]+)/g, '$1{{action fact|$2|$3}}', ) // flavor-text is automatically colorized, remove redundant invocations .replace(/{{colorize\|([^|{}]+)}}/g, '$1'); return pageContent.replace(flavorTextRegexp, `| flavor-text = ${newFlavorText}\n|`); } const pages = await mw.listUserContribs('RoboGurgum', {namespaces: [0], show: 'new', limit: 1000}); for (const page of pages) { const {title} = page; const pageContent = await mw.readPage(title); let fixedContent = fixPageContent(pageContent); if (fixedContent === pageContent) { console.log('#', title, ' No change\n'); continue; } diff(pageContent, fixedContent, page); console.log(); await mw.editPage(title, fixedContent, 'Fix flavor text formatting', true); }