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

Discord.py加载Cogs时出现NoneType不可用于await表达式错误

问题分析与解决

错误根源

  1. Intents 配置位置错误:你把intents配置放在了Cog的__init__方法里,这完全无效。Discord Bot的intents必须在创建Bot实例时传入,而非在Cog内部设置。
  2. Setup函数冗余语法:Test(client, )中的逗号属于冗余写法,虽不直接报错,但会影响代码可读性。
  3. Bot实例未正确初始化:从你描述的“此前的intents错误”来看,main.py中大概率没有在创建Bot时传入intents,这会导致Bot实例核心属性缺失,进而触发加载扩展时的NoneType错误。

修正步骤

1. 修正main.py的Bot初始化

在main.py中添加Bot实例的正确初始化代码,确保传入intents:

import os
import discord
import asyncio
from discord.ext import commands

# 初始化intents
intents = discord.Intents.default()
intents.message_content = True  # 必须开启此intent才能读取消息内容

# 创建Bot实例,替换为你的命令前缀
bot = commands.Bot(command_prefix="!", intents=intents)

# 原有加载扩展代码
async def load_extensions():
     for filename in os.listdir("./cogs"):
        if filename.endswith(".py"):
            await bot.load_extension(f"cogs.{filename[:-3]}")

async def main():
    async with bot:
        await load_extensions()
        await bot.start(os.getenv('TOKEN'))

asyncio.run(main())

2. 修正cogs.py的代码

移除Cog内部无效的intents配置,同时清理setup函数的冗余语法:

import discord
from discord.ext import commands

class Test(commands.Cog):
    def __init__(self, client):
        self.client = client  # 仅保留client引用即可
    
    @commands.command()
    async def command(self, ctx):
        await ctx.send("Yes?")

def setup(client):
    client.add_cog(Test(client))  # 移除多余的逗号

3. 补充验证步骤

  • 登录Discord开发者后台,在Bot选项卡的Privileged Gateway Intents下开启Message Content Intent。
  • 确认.env文件中的TOKEN环境变量配置正确。

错误解释

当你在Cog内部设置self.intents时,Bot实例本身并未获得正确的intents配置,导致其内部部分核心方法返回None,而这些方法被用于await表达式中,最终触发TypeError: object NoneType can't be used in 'await' expression错误。将intents移至Bot初始化步骤后,Bot实例才能正常工作,扩展加载也不会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:27:24