如何创建仅可查看不可使用的Discord统计语音频道?
解决Discord机器人创建语音频道权限报错问题
你遇到的TypeError是因为create_voice_channel()方法根本没有speak这个参数。要设置语音频道的权限,必须通过overwrites参数来配置权限覆盖规则。
正确的做法是先获取服务器的@everyone角色,然后为该角色定义对应的权限:允许查看频道,但拒绝连接、发言、开启视频和使用活动的权限。
修改后的代码如下:
@bot.event async def on_ready(): print(f'We have logged in as {bot.user}') activity = discord.Game(name="Sudoku", type=1) await bot.change_presence(status=discord.Status.online, activity=activity) guilds = bot.guilds for guild in guilds: Member = len([m for m in guild.members if not m.bot]) channel = get(guild.channels, name=f"Count: {Member}") if not channel: cat = discord.utils.get(guild.categories, id=<id>) # 获取@everyone角色 everyone_role = guild.default_role # 定义权限覆盖 overwrites = { everyone_role: discord.PermissionOverwrite( view_channel=True, # 允许查看频道 connect=False, # 拒绝连接 speak=False, # 拒绝发言 stream=False, # 拒绝开启视频/直播 use_voice_activation=False, # 拒绝使用语音活动 send_messages=False # 额外确保文本消息也无法发送 ) } # 创建带权限的语音频道 Member_count_channels.append(await guild.create_voice_channel( f'Count: {Member}', category=cat, overwrites=overwrites ))
关键点说明:
guild.default_role对应服务器的@everyone角色,设置的权限会应用到所有成员discord.PermissionOverwrite用来定义具体权限规则,布尔值True代表允许,False代表拒绝- 将配置好的
overwrites作为参数传入create_voice_channel(),替代原来无效的speak=False参数
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

