如何使用 discord.py 获取所有文本频道?

Posted

技术标签:

【中文标题】如何使用 discord.py 获取所有文本频道?【英文标题】:How to get all text channels using discord.py? 【发布时间】:2018-09-01 23:11:46 【问题描述】:

我需要获取所有频道来制作一个 bunker 命令,这使得所有频道都是只读的。

【问题讨论】:

【参考方案1】:

他们在 discord.py (1.0) 的 newer version 中将 Client.servers 更改为 Client.guilds。 您也可以使用 bot 代替 Client (info)。 和guild.text_channels 获取所有文本频道。 对于所有频道,您可以使用bot.get_all_channels()

text_channel_list = []
for guild in bot.guilds:
    for channel in guild.text_channels:
        text_channel_list.append(channel)

【讨论】:

谢谢!但是是否可以只获取列表中的频道名称? @Jonathan 只需使用channel.name 作为它的名称,或者您也可以将频道对象转换为字符串str(channel),它会返回它的名称【参考方案2】:

假设您使用的是异步分支,Client 类包含 guilds,它返回机器人连接到的 guild 类的列表。此处的文档:https://discordpy.readthedocs.io/en/stable/api.html#discord.Client.guilds

遍历这个列表,每个guild 类都包含channels,它返回服务器拥有的Channel 类的列表。此处的文档:https://discordpy.readthedocs.io/en/stable/api.html#discord.Guild.channels

最后,遍历这个列表,您可以检查每个 Channel 类的不同属性。例如,如果您想检查频道是否为文本,您可以使用channel.type。此处的文档:https://discordpy.readthedocs.io/en/stable/api.html#discord.abc.GuildChannel

一个粗略的例子,说明如何列出所有 Channel 类型为“文本”的对象:

text_channel_list = []
for server in Client.guilds:
    for channel in server.channels:
        if str(channel.type) == 'text':
            text_channel_list.append(channel)

要与'text' 比较,channel.type 必须是字符串。

对于旧版本的discord.py,通常称为async 分支,请使用server 而不是guild

text_channel_list = []
for server in Client.servers:
    for channel in server.channels:
        if str(channel.type) == 'text':
            text_channel_list.append(channel)

【讨论】:

以上是关于如何使用 discord.py 获取所有文本频道?的主要内容,如果未能解决你的问题,请参考以下文章

(discord.py) 获取特定语音频道中所有成员的列表

如何使用用户帐户获取/获取消息 (discord.py)

如何从特定频道狙击消息(discord.py)

如何使用 discord.py 中的频道 ID 设置频道对象?

如何使用 Discord.py Cogs 使 Discord Bot 加入语音频道并在成员加入频道时播放音频文件

如何使用 discord.py 获取不和谐用户的用户 ID