मेरे पास एक कमांड है जो एक इनपुट लेता है और इसका मतलब टिकट सिस्टम के लिए उस इनपुट के आधार पर एक चैनल को हटाना है। कमांड अब चैनल को हटा सकता है हालांकि डिलीट विधि "आउटपुट" चर को नहीं पहचानती है।

मैं कलह के लिए नया हूँ, अग्रिम क्षमा करें।

if message.content.startswith(".close"):
        verify_channel = client.get_channel(756238816511131773)
        if not message.channel.id == verify_channel.id:
            await message.delete()
        else:
            msg = message.content.split()
            output = ""
            for word in msg[1:]:
                output += word
                output += " "
        
       guild = message.guild
            channel = discord.utils.get(guild.text_channels, name=output)
            await channel.delete()

आदेश चलाते समय उत्पन्न होने वाली त्रुटि:

AttributeError: 'NoneType' object has no attribute 'delete'
0
user14292845 18 सितंबर 2020, 00:00

2 जवाब

सबसे बढ़िया उत्तर

यहां कार्य कोड है जो चैनल उल्लेखों का उपयोग करता है। चैट में उल्लेख इस तरह दिखते हैं: I'm mentioning a channel: #ghi जहां ghi एक चैनल का नाम है। यदि आप इसका प्रिंट आउट लेते हैं, तो यह #ghi को <#622194268139683870> में बदल देता है। आप इसे रेगेक्स या कुछ के साथ निकाल सकते हैं लेकिन आप संदेश पर एक फ़ंक्शन भी कॉल कर सकते हैं:

channel = message.channel_mentions[0] #Only use the first channel mentioned
await channel.delete()

यहां एक काम करने वाला उदाहरण एक कमांड में परिवर्तित किया गया है, जिसे मैं प्रत्येक फ़ंक्शन को if startswith(command_name) के साथ शुरू करने की सलाह देता हूं

bot = commands.Bot(command_prefix=".")

@bot.command()
async def close(ctx):
    channel = ctx.message.channel_mentions[0]
    await channel.delete()
    print("Success")

फिर आप .close #ghi जैसी चैट से इनवाइट कर सकते हैं

यदि आप इसे रखना चाहते हैं तो बस यह सुनिश्चित करें कि आप इसे अपने ON_MESSAGE ईवेंट के शीर्ष पर जोड़ते हैं

async def on_message(message):
    await bot.process_commands(message)

मैंने परीक्षण किया है, यह काम करता है।


मैंने इसे शामिल नहीं किया क्योंकि आपका कार्य इसके बिना लिखा जा सकता है।

1
Allister 18 सितंबर 2020, 00:45

आप का उपयोग करके चैनल ऑब्जेक्ट को उसके नाम से प्राप्त कर सकते हैं प्राप्त करें

@bot.event
async def on_message(message):
    if message.content.startswith(".close"):
        guild = message.guild
        channel = discord.utils.get(guild.text_channels, name="channel_name")
        await channel.delete()
0
Jawad 18 सितंबर 2020, 01:00