【问题标题】:guild.text_channels return just the top channel instead of all channelsguild.text_channels 只返回顶部频道而不是所有频道
【发布时间】:2020-10-13 14:12:40
【问题描述】:

我正在制作一个不和谐的机器人,我希望它在加入新公会时发送一条消息。

但是,我只希望它在它加入的公会的#general 频道中发送消息:

@client.event
async def on_guild_join(guild):
    chans = guild.text_channels
    for channel in chans:
        if channel.name == 'general':
            await channel.send('hi')
        break

我注意到的问题是guild.text_channels 只返回服务器第一个频道的名称。我想遍历所有频道,最后只在#general 频道上发送消息。

解决方法是什么?

【问题讨论】:

  • Guild.text_channels 应该返回一个 TextChannel 的列表,你怎么知道它没有得到它们?

标签: python discord.py


【解决方案1】:

有几种方法可以做到这一点。

这是一个使用utils.get()的示例:

import discord # To access utils.get

@client.event
async def on_guild_join(guild):
    channel = discord.utils.get(guild.text_channels, name="general")
    await channel.send("Hi!")

或者如果公会设置了system_channel,你可以在那里发送消息:

@client.event
async def on_guild_join(guild):
    await guild.system_channel.send("Hi!")

您可以为这两个创建检查,但请记住,某些服务器可能没有名为 general 的文本通道或未设置系统通道,因此您可能会收到一些属性错误,抱怨 NoneType 没有.send() 属性。

可以使用错误处理程序或try/except 来避免这些错误。


参考资料:

【讨论】:

    猜你喜欢
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2019-11-10
    • 2021-12-06
    • 2019-03-02
    • 2019-11-23
    相关资源
    最近更新 更多