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

discord.py 1.7.3创建Discord频道报TypeError错误问题

报错原因
  • 核心错误是对discord.Guild的引用方式错误:代码里guild = discord.Guild拿到的是discord.py内置的Guild类本身,不是用户发送消息时所在的真实服务器实例。调用类的实例方法create_text_channel()时,第一个隐式参数self本应自动传入实例对象,直接用类调用方法时,你传入的第一个值(拆分得到的频道名)会被识别为self参数,真正需要的name参数没有拿到,因此抛出缺少必填参数的异常。
  • 原代码未做边界判断:如果用户只输入$new不跟频道名,msg.split(' ',1)[1]会直接触发索引越界错误。
  • 原代码未做权限校验:如果机器人没有服务器的「管理频道」权限,就算参数正确也会调用失败。
修复方法

将获取服务器实例的逻辑替换为从消息对象中取当前所属服务器,同时补充参数校验、权限判断逻辑,修正后的可运行代码如下:

import discord
import os

client = discord.Client()

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    msg = message.content
    if msg.startswith('$new'):
        cmd_split = msg.split(' ', 1)
        # 校验是否传入频道名
        if len(cmd_split) < 2:
            await message.channel.send("指令格式错误,请使用`$new 频道名`的格式创建频道")
            return
        channel_name = cmd_split[1].strip()
        # 获取当前消息所属的真实服务器实例
        current_guild = message.guild
        # 校验机器人权限
        if not current_guild.me.guild_permissions.manage_channels:
            await message.channel.send("权限不足,我需要「管理频道」权限才能创建新频道")
            return
        # 执行创建频道操作
        await current_guild.create_text_channel(name=channel_name)
        await message.channel.send(f"文本频道`{channel_name}`创建成功")

额外注意:邀请机器人加入服务器时,需要在邀请链接的权限选项中勾选「管理频道」权限,否则接口会返回403无权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:15:48