Discord.py 点未加载到 json 中

Posted

技术标签:

【中文标题】Discord.py 点未加载到 json 中【英文标题】:Discord.py points not loading into json 【发布时间】:2021-04-24 11:03:47 【问题描述】:

我正在尝试为我的不和谐创建一个 python 点系统,并且已经理顺了所有错误和主要代码。现在,

如果有人能就如何解决这个问题提供一些见解/资源,那将非常非常感激!谢谢。

import discord
import json
import os
from discord.ext import commands
from googlesearch import search

os.chdir(r"C:\Users\name")

client = commands.Bot(command_prefix="<")

#Bot is online
@client.event
async def on_ready():
    general_chat = client.get_channel(#)

    await general_chat.send("Music Feedback is online.") 

@client.event
async def on_member_join(member):
    with open ("MF Points.json", "r") as f:
        users = json.load(f)
    
    await update_data(users, member)    
        
        
    with open("MF Points.json", "w") as f:
        json.dump(users, f)
    
    
    
@client.event
async def on_message(message):
    
    with open ("MF Points.json", "r") as f:
        users = json.load(f)
        
        await update_data(users, message.author)
        await add_points_to_json(users, message.author, message)
        await use_points_from_json(users, message.author, message)
        
        
    with open("MF Points.json", "w") as f:
        json.dump(users, f)
        
async def update_data(users, user):
    if not user.id in users:
        users[user.id] = 
        users[user.id]["points"] = 0
        
async def add_points_to_json(users, user, message):
    if message.content.startswith("<MFR"):
        points = users[user.id]["points"]
        user_points = points + 1
        await message.channel.send(f"You have gained 1 MF point. You now have user_points MF points.")  
        
    with open("MF Points.json", "w") as f:
        json.dump(users, f)        
async def use_points_from_json(users, user, message):     
    if message.content.startswith("<MFS"):
        points = users[user.id]["points"]
        used_user_points = points - 1         
        if users[user.id]["points"] <= 0:
            await message.channel.send("You do not have any MF points.")
        elif users[user.id]["points"] >= 0:
            await message.channel.send(f"You have used 1 MF point. You now have used_user_points MF points.") 
        
    with open("MF Points.json", "w") as f:
        json.dump(users, f)
               
           

【问题讨论】:

如果您实际上没有使用@bot.command 创建命令,为什么还要使用discord.ext.commands?如果您要检查每条消息上的startswith,这是一个无用的导入。 我为我遗漏的代码编写了更多内容 :-) 以及 from googlesearch import search 【参考方案1】:

您的问题是一个非常简单的问题。在 add_points_to_json 上,您必须编辑用户对象。你做不到。您有一个空变量 user_points,它不会保存在任何地方。

users[user.id]["points"] = user_points 会解决这个问题。

async def add_points_to_json(users, user, message):
    if message.content.startswith("<MFR"):
        points = users[user.id]["points"]
        user_points = points + 1
        await message.channel.send(f"You have gained 1 MF point. You now have user_points MF points.")  
        users[user.id]["points"] = user_points
    with open("MF Points.json", "w") as f:
        json.dump(users, f)        

【讨论】:

谢谢!但我无法准确理解您所说的内容。 刚刚试了一下,并没有抛出任何错误,但是当我尝试 时它仍然没有存储信息

以上是关于Discord.py 点未加载到 json 中的主要内容,如果未能解决你的问题,请参考以下文章

Discord py - 不同服务器上的相同机器人

我的 cogs 文件没有加载到我的主文件中 (discord.py)

如何从 api 获取 json 数据并将其以嵌入形式发送到 discord.py 中?

在通过 Python (discord.py) 输入追加时组织 JSON 文件

JSON 嵌入 Discord.PY

如何从 .json 文件 discord.py 中获取信息