Discord.py'de x saniye sonra kullanıcı tarafından yazılan bir komutu nasıl kaldırırım
Bu yüzden bir emir verdim $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 sohbetten kaldırılır.
Yanıtlar
Bu, komuttan sonra 5-10 saniye beklemeniz ve ardından silmeniz gerektiği anlamına gelir. Botunuzun mesajları silme izinlerine sahip olduğundan emin olun:
@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()
Yukarıdaki kod, kullanıcıya Muted
rolü (bu rolün kimliği aracılığıyla hangi rolü belirtirseniz) verecek ve o rolü üyeye verecektir. Ardından 5 saniye bekleyecek (bunu istediğiniz gibi değiştirebilirsiniz) ve ardından komut mesajını silecektir.
İşte kullanabileceğiniz iki yöntem.
İlk yol await asyncio.sleep, asyncioiçe aktarmayı kullanmak olacaktır . Kullanmamamızın nedeni time.sleep
bunun bir engelleyici olması olabilir. Engelleyici, bu komutu tek bir yerde kullanırsanız, botun tamamını durduracağınız ve bu işlem tamamlanana kadar hiç kimsenin komutları kullanamayacağı anlamına gelir. Bir örnek aşağıdaki gibi olacaktır:
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'
İkinci yol, delete_after
yalnızca botun mesajını sildiğinizi varsaymaktır. Dokümanlara doğrudan bağlantı kuramadım ama diyorlar ki:
delete_after (float) - Verilmişse, az önce gönderdiğimiz mesajı silmeden önce arka planda beklenecek saniye sayısı. Silme başarısız olursa sessizce yok sayılır.
Örnek aşağıdaki gibidir:
@client.command()
async def test2(ctx):
await ctx.send("done", delete_after=5)
Diğer bazı yönlendirme bağlantıları:
- SO: Bir bot 5 saniye sonra kendi mesajını nasıl silebilir?
- SO: Discord.py Belirli bir süre sonra bot silme mesajlarını nasıl yapabilirim
- SO: discord.py'de botun mesajını silme
Not : Bu komutların her ikisi de test edilmiştir ve her iki komut da beklendiği gibi çalışmaktadır.