discord.py:已知成员ID与频道ID,如何无类型参数移动成员?
在discord.py中通过ID移动成员至指定语音频道(无需直接传入对象参数)
你当前的代码直接用整数ID调用move_to()肯定会报错,因为move_to()是discord.Member对象的专属方法,整数类型本身没有这个属性。要实现需求,得先把ID转换成对应的Discord对象,具体步骤如下:
- 从服务器缓存中获取成员对象:用
ctx.guild.get_member(成员ID),这个方法会从机器人已缓存的成员列表里查找,效率较高;如果成员不在缓存里,也可以用await ctx.guild.fetch_member(成员ID)(需要机器人有相应权限)。 - 获取语音频道对象:用
ctx.guild.get_channel(频道ID),拿到对象后可以判断一下是否为语音频道类型(避免传入文本频道ID导致报错)。 - 调用
move_to()方法移动成员,同时建议加上异常处理,避免因权限不足、对象不存在等情况导致程序崩溃。
修正后的示例代码:
@commands.command() async def msg(ctx): member_id = 848494088563327006 channel_id = 430388650786947083 # 获取成员对象 member = ctx.guild.get_member(member_id) if not member: # 如果缓存里没找到,尝试从API拉取 try: member = await ctx.guild.fetch_member(member_id) except discord.NotFound: await ctx.send("找不到指定成员") return # 获取语音频道对象 channel = ctx.guild.get_channel(channel_id) if not isinstance(channel, discord.VoiceChannel): await ctx.send("指定ID不是语音频道") return # 移动成员 try: await member.move_to(channel) await ctx.send(f"已将{member.mention}移动至{channel.name}") except discord.Forbidden: await ctx.send("我没有移动成员的权限") except Exception as e: await ctx.send(f"移动失败:{str(e)}")
内容的提问来源于stack exchange,提问作者FlamyIce
相关产品推荐
相关产品推荐

