Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在discord.py中-如何显示警告系统的各个警告?_Python_Discord_Discord.py_Discord.py Rewrite - Fatal编程技术网

Python 在discord.py中-如何显示警告系统的各个警告?

Python 在discord.py中-如何显示警告系统的各个警告?,python,discord,discord.py,discord.py-rewrite,Python,Discord,Discord.py,Discord.py Rewrite,现在确定标题是否传达了我的意图,但基本上我有一个警告命令,它将我想要的所有值存储到我的json文件中,我正在努力编写一个命令来显示用户的警告 以下是我目前的代码: async def update_data(users, user): if not f'{user.id}' in users: users[f'{user.id}'] = {} users[f'{user.id}']['warns'] = 0 users[f'{user.id

现在确定标题是否传达了我的意图,但基本上我有一个警告命令,它将我想要的所有值存储到我的json文件中,我正在努力编写一个命令来显示用户的警告

以下是我目前的代码:

async def update_data(users, user):
    if not f'{user.id}' in users:
        users[f'{user.id}'] = {}
        users[f'{user.id}']['warns'] = 0
        users[f'{user.id}']['mod'] = []
        users[f'{user.id}']['reason'] = []
        users[f'{user.id}']['time'] = []
        users[f'{user.id}']['warn_id'] = []

async def add_warns(users, user, warns):
    users[f'{user.id}']['warns'] += warns

@bot.command()
@commands.has_permissions(administrator=True)
async def warn(ctx, user:discord.Member, *, args):

    reason = ''.join(args) #to get the full reason
    with open('warns.json', 'r') as f:
        users = json.load(f)

    await update_data(users, user)
    await add_warns(users, user, 1)
    random_id = random.randint(10000, 99999)
    warndate = time.strftime("%A, %B %d %Y @ %H:%M:%S %p")
    users[f'{user.id}']['mod'].append(ctx.author.id)
    users[f'{user.id}']['reason'].append(reason)
    users[f'{user.id}']['time'].append(warndate)
    users[f'{user.id}']['warn_id'].append(random_id)


    await ctx.send(f"{user.mention} has been warned!")

    with open('warns.json', 'w') as f:
         json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4, default=str)
下面是我的json文件的样子:

{
    "7656440092XXXXXXXX": {
        "mod": [
            8473926669XXXXXXXX,
            8473926669XXXXXXXX,
            8473926669XXXXXXXX
        ],
        "reason": [
            "reason 1",
            "reason 2",
            "reason 3"
        ],
        "time": [
            "Wednesday, January 27 2021 @ 20:32:55 PM",
            "Wednesday, January 27 2021 @ 20:33:03 PM",
            "Wednesday, January 27 2021 @ 20:36:58 PM"
        ],
        "warn_id": [
            49926,
            84348,
            55828
        ],
        "warns": 3
    }
}
我开始编写一个单独显示警告的命令,但我所能做的只是一次将所有原因、时间等都转储掉

@bot.command()
@commands.has_permissions(administrator=True)
async def warndetails(ctx, user:discord.Member):
    try:
        with open('warns.json', 'r') as f:
            users = json.load(f)

        warns = users[f'{user.id}']['warns']
        moderator = users[f'{user.id}']['mod']
        warn_reason = users[f'{user.id}']['reason']
        warn_time = users[f'{user.id}']['time']
        warn_id = users[f'{user.id}']['warn_id']


        await ctx.send(f"Warning count: {warns}\nGiven by:{moderator}\nFor:{warn_reason}\nAt:{warn_time}\nIDs:{warn_id}")

    



    except:
        await ctx.send(f"{user.mention} doesn't have any warnings (yet).")
我尝试使用for循环遍历原因,然后将其显示给用户,但我不知道如何读取警告的各个值,因为我对json基本上是新手,我无法通过谷歌搜索找到任何东西。所以理想情况下,如果您使用warndetails命令,它会抛出1个嵌入,其中包含每个警告的原因和所有内容。 我正在努力实现的下一个目标是通过分配给它们的ID删除单个警告,如果您有任何关于这方面的建议,我也将不胜感激。另外,我也愿意完全从头开始,所以如果您认为从头开始更好的话,不要想修改我的代码


提前感谢,很抱歉代码太长。

您存储警告的方式非常糟糕,这并不难做到,但它太粗,而且不是最好的方式

#共享编码,因此更易于可视化
警告\u id=[499268434855828]
mods=[81730981793807198817309817938071988173098179380719881730981793807198]
原因=[“原因1”、“原因2”、“原因3”]
warn_times=[“2021年1月27日星期三@20:32:55”、“2021年1月27日星期三@20:32:55”、“2021年1月27日星期三@20:32:55”]
警告标识=[1234554321123654]
警告=3
打印(f“总警告:{警告}”)
对于zip中的警告id、mod、reason、警告时间、警告id(警告id、mods、reasons、警告时间、警告id):
打印(f“ID:{warn\u ID},mod:{mod},reason:{reason},time:{warn\u time}”)
输出:

Total warnings: 3
ID: 49926, mod: 81730981793807198, reason: reason1, time: Wednesday, January 27 2021 @ 20:32:55 PM
ID: 54321, mod: 81730981793807198, reason: reason2, time: Wednesday, January 27 2021 @ 20:32:55 PM
ID: 123654, mod: 81730981793807198, reason: reason3, time: Wednesday, January 27 2021 @ 20:32:55 PM
Total warnings: 3
ID: 123, mod: 91823091823012339, reason: reason1, time: 12:34:12 01:01:2021
ID: 124, mod: 19182309182309183, reason: reason2, time: 12:45:45 10:01:2021
ID: 125, mod: 76187326198632893, reason: reason3, time: 20:12:54 13:01:2021
我个人会使用以下JSON格式

{
"1929291823719827398": [
{“id”:123,“mod”:9182309182301239,“reason”:“reason1”,“timestamp”:“12:34:12 01:01:2021”},
{“id”:124,“mod”:19182309182309183,“reasons”:“reason2”,“timestamp”:“12:45:45 10:01:2021”},
{“id”:125,“mod”:76187326198632893,“reasons”:“reason3”,“timestamp”:“20:12:54 13:01:2021”}
]
}
现在阅读每个单独的警告要容易得多,让我举个例子

以open(“path.json”,“r”)作为f的
:
data=json.load(f)
用户数据=数据[str(某些id)]
打印(f“总警告:{len(用户数据)}”)
对于用户_数据中的警告:
warn\u id,mod,reason,time=warn.values()
打印(f“ID:{warn_ID},mod:{mod},reason:{reason},time:{time}”)
输出:

Total warnings: 3
ID: 49926, mod: 81730981793807198, reason: reason1, time: Wednesday, January 27 2021 @ 20:32:55 PM
ID: 54321, mod: 81730981793807198, reason: reason2, time: Wednesday, January 27 2021 @ 20:32:55 PM
ID: 123654, mod: 81730981793807198, reason: reason3, time: Wednesday, January 27 2021 @ 20:32:55 PM
Total warnings: 3
ID: 123, mod: 91823091823012339, reason: reason1, time: 12:34:12 01:01:2021
ID: 124, mod: 19182309182309183, reason: reason2, time: 12:45:45 10:01:2021
ID: 125, mod: 76187326198632893, reason: reason3, time: 20:12:54 13:01:2021

PS:对于大量代码也很抱歉:)

很抱歉回复您,但我已尝试按照您所述将数据写入json文件,因为我在这方面非常缺乏经验,所以在编写warn命令以将数据写入文件时遇到了问题,如下图所示。你能告诉我怎么做吗?提前谢谢