Discord.js中如何实现消息与图片的跨频道转发?
实现跨频道转发文字与图片消息
嘿,我来帮你搞定这个图片转发的问题~你之前的代码只能处理纯文字,是因为没考虑到Discord里图片通常是以附件或者嵌入内容的形式存在的,不是单纯的文本内容。下面给你具体的实现思路和代码:
1. 核心逻辑拆解
你原来的message.channel.send(message.content)只传了文本,但用户发的图片要么是本地上传的附件,要么是外链图片被Discord自动解析成的嵌入消息。所以转发时得把这几部分内容都带上才行。
2. 完整代码示例
首先你得先拿到要转发到的目标频道(比如用频道ID获取),然后这样写:
// 先获取目标频道,把YOUR_TARGET_CHANNEL_ID换成你实际的频道ID const targetChannel = client.channels.cache.get('YOUR_TARGET_CHANNEL_ID'); if (!targetChannel) { console.log('找不到目标频道哦'); return; } // 执行转发,同时传递文本、附件和嵌入内容 targetChannel.send({ content: message.content, // 保留原消息的文字内容 files: message.attachments.map(att => att.url), // 提取所有附件(图片、文件都能处理) embeds: message.embeds // 带上原消息里的嵌入内容(比如外链图片的预览) });
3. 几个小细节要注意
- 权限问题:得确保你的机器人在源频道和目标频道都有「发送消息」和「上传文件」的权限,不然转发会失败。
- 多种图片场景:不管是用户直接上传的本地图片(会变成附件),还是发的图片链接(Discord自动生成嵌入),这段代码都能处理到。
- 过滤图片(可选):如果你只想转发图片,不想转其他文件,可以加个判断过滤文件类型,比如:
files: message.attachments.filter(att => att.contentType.startsWith('image/')).map(att => att.url)
这样改完之后,不管是纯文字消息还是带图片的消息,都能完整转发到目标频道啦~
内容的提问来源于stack exchange,提问作者Shinto




