Làm cách nào để xóa lệnh do người dùng viết trong discord.py sau x giây
Vì vậy, tôi đã thực hiện một lệnh $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 bị xóa khỏi cuộc trò chuyện.
Trả lời
Điều đó có nghĩa là bạn sẽ phải đợi 5-10 giây sau lệnh và sau đó xóa nó. Chỉ cần đảm bảo rằng bot của bạn có quyền xóa tin nhắn:
@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()
Đoạn mã trên sẽ cung cấp cho người dùng Muted
vai trò (bạn chỉ định vai trò nào thông qua id của vai trò đó) và sẽ cấp vai trò đó cho thành viên. Sau đó, nó sẽ đợi 5 giây (bạn có thể thay đổi điều này thành bất cứ điều gì bạn muốn) và sau đó xóa thông báo lệnh.
Đây là hai phương pháp bạn có thể sử dụng.
Cách đầu tiên sẽ là sử dụng await asyncio.sleepbằng cách asyncionhập . Lý do chúng tôi không sử dụng time.sleep
là vì đây sẽ là một trình chặn. Trình chặn có nghĩa là nếu bạn sử dụng lệnh này ở một nơi, bạn sẽ dừng toàn bộ bot và không ai khác có thể sử dụng lệnh cho đến khi hoàn tất. Một ví dụ sẽ như sau:
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'
Cách thứ hai sẽ là sử dụng delete_after
giả sử bạn chỉ xóa tin nhắn của bot. Tôi không thể nhận được liên kết trực tiếp đến các tài liệu, nhưng họ nói:
xóa_ sau (float) - Nếu được cung cấp, số giây phải đợi ở chế độ nền trước khi xóa thư chúng tôi vừa gửi. Nếu việc xóa không thành công, thì nó sẽ bị bỏ qua một cách âm thầm.
Ví dụ như sau:
@client.command()
async def test2(ctx):
await ctx.send("done", delete_after=5)
Một số liên kết giới thiệu khác:
- VẬY: Cách làm cho bot xóa tin nhắn của chính nó sau 5 giây
- SO: Discord.py Làm cách nào để khiến bot xóa tin nhắn sau một khoảng thời gian cụ thể
- VẬY: Xóa tin nhắn của bot trong discord.py
Lưu ý : Cả hai lệnh này đều đã được thử nghiệm và cả hai lệnh đều hoạt động như mong đợi.