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

开发定时踢出语音频道机器人遇报错:'list' object has no attribute 'move_to'

Discord机器人踢出语音频道报错解决

错误原因

你创建的memids是成员ID的列表,而move_to()是Discord.py中Member对象的专属方法,列表类型没有这个属性,所以触发'list' object has no attribute 'move_to'错误。

修正方案

直接保留channel_voice.members返回的Member对象列表,遍历列表逐个对成员执行踢出操作即可。同时要确保机器人拥有移动语音频道成员的权限。

修改后的代码

import discord
import asyncio
from discord.ext import commands
from discord import FFmpegPCMAudio

@client.command(pass_context=True)
async def outro(ctx):
    if ctx.author.voice:
        channel = ctx.message.author.voice.channel
        voice = await channel.connect()
        # 播放指定音频
        source = FFmpegPCMAudio(source_song)
        voice.play(source)

        # 获取目标语音频道
        channel_voice = client.get_channel(1014932059279605770)
        # 直接获取频道内的Member对象列表
        members_in_channel = channel_voice.members

        # 等待指定时间
        await asyncio.sleep(58)

        # 遍历成员逐个踢出
        for member in members_in_channel:
            try:
                # move_to(None) 会将成员移出语音频道
                await member.move_to(None)
                print(f"成功踢出: {member.display_name}")
            except discord.Forbidden:
                print(f"权限不足,无法踢出: {member.display_name}")
            except discord.HTTPException:
                print(f"踢出 {member.display_name} 时发生网络错误")
        
        # 播放完成后断开机器人的语音连接
        await voice.disconnect()

关键修改点

  • 移除了不必要的memidsID列表,直接使用Member对象操作
  • 遍历成员列表,对每个成员单独调用move_to(None)
  • 添加异常处理,避免单个成员操作失败导致整个命令中断
  • 新增机器人语音断开逻辑,防止资源占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:15:38