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

使用move_member时提示“The channel provided must be a voice channel.”错误求助

Fixing "The channel provided must be a voice channel" Error in Discord.py Bot

Hey there! It’s totally normal to hit this kind of snag when you’re starting out with Discord bots—let’s break down how to fix this error step by step.

Why This Happens

The error is spelling it out clearly: the channel you’re trying to move the user into isn’t a voice channel. Discord has distinct channel types (text, voice, announcement, etc.), and the move_to() method only works with voice channels. Since your message commands run fine, your bot is set up correctly—this is just a matter of targeting the right channel type.

Quick Fixes to Try

1. Specify Voice Channel Type in Command Parameters

If you’re using discord.ext.commands, explicitly define the channel parameter as discord.VoiceChannel. This lets Discord.py automatically validate that the user inputs a voice channel, and it’ll even prompt them to fix it if they pick a text channel by mistake.

Example code:

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.command()
async def move(ctx, member: discord.Member, channel: discord.VoiceChannel):
    # Make sure the bot has permission to move members
    if ctx.guild.me.guild_permissions.move_members:
        await member.move_to(channel)
        await ctx.send(f"Successfully moved {member.mention} to {channel.name}!")
    else:
        await ctx.send("I don't have permission to move members in this server!")

bot.run("YOUR_BOT_TOKEN")

2. Add Type Checks for Manually Fetched Channels

If you’re grabbing channels via get_channel() or similar methods, add a check to confirm it’s a voice channel before running the move operation. This stops the error from firing and lets you send a clear message to users.

Example:

from discord import VoiceChannel

@bot.command()
async def move_to_id(ctx, member: discord.Member, channel_id: int):
    target_channel = bot.get_channel(channel_id)
    
    # Verify the channel is a voice channel
    if isinstance(target_channel, VoiceChannel):
        await member.move_to(target_channel)
        await ctx.send(f"Moved {member.mention} to {target_channel.name}")
    else:
        await ctx.send("Oops! That ID doesn't belong to a voice channel.")

3. Double-Check Your Channel IDs

It’s easy to accidentally copy a text channel’s ID instead of a voice one. To get the correct voice channel ID:

  • Enable Developer Mode in Discord (Settings > Advanced > Developer Mode)
  • Right-click the voice channel > Copy ID
  • Use that ID in your code or when testing the command

Bonus: Confirm Bot Permissions

While this error is specifically about channel type, it’s worth making sure your bot has the right permissions:

  • "Move Members" permission enabled at the server level
  • "Connect" permission enabled in the target voice channel

If you’re still stuck, feel free to share a snippet of your move command code—we can help you spot the exact issue!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:55:16