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

מתוך חב"דציטוט, מאגר ציטוטים חב"דים
קפיצה לניווט קפיצה לחיפוש
אין תקציר עריכה
אין תקציר עריכה
 
שורה 1: שורה 1:
const BOT_USERS = [31];
(() => {
const userId = mw.config.get("wgUserId");
  const BOT_USERS = [31];
if (!BOT_USERS.includes(userId)) {
  const api = new mw.Api();
    console.log("Not authorized bot user:", userId);
    return;
}


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


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


const getRedirectTarget = async (title) => {
    const { query } = await api.get({
        titles: title,
        redirects: true,
    });
     if (query?.pages) {
     if (query?.pages) {
        const page = Object.values(query.pages).find(p => !p.missing);
      const page = Object.values(query.pages).find((page) => !page.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];
         const nsPrefixes = {4:"חב\"דפדיה:",6:"קובץ:",10:"תבנית:",12:"עזרה:"};
      if (page.ns) {
         return nsPrefixes[page.ns] ?? "";
         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({
      await api.postWithEditToken({
            action: "edit",
        action: "edit",
            title,
        format: "json",
            text: `#הפניה [[${target}]]`,
        tags: "doubleredirect-bot",
            tags: "doubleredirect-bot",
        bot: true,
            bot: true,
        title: title,
        });
        text: `#הפניה [[${target}]]`,
        mw.notify(`Redirect created: ${title}`);
      });
     } catch(e) {
      mw.notify(`\nstatus:${title} succes`);
        console.error(e);
     } catch (error) {
      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 = contentData.pages[0].revisions[0].slots.main.content;
      const content =
        const anchor = extractAnchorFromContent(content);
        contentData.query.pages[0].revisions[0].slots.main.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) { console.log("Circular redirect:", title); return; }
      if (title === finalTarget) {
        alert("הפניה מעגלית");
        return;
      }


        console.log("Creating redirect to:", fullTarget);
      console.log("Creating redirect to:", fullTarget);
        await createRedirect(title, fullTarget);
      await createRedirect(title, fullTarget);
     } catch(e) {
     } catch (error) {
        console.error(e);
      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("כמה הפניות כפולות להציג?", 0);
     const num = prompt("? כמה הפניות כפולות להציג", 0);
     if (!num) return;
     if (!num) return;


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

גרסה אחרונה מ־17:03, 23 בנובמבר 2025

(() => {
  const BOT_USERS = [31];
  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) {
        const namespacePrefixes = {
          4: "חב"דציטוט:",
          6: "קובץ:",
          10: "תבנית:",
          12: "עזרה:",
        };
        return namespacePrefixes[page.ns] ?? "";
      }
    }
    return "";
  };

  const createRedirect = async (title, target) => {
    try {
      await api.postWithEditToken({
        action: "edit",
        format: "json",
        tags: "doubleredirect-bot",
        bot: true,
        title: title,
        text: `#הפניה [[${target}]]`,
      });
      mw.notify(`\nstatus:${title} succes`);
    } 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);
})();