Come rimuovo un comando scritto dall'utente in discord.py dopo x secondi
Quindi ho eseguito un comando $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 viene rimosso dalla chat.
Risposte
Ciò significherebbe che dovresti attendere 5-10 secondi dopo il comando, quindi eliminarlo. Assicurati solo che il tuo bot abbia le autorizzazioni per eliminare i messaggi:
@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()
Il codice sopra darà all'utente il Muted
ruolo (qualunque ruolo tu specifichi tramite l'ID di quel ruolo) e darà quel ruolo al membro. Quindi aspetterà 5 secondi (puoi cambiarlo in quello che desideri) e quindi eliminare il messaggio di comando.
Ecco due metodi che potresti usare.
Il primo modo sarebbe usare await asyncio.sleepusando l' asyncioimportazione . Il motivo per cui non utilizziamo time.sleep
sarebbe perché questo sarebbe un blocco. Un blocco significa che se usi questo comando in un posto, interromperesti l'intero bot e nessun altro sarebbe in grado di usare i comandi fino a quando non ha finito. Un esempio potrebbe essere il seguente:
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'
Il secondo modo sarebbe quello di utilizzare delete_after
supponendo che tu stia eliminando solo il messaggio del bot. Non sono riuscito a ottenere il collegamento diretto ai documenti, ma dicono:
delete_after (float) - Se fornito, il numero di secondi da attendere in background prima di eliminare il messaggio che abbiamo appena inviato. Se l'eliminazione non riesce, viene silenziosamente ignorata.
L'esempio è il seguente:
@client.command()
async def test2(ctx):
await ctx.send("done", delete_after=5)
Alcuni altri link di riferimento:
- COSÌ: Come fare in modo che un bot cancelli il proprio messaggio dopo 5 secondi
- SO: Discord.py Come posso fare in modo che un bot elimini i messaggi dopo un determinato periodo di tempo
- COSÌ: eliminazione del messaggio di un bot in discord.py
Nota : entrambi questi comandi sono stati testati ed entrambi funzionano come previsto.