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
相关产品推荐
相关产品推荐

