带有 json 数据库的 Python discord bot 命令

Posted

技术标签:

【中文标题】带有 json 数据库的 Python discord bot 命令【英文标题】:Python discord bot command with json database 【发布时间】:2020-09-26 12:54:53 【问题描述】:

所以我正在发出一个命令,即 !command 当您在聊天中键入时,它将更新数据库中的成员分数。 数据库看起来像这样


  "person": "epikUbuntu"
  "score": "22"

我将如何继续这样做?

编辑: 如果我不清楚我的意思是我会继续做它的 python 部分吗?

【问题讨论】:

【参考方案1】:

python 中的 JSON 对象就像字典一样工作。

你可以写一本新字典并保存:

data = "foo": "bar"

with open("file.json", "w+") as fp:
    json.dump(data, fp, sort_keys=True, indent=4) # kwargs for beautification

您可以从文件中加载数据(这将用于更新文件):

with open("file.json", "r") as fp:
    data = json.load(fp) # loading json contents into data variable - this will be a dict

data["foo"] = "baz" # updating values
data["bar"] = "foo" # writing new values

with open("file.json", "w+") as fp:
    json.dump(data, fp, sort_keys=True, indent=4)

Discord.py 示例:

import os # for checking the file exists

def add_score(member: discord.Member, amount: int):
    if os.path.isfile("file.json"):
        with open("file.json", "r") as fp:
            data = json.load(fp)
        try:
            data[f"member.id"]["score"] += amount
        except KeyError: # if the user isn't in the file, do the following
            data[f"member.id"] = "score": amount # add other things you want to store
    else:
        data = f"member.id": "score": amount
    # saving the file outside of the if statements saves us having to write it twice
    with open("file.json", "w+") as fp:
        json.dump(data, fp, sort_keys=True, indent=4) # kwargs for beautification
   # you can also return the new/updated score here if you want

def get_score(member: discord.Member):
    with open("file.json", "r") as fp:
        data = json.load(fp)
    return data[f"member.id"]["score"]

@bot.command()
async def cmd(ctx):
    # some code here
    add_score(ctx.author, 10)
    # 10 is just an example
    # you can use the random module if you want - random.randint(x, y)
    await ctx.send(f"You now have get_score(ctx.author) score!")

参考资料:

Context managers Dictionaries Loading data from a json Writing to a json

【讨论】:

如果你能包含 discord.py 例子那就太好了。 @epiKubuntu 抱歉回复晚了!我在一个小例子中添加了^

以上是关于带有 json 数据库的 Python discord bot 命令的主要内容,如果未能解决你的问题,请参考以下文章

在python中附加带有json数据的文本文件

Python/Pydantic - 使用带有 json 对象的列表

带有 json 数据库的 Python discord bot 命令

Python使用json加载解析带有两个json对象列表的文件

如何使用 Python(带有 websockets 的服务器)和 JavaScript(客户端)接收 JSON 数据

为啥我不能在 Python 中反序列化带有单引号的 JSON 字符串?