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

discord.py如何实现无参数movienight命令批量移动语音成员

discord.py movienight命令改造方案

直接把原有命令的两个参数设置为可选默认值None,增加分支判断逻辑即可,改造后同时兼容两种调用方式:

  • 带参数调用:!tpl movienight "@成员" "频道名",保留原有移动单个指定成员到目标频道的逻辑
  • 无参数调用:!tpl movienight,自动将当前服务器所有在语音频道内的成员移动到名为GENERAL的语音频道

改造后完整代码

import discord
from discord.utils import get

@bot.command()
async def movienight(ctx, member: discord.Member = None, channel: discord.VoiceChannel = None):
    # 无参数传入的分支逻辑
    if member is None and channel is None:
        # 先定位当前服务器名为GENERAL的语音频道
        target_channel = get(ctx.guild.voice_channels, name="GENERAL")
        if not target_channel:
            await ctx.send("未找到名为GENERAL的语音频道,请先创建该频道后重试")
            return
        # 遍历服务器所有语音频道,将其中的成员全部移动到目标频道
        for vc in ctx.guild.voice_channels:
            for vc_member in vc.members:
                try:
                    await vc_member.move_to(target_channel)
                except discord.Forbidden:
                    await ctx.send(f"缺少移动成员权限,无法移动成员{vc_member.display_name}")
                    return
        await ctx.send(f"已将所有语音频道内成员移动到{target_channel.name}频道")
        return
    # 传入参数时沿用原有逻辑
    await member.move_to(channel)
    await ctx.send(f"已将{member.display_name}移动到{channel.name}频道")

注意事项

  • 请确保机器人账号在服务器内拥有移动成员的权限,否则移动操作会触发权限错误
  • 代码中频道匹配为大小写精确匹配,如果你的服务器内GENERAL频道名称有大小写差异,请自行修改name="GENERAL"处的匹配字符串
  • 无参数调用时,只会移动当前已经接入任意语音频道的成员,未连接语音的成员不会被处理

内容的提问来源于stack exchange,提问作者Nicolas Lecca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:36:15