Have you at any point registered the commands as global commands? If so, you may have a global command AND a local command both showing up in your server, because Discord treats them as separate. (I believe this is intended to make testing easier so you can test new commands in a private dev server before pushing test commands globally: Global command documentation)
I tested some of the code and it's working as expected for me - I don't see anything wrong there, unless you've got duplicates in your command files somewhere.
I'd recommend trying to clear the global commands and see if that gets rid of the duplicates:
await client.application.commands.set([]);
Good luck!