User:Bot doubleredirects/Gadget-DoubleRedirectFixer.js: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
(() => { | |||
const BOT_USERS = [508]; | |||
const api = new mw.Api(); | const api = new mw.Api(); | ||
| Line 38: | Line 39: | ||
if (query?.pages) { | if (query?.pages) { | ||
const page = Object.values(query.pages)[0]; | const page = Object.values(query.pages)[0]; | ||
if (page.ns) { | if (page.ns !== undefined) { | ||
const namespacePrefixes = { | const namespacePrefixes = { | ||
4: " | 4: 'חב"דפדיה:', | ||
6: " | 6: "קובץ:", | ||
10: " | 10: "תבנית:", | ||
12: " | 12: "עזרה:", | ||
14: "קטגוריה:", | |||
}; | }; | ||
return namespacePrefixes[page.ns] ?? ""; | return namespacePrefixes[page.ns] ?? ""; | ||
| Line 56: | Line 58: | ||
action: "edit", | action: "edit", | ||
format: "json", | format: "json", | ||
bot: true, | bot: true, | ||
title: title, | title: title, | ||
text: `# | text: `#הפניה [[${target}]]`, | ||
summary: "תיקון הפניה כפולה", | |||
}); | }); | ||
mw.notify(`\nstatus:${title} | mw.notify(`\nstatus:${title} success`); | ||
} catch (error) { | } catch (error) { | ||
console.error(error); | console.error(error); | ||
| Line 98: | Line 100: | ||
if (!userGroups.includes("bot") && !BOT_USERS.includes(userId)) return; | if (!userGroups.includes("bot") && !BOT_USERS.includes(userId)) return; | ||
if (pageName !== " | if (pageName !== "מיוחד:הפניות_כפולות") return; | ||
const num = prompt("? כמה הפניות כפולות להציג", 0); | const num = prompt("? כמה הפניות כפולות להציג", 0); | ||
Latest revision as of 11:34, 20 March 2026
(() => {
const BOT_USERS = [508];
const api = new mw.Api();
const getRedirectContent = async (title) => {
return api.get({
prop: "revisions",
titles: title,
rvprop: "content",
rvslots: "*",
formatversion: "2",
});
};
const getRedirectTarget = async (title) => {
const { query } = await api.get({
titles: title,
redirects: true,
});
if (query?.pages) {
const page = Object.values(query.pages).find((page) => !page.missing);
return page?.title ?? null;
}
return null;
};
const extractAnchorFromContent = (content) => {
const match = content.match(/\[\[.*?(?:#(.+?))?\]\]/);
return match?.[1] ? `#${match[1]}` : "";
};
const getNamespacePrefix = async (title) => {
const { query } = await api.get({
titles: title,
prop: "info",
});
if (query?.pages) {
const page = Object.values(query.pages)[0];
if (page.ns !== undefined) {
const namespacePrefixes = {
4: 'חב"דפדיה:',
6: "קובץ:",
10: "תבנית:",
12: "עזרה:",
14: "קטגוריה:",
};
return namespacePrefixes[page.ns] ?? "";
}
}
return "";
};
const createRedirect = async (title, target) => {
try {
await api.postWithEditToken({
action: "edit",
format: "json",
bot: true,
title: title,
text: `#הפניה [[${target}]]`,
summary: "תיקון הפניה כפולה",
});
mw.notify(`\nstatus:${title} success`);
} catch (error) {
console.error(error);
}
};
const processRedirect = async (title) => {
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 (error) {
console.error("Error processing redirect:", error);
}
};
const init = async () => {
const userGroups = mw.config.get("wgUserGroups");
const userId = mw.config.get("wgUserId");
const pageName = mw.config.get("wgPageName");
if (!userGroups.includes("bot") && !BOT_USERS.includes(userId)) return;
if (pageName !== "מיוחד:הפניות_כפולות") return;
const num = prompt("? כמה הפניות כפולות להציג", 0);
if (!num) return;
try {
const { query } = await api.get({
list: "querypage",
qppage: "DoubleRedirects",
qplimit: num,
});
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);
})();