GenshinStatus / Genshin-Discordbot

Pycordを用いたGenshinStatusProjectのDiscord版Botサーバー
3 stars 2 forks source link

ティナリ等の画像がでない問題についての修正 #33

Closed nikawamikan closed 1 year ago

nikawamikan commented 1 year ago

以下のソースでURLの取得優先度が低いことが原因

https://github.com/CinnamonSea2073/Genshin-Discordbot/blob/b46215db8473312b7a4b9840347a84a448a91661/cogs/wish.py#L28-L40

暫定的な解決策

urlのデータを持っているデータを参照させるためurlがあるかの判定を先頭に書くだけで解決する

    if "url" in characterName[name]:
        return characterName[name]["url"]

潜在的問題

この関数の呼び出し先でURLにNoneが含まれるかどうかの判定している部分が問題のためValueErrorなどの例外をraiseする方法に変えたほうが良いと思います

また例外で条件分岐する処理は可読性を下げるので結果的に以下のようなソースで処理するのが好ましいと考えます(利用先ではValueErrorを受け取ったときの処理を記述します

def genshingen(name):
    if name in  characterName:
        if "url" in characterName[name]:
            return characterName[name]["url"]

        if "zh" in characterName[name]:
            result = characterName[name]["zh"]
        else:
            raise ValueError()
    elif name  in  characterTrans:
        resalt = characterName[characterTrans[name]["ja"]]["zh"]
    else:
        raise ValueError()

    result = urllib.parse.quote(result)

    return f"https://bbs.hoyolab.com/hoyowiki/picture/character/{resalt}/avatar.png"
nikawamikan commented 1 year ago

画像出力されてそうなのでcloseします