Python Can';t使用其名称作为名称变量来删除不协调通道会导致非类型错误

Python Can';t使用其名称作为名称变量来删除不协调通道会导致非类型错误,python,discord,discord.py,discord.py-rewrite,Python,Discord,Discord.py,Discord.py Rewrite,我有一个命令,它接收一个输入,然后根据该输入为票证系统删除一个频道。命令现在可以删除通道,但是删除方法无法识别“输出”变量 我是新来的不和谐,提前道歉 if message.content.startswith(".close"): verify_channel = client.get_channel(756238816511131773) if not message.channel.id == verify_channel.id:

我有一个命令,它接收一个输入,然后根据该输入为票证系统删除一个频道。命令现在可以删除通道,但是删除方法无法识别“输出”变量

我是新来的不和谐,提前道歉

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'

您可以通过使用获取通道对象的名称


下面是使用频道提及的工作代码。聊天中提到的内容如下:
我指的是一个频道:#ghi
其中
ghi
是一个频道名称。如果打印出来,它会将ghi转换为
。您可以使用正则表达式或其他方法提取此消息,但也可以调用消息中的函数:

channel = message.channel_mentions[0] #Only use the first channel mentioned
await channel.delete()
下面是一个转换为命令的工作示例,我建议使用
if startswith(command\u name)

然后可以从聊天室调用,如
.close\ghi

如果您想保留此消息,请确保将其添加到ON_消息事件的顶部

async def on_message(message):
    await bot.process_commands(message)
我已经测试过了,它是有效的


附笔。: 命令还具有易于获取参数的优点,而不是按空格分割字符串,我现在无法解释,但我建议使用以下文档:https://discordpy.readthedocs.io/en/latest/ext/commands/commands.html
我没有包括这个,因为你的函数可以不用它来编写。

这是否回答了你的问题?几乎所有的频道名称都是由变量“output”决定的,新的问题似乎是搜索频道名称时“output”不起作用,命令每次都有不同的频道名称,因此我不能使用默认频道名称,然后根据您的实际需要编辑您的问题,由于您所问的是
是否有一种从频道名称获取频道ID的方法
,如果您有与此问题无关的其他问题,请创建一个新问题。我更新了问题,TY您的原始代码/问题中有一个问题我在写答案时没有注意到,但是在调用
discord.utils.get()
时,输出不会在
else
语句之前声明,因此它将超出范围,因此
None
。该函数将无法找到None通道并返回
None
。该概念似乎可行,但当我将其更改为output(另一个变量,应为通道名称)时,“channel\u name”将继续返回None<代码>属性错误:“非类型”对象没有属性“删除”
channel=discord.utils.get(guild.text\u channels,name=output)
是否在票证频道中使用
。关闭
?我假设这是一个关闭票证的命令,通过关闭票证,您试图删除该频道?close不在票证频道中使用,因为该命令必须有一个过滤器,以确保它不在任何其他频道(如普通会员)中使用,因此,它有一个特定的通道,它只能在
打印(输出)
返回时使用。它返回“ticket-4393”,这是我输入的文本通道。整个命令将是“.close ticket-4393”,这是一个更好的解决方案,我认为当我运行时它会工作。close#ticket xxxx在聊天中没有发生任何事情,控制台甚至似乎无法识别它正在运行。我只是编辑了我的答案,再次检查粗体句子下的部分。它涉及到一个特殊的行来添加到你的on_消息事件。嗨,我看了一下,但我更喜欢命令选项它简单得多,所以我尝试删除on_消息版本,但命令版本似乎没有任何作用?@max your
on_消息
正在阻止命令。要么删除它,要么添加
wait bot.process\u命令(message)
在你的
on\u消息下
像上面提到的@Allister一样。是的,我完全删除了on\u消息版本
bot = commands.Bot(command_prefix=".")

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