23
עריכות
אין תקציר עריכה |
אין תקציר עריכה |
||
| שורה 1: | שורה 1: | ||
const BOT_USERS = [31]; | (() => { | ||
const | const BOT_USERS = [31]; | ||
const api = new mw.Api(); | |||
const api | const getRedirectContent = async (title) => { | ||
return api.get({ | |||
prop: "revisions", | |||
titles: title, | |||
rvprop: "content", | |||
rvslots: "*", | |||
formatversion: "2", | |||
}); | |||
}; | |||
const | const getRedirectTarget = async (title) => { | ||
const { query } = await api.get({ | const { query } = await api.get({ | ||
titles: title, | |||
redirects: true, | |||
}); | }); | ||
if (query?.pages) { | if (query?.pages) { | ||
const page = Object.values(query.pages).find((page) => !page.missing); | |||
return page?.title ?? null; | |||
} | } | ||
return null; | return null; | ||
}; | }; | ||
const extractAnchorFromContent = (content) => { | const extractAnchorFromContent = (content) => { | ||
const match = content.match(/\[\[.*?(?:#(.+?))?\]\]/); | const match = content.match(/\[\[.*?(?:#(.+?))?\]\]/); | ||
return match?.[1] ? `#${match[1]}` : ""; | return match?.[1] ? `#${match[1]}` : ""; | ||
}; | }; | ||
const getNamespacePrefix = async (title) => { | |||
const { query } = await api.get({ | |||
titles: title, | |||
prop: "info", | |||
}); | |||
if (query?.pages) { | if (query?.pages) { | ||
const page = Object.values(query.pages)[0]; | |||
const | if (page.ns) { | ||
return | const namespacePrefixes = { | ||
4: "חב"דציטוט:", | |||
6: "קובץ:", | |||
10: "תבנית:", | |||
12: "עזרה:", | |||
}; | |||
return namespacePrefixes[page.ns] ?? ""; | |||
} | |||
} | } | ||
return ""; | return ""; | ||
}; | }; | ||
const createRedirect = async (title, target) => { | const createRedirect = async (title, target) => { | ||
try { | try { | ||
await api.postWithEditToken({ | |||
action: "edit", | |||
format: "json", | |||
tags: "doubleredirect-bot", | |||
bot: true, | |||
title: title, | |||
text: `#הפניה [[${target}]]`, | |||
}); | |||
} catch( | mw.notify(`\nstatus:${title} succes`); | ||
} catch (error) { | |||
console.error(error); | |||
} | } | ||
}; | }; | ||
const processRedirect = async (title) => { | const processRedirect = async (title) => { | ||
try { | try { | ||
const contentData = await getRedirectContent(title); | |||
const content = | |||
contentData.query.pages[0].revisions[0].slots.main.content; | |||
const anchor = extractAnchorFromContent(content); | |||
const finalTarget = await getRedirectTarget(title); | |||
if (!finalTarget) return; | |||
const namespace = await getNamespacePrefix(finalTarget); | |||
const fullTarget = namespace + finalTarget + anchor; | |||
if (title === finalTarget) { | |||
alert("הפניה מעגלית"); | |||
return; | |||
} | |||
console.log("Creating redirect to:", fullTarget); | |||
await createRedirect(title, fullTarget); | |||
} catch( | } catch (error) { | ||
console.error("Error processing redirect:", error); | |||
} | } | ||
}; | }; | ||
const init = async () => { | const init = async () => { | ||
const userGroups = mw.config.get("wgUserGroups"); | |||
const userId = mw.config.get("wgUserId"); | |||
const pageName = mw.config.get("wgPageName"); | const pageName = mw.config.get("wgPageName"); | ||
if (!userGroups.includes("bot") && !BOT_USERS.includes(userId)) return; | |||
if (pageName !== "מיוחד:הפניות_כפולות") return; | if (pageName !== "מיוחד:הפניות_כפולות") return; | ||
const num = prompt("כמה הפניות כפולות להציג | const num = prompt("? כמה הפניות כפולות להציג", 0); | ||
if (!num) return; | if (!num) return; | ||
try { | try { | ||
const { query } = await api.get({ | |||
list: "querypage", | |||
qppage: "DoubleRedirects", | |||
qplimit: num, | |||
}); | |||
} catch( | |||
}; | const redirects = query.querypage.results; | ||
for (const redirect of redirects) { | |||
const title = redirect.title.replace(/_/g, " "); | |||
await processRedirect(title); | |||
} | |||
} catch (error) { | |||
console.error("Error fetching redirects:", error); | |||
} | |||
}; | |||
$(init); | $(init); | ||
})(); | |||