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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:15:51