14

I need to get all channels to make a bunker command, which makes all channels read only.

Jonas
  • 121,568
  • 97
  • 310
  • 388
Veestire
  • 155
  • 1
  • 1
  • 5

2 Answers2

22

They changed Client.servers to Client.guilds in newer version of discord.py (1.0).
You can also use bot instead of Client (info).
And guild.text_channels to get all text channels.
For all channels you can use bot.get_all_channels()

text_channel_list = []
for guild in bot.guilds:
    for channel in guild.text_channels:
        text_channel_list.append(channel)
Human programmer
  • 408
  • 4
  • 11
10

The Client class contains guilds, which returns a list of guild classes that the bot is connected to. Documentation here: https://discordpy.readthedocs.io/en/stable/api.html#discord.Client.guilds

Iterating over this list, each guild class contains channels, which returns a list of Channel classes that the server has. Documentation here: https://discordpy.readthedocs.io/en/stable/api.html#discord.Guild.channels

Finally, iterating over this list, you can check each Channel class for different properties. For example, if you want to check that the channel is text, you would use channel.type. Documentation here: https://discordpy.readthedocs.io/en/stable/api.html#discord.abc.GuildChannel

A rough example of how you can make a list of all Channel objects with type 'Text':

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

To compare to 'text', channel.type must be a string.

For older versions of discord.py, commonly referred to as the async branch, use server instead of guild.

text_channel_list = []
for server in Client.servers:
    for channel in server.channels:
        if str(channel.type) == 'text':
            text_channel_list.append(channel)
Benjin
  • 3,448
  • 1
  • 10
  • 20