Comment supprimer une commande écrite par un utilisateur dans discord.py après x secondes
Alors j'ai fait une commande $mute @name which basically mutes a player when typed. But what i want is when i type the command , after 5 or 10 seconds the command input line that is $mute @name est supprimé du chat.
Réponses
Cela signifierait que vous devrez attendre 5 à 10 secondes après la commande, puis la supprimer. Assurez-vous simplement que votre bot dispose des autorisations nécessaires pour supprimer les messages:
@client.command()
async def mute(ctx, member: discord.Member):
muted_role = ctx.guild.get_role(YOUR_ROLE_ID) # Make sure not to put it in a string
await member.add_roles(muted_role)
await asyncio.sleep(5) # Make sure you import asyncio, also change the 5 to whatever seconds you would like
await ctx.message.delete()
Le code ci-dessus donnera à l'utilisateur le Muted
rôle (quel que soit le rôle que vous spécifiez via l'ID de ce rôle) et attribuera ce rôle au membre. Ensuite, il attendra 5 secondes (vous pouvez changer cela comme vous le souhaitez), puis supprimer le message de commande.
Voici deux méthodes que vous pouvez utiliser.
La première façon serait d'utiliser en await asyncio.sleeputilisant l' asyncioimportation . La raison pour laquelle nous n'utilisons pas time.sleep
serait parce que ce serait un bloqueur. Un bloqueur signifie que si vous utilisez cette commande à un seul endroit, vous arrêteriez le bot entier et personne d'autre ne pourrait utiliser les commandes jusqu'à ce que ce soit fait. Un exemple serait comme ci-dessous:
import asyncio
@client.command()
async def test(ctx):
await ctx.message.delete() # deletes message sent by user
# do some things here
msg = await ctx.send("done")
await asyncio.sleep(5) # waits for 5 seconds
await msg.delete() # deletes message sent by bot, aka 'done'
La deuxième façon serait d'utiliser en delete_after
supposant que vous supprimez uniquement le message du bot. Je n'ai pas pu obtenir le lien direct vers les documents, mais ils disent:
delete_after (float) - S'il est fourni, le nombre de secondes à attendre en arrière-plan avant de supprimer le message que nous venons d'envoyer. Si la suppression échoue, elle est ignorée en silence.
L'exemple est le suivant:
@client.command()
async def test2(ctx):
await ctx.send("done", delete_after=5)
Quelques autres liens de référence:
- SO: Comment faire en sorte qu'un bot supprime son propre message après 5 secondes
- SO: Discord.py Comment puis-je faire en sorte qu'un bot supprime des messages après un certain temps
- SO: Suppression du message d'un bot dans discord.py
Remarque : ces deux commandes ont été testées et les deux commandes fonctionnent comme prévu.