【问题标题】:Discord.py information storageDiscord.py 信息存储
【发布时间】:2021-07-26 21:12:06
【问题描述】:

我已经发出了踢和禁止命令,现在我正在处理静音命令。我没有任何问题,但是我想将信息存储在 json 文件中。例如,当我将某人静音时,他的姓名将存储在 json 文件中,因此脚本可以读取此姓名以仅为他激活静音命令...请帮我解决这个问题...

这也是我的代码

@client.command(name="kick")
async def kickcommand(ctx, member: discord.Member, *, reason=None):
    guild = ctx.guild
    
    mbed = discord.Embed(
        title = f"Kicked {member}",
        description = f"{member} has been kicked from the server because {reason} ... Bye Bye :)"
    )
    if ctx.author.guild_permissions.ban_members:
        await ctx.send(embed=mbed)
        await guild.kick(member)

【问题讨论】:

  • 这应该不会太难。首先创建一个简单的数据类,其中的属性是您要存储的所有内容(如名称、时间、操作等)。Here 是如何将类对象转换为 JSON 字符串的方法,here如何处理文件。因此,如果您想存储某些内容,只需从您的类中实例化一个新对象,填写数据,将其转换为 json 字符串并将其保存到文件中 :)
  • 您好,感谢您的回复...您能提供一个与我的案例更相关的示例吗?

标签: python json discord discord.py


【解决方案1】:

这应该让你开始:

import json

class myJsonDataClass:
  def __init__(self, name, time, action):
    self.Name = name
    self.Time = time
    self.Action = action



banData = myJsonDataClass("John", "Monday", "kicked")

myJsonString = json.dumps(banData.__dict__)

print(myJsonString)

例如,这会打印{"Name": "John", "Time": "Monday", "Action": "kicked"},您可以将其保存到 json 文件中。

【讨论】:

  • 您好,谢谢您的回复...阅读您的回答后,我了解 json 如何与 python 一起使用...但是如何将这些 banData 替换为实际禁令?我可以用成员变量来做吗?
  • 我没有将 python 用于不和谐服务器,但是banData.__dict__ 只是从对象中创建了一个字典,您可以对其进行序列化。您可以尝试使用实际的禁止对象来执行此操作。如果不是,那说明您不应该创建自己的数据类并根据您保存的信息设置您的实际禁令?
  • 我会尝试使用实际的禁令目标对象,我会看看它是怎么回事......
【解决方案2】:

当然,然后根据 Rolands 的答案构建,您可以执行以下操作:

import json

with open("userData.json","r") as input:
    existingData = json.load(input)

if existingData == None:
    existingData = {}

existingData.update(banData.__dict__)

with open("userData.json","w") as output:
    json.dump(existingData,output)

【讨论】:

  • 感谢您的回复...我完全理解这部分代码。如果我需要任何帮助,我会寻求您的帮助。
【解决方案3】:

如果我做对了……这就是我必须做的吗?:

@client.command(name="kick")
async def kickcommand(ctx, member: discord.Member, *, reason=None):
    guild = ctx.guild
    
    mbed = discord.Embed(
        title = f"Kicked {member}",
        description = f"{member} has been kicked from the server because {reason} ... Bye Bye :)"
    )
    if ctx.author.guild_permissions.ban_members:
        await ctx.send(embed=mbed)
        await guild.kick(member)


        class myJsonDataClass:
            def __init__(name, time, action):
                self.Name = name
                self.Time = time
                self.Action = action
        banData = myJsonDataClass(str(member), "Monday", "kicked")

        myJsonString = json.dumps(banData.__dict__)

        print(myJsonString)


        with open("userData.json","r") as input:
            existingData = json.load(input)

        if existingData == None:
            existingData = {}

        existingData.update(banData.__dict__)

        with open("userData.json","w") as output:
            json.dump(existingData,output)

【讨论】:

  • 我的意思是,在主范围内定义类,只是我的一个习惯,在顶部定义类。除此之外,是的
猜你喜欢
  • 2021-02-13
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 2021-12-04
  • 1970-01-01
相关资源
最近更新 更多