Comment supprimer une commande écrite par un utilisateur dans discord.py après x secondes

Jan 19 2021

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

IPSDSILVA Jan 19 2021 at 19:08

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 Mutedrô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.

Bagle Jan 19 2021 at 19:09

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.sleepserait 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_aftersupposant 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.