mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-16 12:43:09 +00:00
84 lines
1.9 KiB
JavaScript
84 lines
1.9 KiB
JavaScript
const fs = require("fs").promises
|
|
const MWBot = require("mwbot")
|
|
|
|
const { USERNAME, PASSWORD } = process.env
|
|
|
|
if (!USERNAME) {
|
|
console.error("USERNAME was not set.")
|
|
process.exit(1)
|
|
}
|
|
|
|
if (!PASSWORD) {
|
|
console.error("PASSWORD was not set.")
|
|
process.exit(1)
|
|
}
|
|
|
|
const PAGE_EDIT_FILENAME = process.argv[2]
|
|
|
|
if (!PAGE_EDIT_FILENAME) {
|
|
console.error("No filename specified to edit pages")
|
|
process.exit(1)
|
|
}
|
|
|
|
const FILE_EDIT_FILENAME = process.argv[3]
|
|
|
|
if (!FILE_EDIT_FILENAME) {
|
|
console.error("No filename specified to edit files")
|
|
process.exit(1)
|
|
}
|
|
|
|
async function main() {
|
|
console.log(`Reading from ${PAGE_EDIT_FILENAME}`)
|
|
const editFile = await (await fs.readFile(PAGE_EDIT_FILENAME, "utf8")).split("\n")
|
|
|
|
console.log(`Logging in as ${USERNAME}`)
|
|
|
|
const bot = new MWBot()
|
|
|
|
await bot.loginGetEditToken({
|
|
apiUrl: "https://tgstation13.org/wiki/api.php",
|
|
username: USERNAME,
|
|
password: PASSWORD,
|
|
})
|
|
|
|
console.log("Logged in")
|
|
|
|
// This is not Promise.all as to not flood with a bunch of traffic at once
|
|
for (const editLine of editFile) {
|
|
if (editLine.length === 0) {
|
|
continue
|
|
}
|
|
|
|
let { title, text } = JSON.parse(editLine)
|
|
text = "<noinclude><b>This page is automated by Autowiki. Do NOT edit it manually.</b></noinclude>" + text
|
|
|
|
console.log(`Editing ${title}...`)
|
|
await bot.edit(
|
|
title,
|
|
text,
|
|
`Autowiki edit @ ${ new Date().toISOString() }`,
|
|
)
|
|
}
|
|
|
|
// Same here
|
|
for (const asset of await fs.readdir(FILE_EDIT_FILENAME)) {
|
|
const assetPath = `${FILE_EDIT_FILENAME}/${asset}`
|
|
const assetName = `Autowiki-${asset}`
|
|
|
|
console.log(`Replacing ${assetName}...`)
|
|
await bot.upload(
|
|
assetName,
|
|
assetPath,
|
|
`Autowiki upload @ ${ new Date().toISOString() }`,
|
|
).catch(error => {
|
|
if (error.code === "fileexists-no-change") {
|
|
console.log(`${assetName} is an exact duplicate`)
|
|
} else {
|
|
return Promise.reject(error)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
main().catch(console.error)
|