You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建仅可查看不可使用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:40:40