मैं x सेकंड के बाद discord.py में एक उपयोगकर्ता लिखित कमांड कैसे हटा सकता हूं

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भूमिका देगा (जो भी भूमिका आप उस भूमिका के आईडी के माध्यम से निर्दिष्ट करते हैं) और उस भूमिका को सदस्य को देगा। फिर यह 5 सेकंड प्रतीक्षा करेगा (आप इसे जो चाहें बदल सकते हैं) और फिर कमांड संदेश को हटा दें।

Bagle Jan 19 2021 at 19:09

यहां दो तरीके दिए गए हैं जिनका आप उपयोग कर सकते हैं।


पहला तरीका आयात का await asyncio.sleepउपयोग करना होगा । हम इसका उपयोग नहीं करेंगे कारण यह अवरोधक होगा। एक अवरोधक का अर्थ है कि यदि आप एक जगह इस कमांड का उपयोग करते हैं, तो आप पूरे बॉट को रोक देंगे और कोई भी अन्य कमांड का उपयोग करने में सक्षम नहीं होगा जब तक कि यह पूरा नहीं हो जाता। एक उदाहरण नीचे दिया जाएगा:asynciotime.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 में हटाना

नोट : इन दोनों कमांड्स का परीक्षण किया गया है, और दोनों कमांड्स उम्मीद के मुताबिक काम करते हैं।