משתמש:רובין בוט/הפניות כפולות.js: הבדלים בין גרסאות בדף

אין תקציר עריכה
אין תקציר עריכה
אין תקציר עריכה
שורה 1: שורה 1:
  const BOT_USERS = [31];
const BOT_USERS = [31];
  const api = new mw.Api();
const userId = mw.config.get("wgUserId");
if (!BOT_USERS.includes(userId)) {
    console.log("Not authorized bot user:", userId);
    return;
}


  const getRedirectContent = async (title) => {
const api = new mw.Api();
     return api.get({
 
      prop: "revisions",
const getRedirectContent = async (title) => {
      titles: title,
     const { query } = await api.get({
      rvprop: "content",
        prop: "revisions",
      rvslots: "*",
        titles: title,
      formatversion: "2",
        rvprop: "content",
        rvslots: "*",
        formatversion: "2",
     });
     });
  };
    return query;
};


  const getRedirectTarget = async (title) => {
const getRedirectTarget = async (title) => {
     const { query } = await api.get({
     const { query } = await api.get({
      titles: title,
        titles: title,
      redirects: true,
        redirects: true,
     });
     });
     if (query?.pages) {
     if (query?.pages) {
      const page = Object.values(query.pages).find((page) => !page.missing);
        const page = Object.values(query.pages).find(p => !p.missing);
      return page?.title ?? null;
        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",
    });


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 page = Object.values(query.pages)[0];
      if (page.ns) {
         const nsPrefixes = {4:"חב\"דפדיה:",6:"קובץ:",10:"תבנית:",12:"עזרה:"};
         const namespacePrefixes = {
         return nsPrefixes[page.ns] ?? "";
          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({
        await api.postWithEditToken({
        action: "edit",
            action: "edit",
        format: "json",
            title,
        tags: "doubleredirect-bot",
            text: `#הפניה [[${target}]]`,
        bot: true,
            tags: "doubleredirect-bot",
        title: title,
            bot: true,
        text: `#הפניה [[${target}]]`,
        });
      });
        mw.notify(`Redirect created: ${title}`);
      mw.notify(`\nstatus:${title} succes`);
     } catch(e) {
     } catch (error) {
        console.error(e);
      console.error(error);
     }
     }
  };
};


  const processRedirect = async (title) => {
const processRedirect = async (title) => {
     try {
     try {
      const contentData = await getRedirectContent(title);
        const contentData = await getRedirectContent(title);
      const content =
        const content = contentData.pages[0].revisions[0].slots.main.content;
        contentData.query.pages[0].revisions[0].slots.main.content;
        const anchor = extractAnchorFromContent(content);
      const anchor = extractAnchorFromContent(content);


      const finalTarget = await getRedirectTarget(title);
        const finalTarget = await getRedirectTarget(title);
      if (!finalTarget) return;
        if (!finalTarget) return;


      const namespace = await getNamespacePrefix(finalTarget);
        const namespace = await getNamespacePrefix(finalTarget);
      const fullTarget = namespace + finalTarget + anchor;
        const fullTarget = namespace + finalTarget + anchor;


      if (title === finalTarget) {
        if (title === finalTarget) { console.log("Circular redirect:", title); return; }
        alert("הפניה מעגלית");
        return;
      }


      console.log("Creating redirect to:", fullTarget);
        console.log("Creating redirect to:", fullTarget);
      await createRedirect(title, fullTarget);
        await createRedirect(title, fullTarget);
     } catch (error) {
     } catch(e) {
      console.error("Error processing redirect:", error);
        console.error(e);
     }
     }
  };
};


  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("? כמה הפניות כפולות להציג", 0);
     const num = prompt("כמה הפניות כפולות להציג?", 0);
     if (!num) return;
     if (!num) return;


     try {
     try {
      const { query } = await api.get({
        const { query } = await api.get({ list:"querypage", qppage:"DoubleRedirects", qplimit:num });
        list: "querypage",
        const redirects = query.querypage.results;
        qppage: "DoubleRedirects",
        for (const r of redirects) {
        qplimit: num,
            await processRedirect(r.title.replace(/_/g," "));
      });
         }
 
     } catch(e) { console.error(e); }
      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);
})();