Discord消息提取图片代码报错:缺少intents关键字参数
解决Discord机器人初始化缺少intents参数的问题
错误原因
Discord.py 2.0及以上版本强制要求实例化commands.Bot时传入intents参数,这是Discord API的权限机制更新,需要明确声明机器人需要接收的事件权限。
修复步骤
- 导入discord模块
在现有导入代码中添加:
import discord
- 配置并传入intents参数
替换原来的client = commands.Bot(command_prefix='.')为以下代码:
# 创建默认权限实例,开启消息内容读取权限 intents = discord.Intents.default() intents.message_content = True client = commands.Bot(command_prefix='.', intents=intents)
- 在Discord开发者门户开启特权权限
登录Discord开发者门户,找到你的机器人应用,进入「Bot」页面,在「Privileged Gateway Intents」下开启Message Content Intent,否则机器人无法读取消息内容及附件。
完整修复后的代码
from discord.ext import commands import discord import uuid import requests import shutil # 配置intents intents = discord.Intents.default() intents.message_content = True client = commands.Bot(command_prefix='.', intents=intents) def send_discord_message(): url = "https://discord.com/api/v9/channels/1095975130758393868/messages" payload = { 'content': "/generate description:world" } header = { 'authorization': 'token' } requests.post(url, data=payload, headers=header) @client.event async def on_ready(): print("Bot is ready") @client.command() async def save(ctx): try: url = ctx.message.attachments[0].url except IndexError: print("Error: No attachments") await ctx.send("No attachments detected!") else: if url.startswith("https://cdn.discordapp.com"): r = requests.get(url, stream=True) imageName = str(uuid.uuid4()) + '.jpg' with open(imageName, 'wb') as out_file: print('Saving image: ' + imageName) shutil.copyfileobj(r.raw, out_file) client.run('-')
额外优化:将原代码中url[0:26] == "https://cdn.discordapp.com"替换为url.startswith("https://cdn.discordapp.com"),写法更简洁可靠。
内容的提问来源于stack exchange,提问作者alessio venturini
相关产品推荐
相关产品推荐

