在 discord.py - 如何显示我的警告系统的个别警告?
In discord.py - How can I display the individual warnings for my warning system?
现在确定标题是否传达了我的意图,但基本上我有一个警告命令,它将我想要的所有值存储到我的 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 删除单个警告,如果您对此有任何指示,我也将不胜感激。此外,我愿意完全重新开始,所以如果您认为重新开始更好,请不要倾向于 修复 我的代码。
提前致谢,抱歉代码太长。
您以非常糟糕的方式存储警告,这样做并不难,但它很笨拙,不是最好的方式
# Harcoding so it's easier to visualize
warn_ids = [49926, 84348, 55828]
mods = [81730981793807198, 81730981793807198, 81730981793807198]
reasons = ["reason1", "reason2", "reason3"]
warn_times = ["Wednesday, January 27 2021 @ 20:32:55 PM", "Wednesday, January 27 2021 @ 20:32:55 PM", "Wednesday, January 27 2021 @ 20:32:55 PM"]
warn_ids = [12345, 54321, 123654]
warns = 3
print(f"Total warnings: {warns}")
for warn_id, mod, reason, warn_time, warn_id in zip(warn_ids, mods, reasons, warn_times, warn_ids):
print(f"ID: {warn_id}, mod: {mod}, reason: {reason}, time: {warn_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
我个人会使用以下 JSON 格式
{
"1929291823719827398": [
{"id": 123, "mod": 91823091823012339, "reason": "reason1", "timestamp": "12:34:12 01:01:2021"},
{"id": 124, "mod": 19182309182309183, "reason": "reason2", "timestamp": "12:45:45 10:01:2021"},
{"id": 125, "mod": 76187326198632893, "reason": "reason3", "timestamp": "20:12:54 13:01:2021"}
]
}
现在阅读每个单独的警告要容易得多,让我举个例子
with open("path.json", "r") as f:
data = json.load(f)
user_data = data[str(some_id)]
print(f"Total warnings: {len(user_data)}")
for warn in user_data:
warn_id, mod, reason, time = warn.values()
print(f"ID: {warn_id}, mod: {mod}, reason: {reason}, time: {time}")
输出:
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 文件中,我正在努力编写一个命令,它将显示用户的警告。
到目前为止,这是我的代码:
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 删除单个警告,如果您对此有任何指示,我也将不胜感激。此外,我愿意完全重新开始,所以如果您认为重新开始更好,请不要倾向于 修复 我的代码。
提前致谢,抱歉代码太长。
您以非常糟糕的方式存储警告,这样做并不难,但它很笨拙,不是最好的方式
# Harcoding so it's easier to visualize
warn_ids = [49926, 84348, 55828]
mods = [81730981793807198, 81730981793807198, 81730981793807198]
reasons = ["reason1", "reason2", "reason3"]
warn_times = ["Wednesday, January 27 2021 @ 20:32:55 PM", "Wednesday, January 27 2021 @ 20:32:55 PM", "Wednesday, January 27 2021 @ 20:32:55 PM"]
warn_ids = [12345, 54321, 123654]
warns = 3
print(f"Total warnings: {warns}")
for warn_id, mod, reason, warn_time, warn_id in zip(warn_ids, mods, reasons, warn_times, warn_ids):
print(f"ID: {warn_id}, mod: {mod}, reason: {reason}, time: {warn_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
我个人会使用以下 JSON 格式
{
"1929291823719827398": [
{"id": 123, "mod": 91823091823012339, "reason": "reason1", "timestamp": "12:34:12 01:01:2021"},
{"id": 124, "mod": 19182309182309183, "reason": "reason2", "timestamp": "12:45:45 10:01:2021"},
{"id": 125, "mod": 76187326198632893, "reason": "reason3", "timestamp": "20:12:54 13:01:2021"}
]
}
现在阅读每个单独的警告要容易得多,让我举个例子
with open("path.json", "r") as f:
data = json.load(f)
user_data = data[str(some_id)]
print(f"Total warnings: {len(user_data)}")
for warn in user_data:
warn_id, mod, reason, time = warn.values()
print(f"ID: {warn_id}, mod: {mod}, reason: {reason}, time: {time}")
输出:
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: 代码多了也不好意思:)