(Replit.com) I tried to use the warn command but every time i try, there is a error: TypeError: ‘Command’ object is not subscriptable
with open('warns.json', encoding='utf-8') as f:
try:
report = json.load(f)
except ValueError:
report = {}
report['users'] = []
@client.command(pass_context=True)
@commands.has_permissions(manage_roles=True, ban_members=True)
async def warn(ctx, user: discord.User, *reason: str):
if not reason:
await ctx.send("Please provide a reason")
return
author = ctx.author
reason = ' '.join(reason)
embed = discord.Embed(title=f'{author.name} warned {user.name} for')
for current_user in report['users']:
if current_user['name'] == user.name:
current_user['reasons'].append(reason)
break
else:
report['users'].append({
'name': user.name,
'reasons': [
reason,
]
})
with open('warns.json', 'w+') as f:
json.dump(report, f)
await ctx.send(embed=embed)
The error message I get is:
File "main.py", line 411, in warn
for current_user in report['users']:
TypeError: 'Command' object is not subscriptable
Advertisement
Answer
The problem is, that aside the report dictionary, you also have a command called report, so to fix this error, simply rename either the global variable or the command.
Also instead of saving the users by name, you should save them by their id (current_user.id instead of current_user.name ), because Nitro users can change their discriminator to avoid any warns.