我希望我的不和谐机器人返回它在某个公会中可以访问的频道,我正在使用:
for i in guild.categories:
channel_list = []
for j in i.channels:
channel_list.append(f"- {j.name}, {j.id}")
但这会返回公会的所有频道。如何检查机器人是否有权读取频道,以便我只能看到机器人被允许查看的频道?
答案 0 :(得分:2)
我认为您正在寻找 bot.get_all_channels(),如文档中所写:“一个生成器可以检索客户端可以'访问'的每个 abc.GuildChannel。”,因此您无需验证机器人可以'看频道。请注意,您也可能会通过此功能检索语音频道
否则,您仍然可以遍历类别中的所有频道,并使用
channel.permissions_for(guild.me).view_channel
( https://discordpy.readthedocs.io/en/latest/api.html?highlight=me#discord.Guild.me, https://discordpy.readthedocs.io/en/latest/api.html#discord.Permissions.view_channel ) 如果机器人可以看到频道,则返回 True,否则返回 False
您的代码将是:
for i in guild.categories:
channel_list = []
for j in i.channels:
if j.permissions_for(guild.me).view_channel:
channel_list.append(f"- {j.name}, {j.id}")