带有 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/Pydantic - 使用带有 json 对象的列表
带有 json 数据库的 Python discord bot 命令
Python使用json加载解析带有两个json对象列表的文件