【问题标题】:Channel Not Creating In A Category Discord.py频道未在类别 Discord.py 中创建
【发布时间】:2021-10-26 15:10:17
【问题描述】:

我想在用户喜欢的类别中创建频道,但是当我尝试运行程序时,它并没有在我想要的类别中创建频道。

这是我的代码:

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)

【问题讨论】:

  • 你能指定错误的样子吗?
  • 没有错误...频道已创建但不在任何类别中
  • 如果您尝试通过打印 y 和 z 进行调试,您会发现您的问题:y 是 Message 对象,而不是字符串,因此 z 将为 None。请改用name=y.content
  • 即使使用z=discord.utils.get(sly.guild.categories, name =y.content),它也将z显示为none
  • 我的意思是它仍然无法正常工作

标签: python discord discord.py


【解决方案1】:

断章取义,很难看出您的代码是如何工作的。您是否为所有“命令”使用on_message 事件?看看Commnads,他们很整洁。

正如 Taku 在评论中指出的那样,await client.wait_for('message') 返回一个 Message Object。您知道使用.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")

【讨论】:

  • 照你说的做了,甚至添加了一个 else 语句,但不起作用。它不会创建频道并且显示类别不存在。在打印 categoryChannel 的值后,它仍然显示为 None。所以我认为这就是问题所在。 @client.event async def on_message(sly):
  • @DrGuileDish1 代码运行了多远?它要求Name of category: 吗?如果是这样,那么代码执行得很好,问题在于找到类别。我已经将其作为命令和on_message 事件进行了测试,但我无法重现您的问题。我的机器人可以毫无问题地找到该类别。尝试用categoryChannel = discord.utils.find(lambda cat: cat.name == categoryName.content.upper(), sly.guild.categories)替换discord.utils.get
  • 发生的情况是,当我运行代码时,它会询问类别名称,然后显示找不到类别...只需在 discord 给我发个消息,我会给你发一张图片发生了什么我的不和谐 id 是:DrGuileDish1#5004
  • @DrGuileDish1 我已经添加了你,这有点奇怪,我现在已经用几个不同的机器人(甚至创建了一个全新的机器人)在几个不同的服务器上进行了测试.一切都很好。
  • @DrGuileDish1 我意识到我的代码有错误。现在已更正,应该可以正常工作!
猜你喜欢
  • 2021-05-30
  • 2021-09-15
  • 2020-11-17
  • 1970-01-01
  • 2020-10-21
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多