Отображение данных JSON из 2 отдельных файлов JSON Discord PY - PullRequest
0 голосов
/ 04 марта 2019

У меня есть 2 отдельных файла JSON, один хранит идентификатор пользователя и «наличные», другой хранит идентификатор пользователя и «город».Причина, по которой я храню отдельные файлы JSON, заключается в том, что в случае ошибки будут потеряны только частичные данные.

В моем списке лидеров я пытаюсь отобразить сумму наличных денег пользователя, а также из какого он города.Прямо сейчас код дает мне ключевую ошибку:

File "c:\Users\test\Desktop\testclone\TESTCLONE.py", line 2411, in on_message msg += '{0}. <@!{1}> {2} Dollars\n\n'.format(number +1, user, cash[user].get('dollars', 0)) + '\nCity: **{}**'.format(homecity[user].get('city',0)) KeyError: '244410964693221377'

Кроме того, я пытался отображать только города в качестве встраивания, и я уверен, что даже если я не получаюключевая ошибка, это не захват города, который соотносится с пользователями с наибольшим количеством денег.Можно ли делать то, что я хочу, если JSON-файл "cash" также не хранит город?

try:
    with open("homecity.json") as fp:
        homecity = json.load(fp)
except Exception:
    homecity = {}

def save_homecity():
    with open("homecity.json", "w+") as fp:
        json.dump(homecity, fp, sort_keys=True, indent=4)

def add_city(user: discord.User, city: str):
    id = user.id
    if id not in homecity:
        homecity[id] = {}
    homecity[id]["city"] = homecity[id].get("city", "") + city
    print("{} is now in {}".format(user.name, homecity[id]["city"]))
    save_homecity()

def get_city(user: discord.User):
    id = user.id    
    if id in homecity:
        return homecity[id].get("city", 0)
    return 0

try:
    with open("cash.json") as fp:
        cash = json.load(fp)
except Exception:
    cash = {}

def save_cash():
    with open("cash.json", "w+") as fp:
        json.dump(cash, fp, sort_keys=True, indent=4)

def add_dollars(user: discord.User, dollars: int):
    id = user.id
    if id not in cash:
        cash[id] = {}
    cash[id]["dollars"] = cash[id].get("dollars", 0) + dollars
    print("{} now has {} dollars".format(user.name, cash[id]["dollars"]))
    save_cash()

def get_dollars(user: discord.User):
    id = user.id
    if id in cash:
        return cash[id].get("dollars", 0)
    return 0

        if message.content.startswith('!lb cash'):
                cash_leaderboard = sorted(cash, key=lambda x : cash[x].get('dollars', 0), reverse=True)
                msg = ''
                for number, user in enumerate(cash_leaderboard) and enumerate(city_leaderboard):
                    msg += '{}. <@!{}> {} Dollars | **{}**\n\n'.format(number +1, user, cash[user].get('dollars', 0), homecity[user].get('city',0))
                    if number == 10:
                        break
                    else:
                        number += 1

                    embed = discord.Embed(
                    title="TOP LEADERBOARD\nLeaders:",
                    color=0x24d7cf,
                    description=msg
                )
                    embed.set_author(name="BOT", icon_url="")
                    embed.set_thumbnail(url="")
                    embed.set_footer(text="BOT", icon_url="")

                await client.send_message(message.channel, embed=embed)

1 Ответ

0 голосов
/ 03 апреля 2019

После того, как мой мозг закончил жарить, я понял, что все время знал ответ на свой вопрос.Я изменил

msg += '{0}. <@!{1}> {2} Dollars\n\n'\n\n'.format(number +1, user, cash[user].get('dollars', 0)) + '\nCity:, **{}**'.format(homecity[user].get('city',0))

на

msg += '{}. <@!{}> {} Dollars | **{}**\n\n'.format(number +1, user, cash[user].get('dollars', 0), homecity[user].get('city',0))

...