我想在用户喜欢的类别中创建频道,但是当我尝试运行程序时,它没有在我想要的类别中创建频道。
下面是我的代码:
if sly.content.startswith("sly ctchan"):
x=sly.content.split("sly ctchan ",1)[1]
await sly.channel.send("Category Name")
y=await client.wait_for('message', timeout=15.0)
z=discord.utils.get(sly.guild.categories, name =y)
await sly.guild.create_text_channel(x, overwrites=None, category=z)
脱离上下文,很难看出代码是如何工作的。您是否对所有的"命令"都使用on_message
事件?看一下命令,它们非常整洁。
正如Taku在评论中指出的那样,await client.wait_for('message')
返回一个消息对象。您知道使用.content
来获取消息,但第二个问题是:所有类别名称都显示为大写,但大小写可能不同,用户不会知道。我们需要纠正这一点,并使检查不关心大小写。
除此之外,你已经把一切都安排好了。我在那里添加了一个签入,因此它将只接受来自发起频道制作的用户的消息。否则任何人都可以写任何东西,它就会开始寻找一个类别。您还可以添加最后的if
语句,以便仅在它实际找到类别时才创建通道。
await sly.channel.send("Name of category:")
# Check for the right user
def check(m):
return m.author == sly.author
categoryName = await client.wait_for('message', check=check, timeout=15)
categoryChannel = discord.utils.find(lambda cat : cat.name.upper() = categoryName.content.upper(), sly.guild.categories)
# If it found a category
if categoryChannel:
await sly.guild.create_text_channel(channelName, category=categoryChannel)
return
# Didn't find a category? Tell the user it didn't find one, don't create a channel
await sly.channel.send(f"Couldn't find a category by the name __**{categoryName}**__. Aborting")