사용자:DvtBot/DvtBot.cs

위키백과, 우리 모두의 백과사전.
using System;
using DotNetWikiBot;


class DvtBot : Bot
{
    static Site site;

    /// <summary>
    /// 분류를 옮깁니다.
    /// </summary>
    /// <param name="oldcat">옮길 분류("분류:" 포함)</param>
    /// <param name="newcat">새 분류("분류:" 포함)</param>
    /// <param name="request">요청 (예:"2010-01-24 관인생략의 요청") </param>
    public static void MoveCat(string oldcat, string newcat, string request)
    {
        Bot.EnableLogging(String.Format("./Logs/{0}.log", request));
        string comment =
            String.Format(
                "[[위키백과:봇/편집_요청#{0}|{1} 요청]]에 따라 [[{2}]]를 [[{3}]]로 옮김",
                    request, request.Split(' ')[1], oldcat, newcat)
            ;

        Console.Write("\"{0}\"를 \"{1}\"로 이동하시겠습니까? (y/N)", oldcat, newcat);
        if (Console.ReadKey().Key != ConsoleKey.Y)
        {
            Console.WriteLine();
            Console.WriteLine();
            Console.Write("이동 작업이 취소되었습니다.");
            Console.ReadLine();
            return;
        }
        Console.WriteLine();
        Console.WriteLine();

        Page cat_old = new Page(site, oldcat);
        Page cat_new = new Page(site, newcat);

        PageList pl = new PageList(site);
        pl.FillFromCategory(oldcat);
        pl.FillSubsFromCategory(oldcat);

        Console.Write("{0} 개 문서를 수정해야 합니다. 그래도 이동하시겠습니까? (y/N)", pl.Count());
        if (Console.ReadKey().Key != ConsoleKey.Y)
        {
            Console.WriteLine();
            Console.WriteLine();
            Console.Write("이동 작업이 취소되었습니다.");
            Console.ReadLine();
            return;
        }
        Console.WriteLine();

        cat_old.LoadEx();
        cat_new.text = cat_old.text;
        cat_new.Save(comment, true);
        cat_old.text = "{{삭제 신청|" + comment + "}}";
        cat_old.Save(comment, true);

        pl.LoadEx();
        pl.RemoveFromCategory(oldcat);
        pl.AddToCategory(newcat);
        pl.SaveSmoothly(5, comment, true);
        Console.WriteLine("작업이 완료됨");
    }

    /// <summary>
    /// {{분류 필요}} 가 붙은 문서들 중 분류가 있는 문서에서 틀을 제거합니다.
    /// </summary>
    public static void CheckNeedCat()
    {
        string comment = "분류가 존재하므로 {{[[틀:분류 필요|분류 필요]]}} 제거";

        PageList pl = new PageList(site);
        PageList pl_nc = new PageList(site);
        pl.FillFromLinksToPage("틀:분류 필요");
        pl.LoadEx();
        foreach (Page p in pl)
        {
            if (p.text.IndexOf("{{분류 필요}}") != -1 || p.text.IndexOf("{{분류 없음}}") != -1)
                pl_nc.Add(p);
        }
        pl_nc.LoadEx();
        foreach (Page p in pl_nc)
        {
            string[] cats = p.GetCategories();
            if (cats.Length != 0)
            {
                p.RemoveTemplate("분류 필요");
                p.RemoveTemplate("분류 없음");
                p.Save(comment, true);
            }
        }
        Console.WriteLine("작업이 완료됨");
    }

    public static void Main()
    {
        site = new Site("http://ko.wikipedia.org", "DvtBot", "---비밀번호---");
        // MoveCat();
        // CheckNeedCat();
    }
}