Discord机器人报错:'Client'对象无'command'属性,求解决
修复AttributeError: 'Client' object has no attribute 'command'错误
错误原因
你当前用discord.Client()创建机器人实例,但Client类仅提供基础Discord交互能力,不支持@bot.command()这种前缀命令装饰器——这个功能是discord.ext.commands.Bot类专属的。
具体修复步骤
正确实例化Bot类
把原来创建bot的代码(比如bot = discord.Client())替换成:from discord.ext import commands import discord # 启用必要权限意图,必须开启message_content才能读取用户命令 intents = discord.Intents.default() intents.message_content = True # 定义命令前缀为!,和你需要的!give对应 bot = commands.Bot(command_prefix="!", intents=intents)修正上下文类型
你用了SlashContext(适用于斜杠命令),但需求是前缀命令!give,所以把函数参数里的ctx: SlashContext改成commands.Context,同时确保已导入commands模块。补充缺失的依赖导入
代码用到random和谷歌API相关类,要在顶部补充导入:import random from googleapiclient.discovery import build from googleapiclient.errors import HttpError完善命令功能
原代码只发送文字未附视频链接,需补上;同时把不友好的提示词改成礼貌表述。
修改后的完整代码
import discord from discord.ext import commands import random from googleapiclient.discovery import build from googleapiclient.errors import HttpError # 配置参数 YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" MY_DEV_KEY = "你的API密钥" DISCORD_BOT_TOKEN = "你的机器人令牌" # 初始化Bot,开启必要意图 intents = discord.Intents.default() intents.message_content = True bot = commands.Bot(command_prefix="!", intents=intents) @bot.command(name="give", description="根据关键词获取随机YouTube视频") async def give_youtube_video(ctx: commands.Context, youtube_prompt: str): try: youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=MY_DEV_KEY) search_response = youtube.search().list( q=youtube_prompt, type="video", part="id", maxResults=50 ).execute() videos = search_response.get("items", []) if not videos: await ctx.send("没有找到匹配的视频,请换个关键词试试。") return video = random.choice(videos) video_id = video["id"]["videoId"] video_url = f"https://www.youtube.com/watch?v={video_id}" await ctx.send(f"这是为你找到的视频:{video_url}") except HttpError as e: await ctx.send("获取视频时出错了,请稍后再试。") # 启动机器人 bot.run(DISCORD_BOT_TOKEN)
额外注意事项
- 要在Discord开发者门户里给机器人开启
Message Content Intent权限,否则无法读取用户发送的命令内容。 - 确保谷歌YouTube Data API密钥已启用,并且有足够的调用额度。
内容的提问来源于stack exchange,提问作者martinhafizi
相关产品推荐
相关产品推荐

