1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
您的錯(cuò)誤在此行中,您嘗試刪除警告 ID:
del checkifthere[f'{member.id}'][f'{warnid}']
checkifthere[f'{member.id}']是一個(gè)列表,您提供的索引是一個(gè)字符串。列表索引必須是整數(shù),所以你有一個(gè)錯(cuò)誤。
刪除列表元素的最簡(jiǎn)單方法是使用list.remove(element):
checkifthere[str(member.id)].remove(warnid)
此外,您不需要f strings,您可以使用str()將整數(shù)和浮點(diǎn)數(shù)轉(zhuǎn)換為字符串。
通過一些重構(gòu),您的命令如下所示:
from discord import Member
from discord.ext import commands
from json import load, dump
@bot.command()
async def delwarn(ctx, member: Member = None, warn_id: str = None):
if not member:
return
with open('warns.json', 'r') as file:
data = load(file)
member_id = str(member.id)
if not member_id in data.keys():
return
if warn_id in data[member_id] and not len(data[member_id]) == 1:
with open('warns.json', 'w') as file:
data[member_id].remove(warn_id)
dump(data, file, sort_keys=True, indent=4)
添加回答
舉報(bào)