• Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

用戶:機娘霜天醬

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋
Moegirlpedia-logo-trim.png
這是贯井羽优的草莓胖次[更多]討論頁貢獻上傳歷史封禁及歷史被刪貢獻移動日誌巡查日誌用戶權限的分身賬號,用於半自動化編輯
其操作者在此主動宣示其用途,遵循基本方針分身賬號方針操控此賬號。
致維護人員:當要對此賬號採取任何操作前,請先聯繫此用戶。

機娘霜天醬贯井羽优的草莓胖次[更多]討論頁貢獻上傳歷史封禁及歷史被刪貢獻移動日誌巡查日誌用戶權限操作的機械人,主要用於閃耀幻想曲專題維護。

Python-logo-large.c36dccadd999 square.pngN 這個用戶的母語是Python

任務

閃耀幻想曲專題維護——在《閃耀幻想曲》追加新卡後進行相關編輯:

近期活動

2022年6月28日 (星期二)


程序代碼

展開查看
import pandas as pd
import pywikibot as pwb
import os
import math
import sys
import time
import re

def wait_exit(errinfo):
    print(errinfo)
    print("程序將在30秒後自動關閉")
    time.sleep(30)
    sys.exit()

def inputnotice():
    print("\n指令說明:")
    print("添加卡片-輸入7位卡片代碼,如:1000200")
    print("添加全部-輸入all")
    print("清空列表-輸入clean")
    print("刪除卡片-輸入x+7位卡片代碼,如:x1000200")
    print("結束輸入-輸入end")
    print("*添加全部是指將krfcard.csv中的全部卡片添加至列表")
    a=input("請輸入指令:")
    return a
 
#導入角色數據和卡片數據

print("正在從krfchara.csv導入角色數據……")
df_ch=pd.read_csv("C:/Users/萬類霜天/Desktop/kirafan/krfedit/krfchara.csv",index_col="no")
print("角色數據導入完畢")

for i in df_ch.index:
    if "{{!}}" in df_ch.loc[i,"main"]:
        df_ch.loc[i,"main"]=re.sub("{{!}}.+","",df_ch.loc[i,"main"])

print("正在從krfcard.csv導入卡片數據……")
df_cd=pd.read_csv("C:/Users/萬類霜天/Desktop/kirafan/krfedit/krfcard.csv",index_col="no")
print("卡片數據導入完畢")

df_cd=df_cd.fillna("")

#輸入活動信息
info=input(r"請輸入活動信息(如:2020年{{0}}7月29日的活動《暑假!作業大作戰》):")

id=[]
a=inputnotice()

#添加要操作的卡片列表
while(1==1):
    os.system('cls')
    if(a=="end"):
        print("添加完畢!")
        break

    elif(a=="all"):
        for idn in df_cd.index:
            num=int(idn)
            chnum=math.floor(num/1000)
            if not(idn in id):
                id.append(idn)
                print(f'添加成功:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
            else:
                print(f'已在列表:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
    
    elif(a=="clean"):
        id=[]
        print("清空列表")

    elif(re.match("\d{7}",a)):
        if(a in id):
            print(f'已在列表:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
        else:
            num=int(a)
            chnum=math.floor(num/1000)
            if not (chnum in df_ch.index):
                print("未查詢到相應角色,添加失敗")
            else:
                if not (num in df_cd.index):
                    print("未找到卡片數據,添加失敗")
                else:
                    id.append(int(a))
                    print(f'添加成功:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')

    elif(re.match("x\d{7}",a)):
        a=a.replace("x","")
        if(a in id):
            id.remove(a)
            num=int(a)
            chnum=math.floor(num/1000)
            print(f'刪除成功:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')

        else:
            print("未找到該卡,刪除失敗")
    else:
    
        print("無效指令")

    print("\n列表中卡片:")
    for idn in id:
        num=int(idn)
        chnum=math.floor(num/1000)
        print(f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
    a=inputnotice()


#定義狀態列表
ids={}
for idm in id:
    ids[idm]=""

#編輯角色主條目
for idn in id:
    check=""
    os.system('cls')
    ids[idn]="(主條目編輯中)"
    print("列表中卡片:")
    for idm in id:
        num=int(idm)
        chnum=math.floor(num/1000)
        print(f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}{ids[idm]}')

    print("")

    num=int(idn)
    chnum=math.floor(num/1000)
    rare=math.floor(((num+1)/1000-math.floor(num/1000))*10)+3
    cardname=f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}'

    
    page = pwb.Page(pwb.Site(), df_ch.loc[chnum,"main"])
    origintext=page.text

    if not page.text:
        print("角色主條目未創建,跳過編輯")
        ids[idn]="(角色主條目未創建)"
        continue
  
    if("{{kiraraf卡表" not in page.text):
        print("未找到卡表,請手動添加卡片")
        check += "未找到卡表;"
    elif(f'|{cardname}|' in page.text):
        print("卡片已存在")
    elif(f'|{rare}{rare{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}=',f'|{rare}icon|{cardname}|evo=true}}}}<br>')
    else:
        print("卡片添加成功")
        page.text = page.text.replace(r"{{kiraraf卡表",f'{{{{kiraraf卡表\n|{rare{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}= {{{{kf-table|icon|{cardname}|evo=true}}}}')

    if not info:
        print("跳過更新劇情")
    elif(info in page.text):
        print("劇情信息已存在")
    elif("*作為主要角色:" in page.text):
        print("劇情信息添加成功")
        note=re.search("日的活動《(.+》)\n\*?[^\*]",page.text)
        page.text=re.sub(note.group(1),note.group(1)+"\n**"+info,page.text,count=1)
    elif("'''活動劇情'''(具體的活動劇情請在遊戲中查看,或者觀看[[閃耀幻想曲/年表#活動列表|活動列表]]處的B站漢化劇情)" in page.text):
        print("劇情信息添加成功")
        page.text=re.sub("的B站漢化劇情)","的B站漢化劇情)\n\n*作為主要角色:\n**"+info,page.text,count=1)
    elif("=== 卡片索引 ===" in page.text):
        print("劇情信息添加成功")
        page.text=re.sub("=== 卡片索引 ===","'''活動劇情'''(具體的活動劇情請在遊戲中查看,或者觀看[[閃耀幻想曲/年表#活動列表|活動列表]]處的B站漢化劇情)\n\n*作為主要角色:\n**"+info+"\n\n=== 卡片索引 ===",page.text,count=1)
    else:
        print("劇情信息添加失敗")
        check += "劇情信息添加失敗"

    if not origintext==page.text:
        page.save(summary="krf角色主條目維護:"+check+" //Edit via Pywikibot",tags="Automation tool")

    ids[idn]="(已完成)"
    if(check!=""):
        ids[idn]="(未找到卡表)"

os.system('cls')
print("列表中卡片:")
for idm in id:
    num=int(idm)
    chnum=math.floor(num/1000)
    print(f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}{ids[idm]}')

#編輯Template:Kiraraf角色卡片列表
check=""
print("\n開始編輯Template:Kiraraf角色卡片列表")
page = pwb.Page(pwb.Site(), "Template:Kiraraf角色卡片列表")
origintext=page.text

for idn in id:
    num=int(idn)
    chnum=math.floor(num/1000)
    rare=math.floor(((num+1)/1000-math.floor(num/1000))*10)+3
    order=num%10
    cardinfo=f'{df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}{df_cd.loc[num,"sup"]}'
    cardname=f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}'

    if ("|%s={{array|id=%s"%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"chara"])) not in page.text:
        print("添加失敗:"+cardname)
        check += df_ch.loc[chnum,"chara"]+"添加失敗;"
        continue

    if(rare==5):
        note=re.compile("(\|%s={{array\|id=%s(\n\|5,[^}\n]+){%s})"%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"chara"],order))
    else:
        note=re.compile("(\|%s={{array\|id=%s(\n\|5,[^}\n]+)*(\n\|4,.+){%s})"%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"chara"],order))

    result=note.findall(page.text)
    pattern=re.sub("\|","\|",result[0][0])
    newtext=result[0][0]+"\n|"+str(rare)+","+cardinfo

    if newtext in page.text:
        print("已在列表:"+cardname)
    else:
        page.text=re.sub(pattern,newtext,page.text,count=1)
        print("添加成功:"+cardname)

if not origintext==page.text:  
    page.save(summary="添加新卡:"+check+" //Edit via Pywikibot",tags="Automation tool")

#編輯Template:篩選功能/閃耀幻想曲卡片
print("\n開始編輯Template:篩選功能/閃耀幻想曲卡片")
page = pwb.Page(pwb.Site(), "Template:篩選功能/閃耀幻想曲卡片")
origintext=page.text
for idn in id:
    num=int(idn)
    chnum=math.floor(num/1000)
    rare=math.floor(((num+1)/1000-math.floor(num/1000))*10)+3
    cardname=f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}'

    mark=""    
    if df_ch.loc[chnum,"chara"] in page.text:    
        note=re.compile("\| {{#invoke:kiraraf篩選\|main\|\d\|%s\|.+}}"%df_ch.loc[chnum,"chara"])
        mark="\n|-"
    elif df_ch.loc[chnum,"title"] in page.text:
        for i in range(1,chnum%10+1,1):
            if df_ch.loc[chnum-i,"chara"] in page.text:
                note=re.compile("\| {{#invoke:kiraraf篩選\|main\|\d\|%s\|.+}}"%df_ch.loc[chnum-i,"chara"])
                mark="\n|-"
                break
            note=re.compile("<!--%s-->"%df_ch.loc[chnum,"title"])    
    else:
        page.text=re.sub("\|}","\n|-<!--%s-->\n|}"%df_ch.loc[chnum,"title"],page.text)
        note=re.compile("<!--%s-->"%df_ch.loc[chnum,"title"])    
    

    result=note.findall(page.text)

    pattern=re.sub("\|","\|",result[-1])

    newtext="\n| {{#invoke:kiraraf篩選|main|"+str(rare)+"|"+df_ch.loc[chnum,"chara"]+"|"+df_cd.loc[num,"ele"]+"|"+df_cd.loc[num,"job"]
    if df_cd.loc[num,"pre"]:
        newtext += "|pre="+df_cd.loc[num,"pre"]
    if df_cd.loc[num,"sup"]:
        newtext += "|suf="+df_cd.loc[num,"sup"]
    if df_cd.loc[num,"type"]=="活動兌換卡" or (df_cd.loc[num,"type"]=="期間限定卡" and not df_cd.loc[num,"pre"]):
        newtext += "|type="+df_cd.loc[num,"type"]
    newtext += "}}"

    if newtext in page.text:
        print("已在列表:"+cardname)
    else:
        page.text=re.sub(pattern,result[-1]+mark+newtext,page.text,count=1)
        print("添加成功:"+cardname)

if not origintext==page.text:
    page.save(summary="添加新卡 //Edit via Pywikibot",tags="Automation tool")

#檢查[[模塊:Kiraraf角色信息]]並補漏
print("\n開始檢查[[模塊:Kiraraf角色信息]]並補漏")
page = pwb.Page(pwb.Site(), "模塊:Kiraraf角色信息")
origintext=page.text
newchara=""
for idn in id:
    chnum=math.floor(idn/1000)

    if df_ch.loc[chnum,"chara"] in page.text:
        print("已在列表:"+df_ch.loc[chnum,"chara"])
    else:
        titleset='titleset["%s"]={"%s","%s","%s"}'%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"main"],df_ch.loc[chnum,"title"],df_ch.loc[chnum,"cv"])
        if df_ch.loc[chnum,"title"] in page.text:
            note=re.compile('titleset\[".+"\]={".+","%s",".+"}'%df_ch.loc[chnum,"title"])
            result=note.findall(page.text)
            pattern=re.sub("\[","\[",result[-1])
            pattern=re.sub("\]","\]",pattern)
            page.text=re.sub(pattern,result[-1]+"\n"+titleset,page.text,count=1)
        else:
            page.text=re.sub("--如廣播需用未實卡化的角色,請置於本註釋下方",titleset+"\n--如廣播需用未實卡化的角色,請置於本註釋下方",page.text,count=1)
        print("添加成功:"+df_ch.loc[chnum,"chara"])
        
        if newchara:
            newchara += "、"+df_ch.loc[chnum,"chara"]
        else:
            newchara += ":"+df_ch.loc[chnum,"chara"]

if not origintext==page.text:
    page.save(summary="新角色參戰"+newchara+" //Edit via Pywikibot",tags="Automation tool")

#檢查[[模塊:Kiraraf角色簡介/Title]]並發送補漏提醒
print("\n檢查[[模塊:Kiraraf角色簡介/Title]]並發送補漏提醒")
page = pwb.Page(pwb.Site(), "模塊:Kiraraf角色簡介/Title")
page2 = pwb.Page(pwb.Site(), "Template_talk:Kiraraf角色簡介")

newchara=""
for idn in id:
    chnum=math.floor(idn/1000)

    if '["%s"]'%df_ch.loc[chnum,"chara"] in page.text:
        print("已在列表:"+df_ch.loc[chnum,"chara"])
    elif df_ch.loc[chnum,"chara"] in page2.text:
        print("已經提醒:"+df_ch.loc[chnum,"chara"])
    else:
        print("新增參戰:"+df_ch.loc[chnum,"chara"])
        if newchara:
            newchara += "、"+df_ch.loc[chnum,"chara"]
        else:
            newchara += ":"+df_ch.loc[chnum,"chara"]

if newchara:
    page.text += "\n\n== 提醒:新角色參戰 ==\n新角色參戰"+newchara+"\n\n請及時補充角色簡介哦~ ——~~~~"
    page2.save(summary="新參戰提醒 //Edit via Pywikibot",tags="Automation tool")

print("\n本次維護已完成")

子頁面