Bagaimana cara menghapus perintah tertulis pengguna di discord.py setelah x secons

Jan 19 2021

Jadi saya telah membuat perintah $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 $bisukan @name dihapus dari obrolan.

Jawaban

IPSDSILVA Jan 19 2021 at 19:08

Itu berarti Anda harus menunggu 5-10 detik setelah perintah, lalu menghapusnya. Pastikan saja bot Anda memiliki izin untuk menghapus pesan:

@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()

Kode di atas akan memberikan Mutedperan kepada pengguna (peran apa pun yang Anda tentukan melalui id peran itu) dan akan memberikan peran itu kepada anggota. Kemudian akan menunggu 5 detik (Anda dapat mengubahnya menjadi apa pun yang Anda inginkan) dan kemudian menghapus pesan perintah.

Bagle Jan 19 2021 at 19:09

Berikut dua metode yang dapat Anda gunakan.


Cara pertama adalah await asyncio.sleepmenggunakan asyncioimpor . Alasan kami tidak menggunakan time.sleepadalah karena ini akan menjadi pemblokir. Pemblokir berarti jika Anda menggunakan perintah ini di satu tempat, Anda akan menghentikan seluruh bot dan tidak ada orang lain yang dapat menggunakan perintah sampai selesai. Contohnya seperti di bawah ini:

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'

Cara kedua adalah menggunakan delete_afterasumsi Anda hanya menghapus pesan bot. Saya tidak bisa mendapatkan tautan langsung ke dokumen, tetapi mereka berkata:

delete_after (float) - Jika tersedia, jumlah detik untuk menunggu di latar belakang sebelum menghapus pesan yang baru saja kita kirim. Jika penghapusan gagal, maka akan diabaikan secara diam-diam.

Contohnya adalah sebagai berikut:

@client.command()
async def test2(ctx):
    await ctx.send("done", delete_after=5)

Beberapa tautan rujukan lainnya:

  • SO: Cara membuat bot menghapus pesannya sendiri setelah 5 detik
  • SO: Discord.py Bagaimana cara membuat bot menghapus pesan setelah jangka waktu tertentu
  • SO: Menghapus pesan bot di discord.py

Catatan : Kedua perintah ini telah diuji, dan kedua perintah berfungsi seperti yang diharapkan.