ฉันจะลบคำสั่งที่ผู้ใช้เขียนใน discord.py หลัง x secons ได้อย่างไร

Jan 19 2021

ดังนั้นฉันจึงได้ออกคำสั่ง $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 จะถูกลบออกจากแชท

คำตอบ

IPSDSILVA Jan 19 2021 at 19:08

นั่นหมายความว่าคุณจะต้องรอ 5-10 วินาทีหลังจากคำสั่งจากนั้นจึงลบออก ตรวจสอบให้แน่ใจว่าบอทของคุณมีสิทธิ์ในการลบข้อความ:

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

โค้ดด้านบนจะให้Mutedบทบาทแก่ผู้ใช้(บทบาทใดก็ตามที่คุณระบุผ่าน id ของบทบาทนั้น ๆ ) และจะมอบบทบาทนั้นให้กับสมาชิก จากนั้นจะรอ 5 วินาที (คุณสามารถเปลี่ยนเป็นอะไรก็ได้ที่คุณต้องการ) จากนั้นลบข้อความคำสั่ง

Bagle Jan 19 2021 at 19:09

นี่คือสองวิธีที่คุณสามารถใช้ได้


วิธีแรกที่จะใช้await asyncio.sleepใช้นำเข้าasyncio เหตุผลที่เราไม่ใช้time.sleepคงเป็นเพราะนี่จะเป็นการปิดกั้น ตัวบล็อกหมายความว่าหากคุณใช้คำสั่งนี้ในที่เดียวคุณจะหยุดบอททั้งหมดและจะไม่มีใครใช้คำสั่งได้จนกว่าจะเสร็จสิ้น ตัวอย่างจะเป็นดังนี้:

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'

วิธีที่สองคือใช้delete_afterสมมติว่าคุณกำลังลบข้อความของบอทเท่านั้น ฉันไม่สามารถรับลิงก์โดยตรงไปยังเอกสารได้ แต่พวกเขาบอกว่า:

delete_after (float) - หากระบุจำนวนวินาทีที่ต้องรอในพื้นหลังก่อนที่จะลบข้อความที่เราเพิ่งส่งไป หากการลบล้มเหลวการลบจะถูกเพิกเฉย

ตัวอย่างมีดังนี้:

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

ลิงค์อ้างอิงอื่น ๆ :

  • SO: วิธีทำให้บอทลบข้อความของตัวเองหลังจากผ่านไป 5 วินาที
  • SO: Discord.py ฉันจะทำให้บอทลบข้อความหลังจากระยะเวลาที่กำหนดได้อย่างไร
  • SO: การลบข้อความของบอทใน discord.py

หมายเหตุ : คำสั่งทั้งสองนี้ได้รับการทดสอบแล้วและทั้งสองคำสั่งทำงานตามที่คาดไว้