File size: 6,638 Bytes
c9ecd6c
 
da52b9e
 
 
 
c9ecd6c
da52b9e
c9ecd6c
4df7720
 
 
 
 
 
 
 
 
 
 
 
 
 
710b736
 
4df7720
 
c9ecd6c
 
da52b9e
7a6fcc0
 
c9ecd6c
 
 
da52b9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c9ecd6c
dba73a2
c9ecd6c
da52b9e
 
 
 
 
 
 
c9ecd6c
da52b9e
c9ecd6c
 
 
 
 
da52b9e
 
 
 
 
820a81f
dba73a2
f97bbf2
bbdde2c
dba73a2
f97bbf2
7a6fcc0
c9ecd6c
 
 
 
 
 
 
7a6fcc0
da52b9e
 
dba73a2
 
c9ecd6c
 
7a6fcc0
5c0241b
da52b9e
4df7720
e097190
da52b9e
 
5c0241b
c9ecd6c
f97bbf2
c9ecd6c
 
 
 
 
 
da52b9e
 
 
 
 
c9ecd6c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import gradio as gr

import io
import datetime
from pytz import timezone

from login import catch_qr, get_uid_key
from nft import having_card_id_list, card_id_set_ava

sid_map = {
    "SHN48荣耀时刻": 1,
    "无": 2,
    "无2": 3,
    "胶囊计划": 4,
    "天官赐福": 5,
    "A - AKB48TSH四周年": 6,
    "B - AKB48TSH四周年": 7,
    "C - AKB48TSH四周年": 8,
    "D - AKB48TSH四周年": 9,
    "E - AKB48TSH四周年": 10,
    "F - AKB48TSH四周年": 11,
    "G - AKB48TSH四周年": 12,
    "H - AKB48TSH四周年": 13,
    "三体动画": 14,
    "百大卡": 15
}


def qr(ava_image):
    if ava_image:
        qr_img, info = catch_qr(ava_image)
        return {image_qr: qr_img, login_info: info}
    return {image_qr: None, login_info: None}


def verify_login(info, u_verify, u_id, u_key, sid):
    sid_num = sid_map[sid]
    code = "请刷新页面并重新扫码登录"
    if not u_verify:
        result, u_id, u_key, code = get_uid_key(info)
        if not result:
            return False, "", "", sid_num, code
        else:
            u_verify = True
    return u_verify, u_id, u_key, sid_num, code


def back_card_id_list(info, u_verify, u_id, u_key, sid):
    if info:
        u_verify, u_id, u_key, sid_num, code = verify_login(info, u_verify, u_id, u_key, sid)
        if u_verify:
            result, had_card_id_list, code = having_card_id_list(u_id, u_key, sid_num)
            if result:
                print("获取卡牌列表成功")
                card_name_list = list(had_card_id_list.keys())
                return {verify: u_verify, uid: u_id, key: u_key, card_id_list: had_card_id_list,
                        card_list_drop: gr.update(choices=card_name_list, value=card_name_list[0]), code_output: code}
            else:
                print("获取卡牌列表失败")
                return {verify: u_verify, uid: u_id, key: u_key, card_list_drop: gr.update(choices=[]),
                        code_output: code}
    else:
        return {code_output: "请先上传头像和扫码登录"}


def name_get_card_id(card_id_list_dict, card_list_drop_name):
    if card_id_list_dict and card_list_drop_name:
        for card_name in card_id_list_dict.keys():
            if card_name == card_list_drop_name:
                cid = card_id_list_dict[card_name]
                return {card_id: cid}
    return {card_id: ""}


def login_up_nft(info, u_verify, u_id, u_key, sid, cid, ava_image):
    if info and ava_image:
        u_verify, u_id, u_key, sid_num, code = verify_login(info, u_verify, u_id, u_key, sid)
        if u_verify:
            if not cid:
                result, had_card_id_list, code = having_card_id_list(u_id, u_key, sid_num)
                if had_card_id_list:
                    cid = list(had_card_id_list.values())[0]
            bytes_object = io.BytesIO()
            ava_image.save(bytes_object, format='PNG')
            img_data = bytes_object.getvalue()
            result, code = card_id_set_ava(cid, u_key, img_data)

            tz = timezone('Asia/Shanghai')
            now = datetime.datetime.now(tz)
            print("提交完成:", now)

            return {verify: u_verify, uid: u_id, key: u_key, code_output: code}
        else:
            return {verify: u_verify, uid: u_id, key: u_key, code_output: code}
    return "请先上传头像和扫码登录"


with gr.Blocks() as demo:
    login_info = gr.State([])
    card_id_list = gr.State({})
    card_id = gr.State("")
    verify = gr.State(False)
    key = gr.State("")
    uid = gr.State("")
    with gr.Tab("bili_NFT自定义头像(已被关闭,等新接口中)"):
        gr.Markdown("30秒自定义钻石头像(NFT),一站式操作仅三步,无需下载安装,代码开源免费,拿我项目收费的都是骗子")
        gr.Markdown("""
            使用视频教程(欢迎三连):[视频地址](https://www.bilibili.com/video/BV1t8411P7HD/)
            https://www.bilibili.com/video/BV1t8411P7HD/
                    """)
        gr.Markdown("源码:https://huggingface.co/spaces/cynika/NFT_avatar")
        gr.Markdown("第一步:")
        gr.Markdown("""领取三体数字藏品R级别,作为自定义NFT头像底图.
            [三体数字藏品领取地址](https://www.bilibili.com/h5/mall/v2/card/collection?act_id=14&hybrid_set_header=2)""")
        gr.Markdown("""https://www.bilibili.com/h5/mall/v2/card/collection?act_id=14&hybrid_set_header=2""")
        gr.Markdown("第二步:")
        with gr.Row():
            with gr.Column():
                gr.Markdown(
                    """确保第一步领取三体数字藏品后,上传新头像,头像尽量为正方形并长宽小于1024像素,右上角画笔按钮可裁剪,
                    然后等待生成二维码并扫码登录进行授权(左上传头像,右扫码登录))""")
            image_ava = gr.Image(type="pil", label="上传头像")
            image_qr = gr.Image(type="pil", label="b站客户端扫码登录")
        gr.Markdown("第三步:")
        with gr.Row():
            gr.Markdown(
                """第二步完成后,选择拥有的卡组,并等待加载出所拥有的卡,再指定底卡,不选默认随机三体卡,(指定三体卡需切换一下卡组)
                最后点击按钮<验证并提交头像>等待完成显示结果(成功可能需要时间审核)""")
            with gr.Row():
                sid_drop = gr.Dropdown(label="卡组", choices=list(sid_map.keys()), value="三体动画")
                card_list_drop = gr.Dropdown(label="指定已有底卡")
                set_button = gr.Button("验证并提交头像")
            code_output = gr.Textbox(label="消息输出", placeholder="点击提交按钮才会提交")

    with gr.Accordion("代码引用及郑重提醒"):
        gr.Markdown("https://github.com/wdvipa/custom_bilibili_nft")
        gr.Markdown("https://github.com/XiaoMiku01/custom_bilibili_nft")
        gr.Markdown("https://github.com/cibimo/bilibiliLogin")
        gr.Markdown("本软件纯属娱乐,不得用于其他用途,秋后算账别怨我!")

    image_ava.change(qr, inputs=[image_ava], outputs=[image_qr, login_info])
    sid_drop.change(back_card_id_list, inputs=[login_info, verify, uid, key, sid_drop],
                    outputs=[card_id_list, verify, uid, key, card_list_drop, code_output])
    card_list_drop.change(name_get_card_id, inputs=[card_id_list, card_list_drop], outputs=[card_id])
    set_button.click(login_up_nft, inputs=[login_info, verify, uid, key, sid_drop, card_id, image_ava],
                     outputs=[verify, uid, key, code_output])

demo.launch()