首页 > 解决方案 > 如何让不和谐机器人将您通过 dm 发送给它的图片发送到某个频道

问题描述

所以我一直在想这段代码。其背后的逻辑是“您通过 DM(直接消息)向机器人发送屏幕截图,并且机器人应该拍摄该照片并将其放入某个服务器中存在的某个频道(可能带有 id)。问题开始于我告诉它发送文件,它只是停止而控制台上没有发生错误,有时它显示答案“你成功发送了屏幕截图”有时它没有。我很清楚意识到我有问题我猜是发送图片而不是纯文本?

在这一点上,我有点卡住了没有多少选择。(顺便说一句,这段代码附加在一个“事件”上)

client.on("message", message => {
message.author.send("Please send a screenshot");
const collector = new Discord.MessageCollector(message.channel, m => m.author.id === message.author.id, {});
console.log(collector)
collector.on('collect', message => {
    if (message.attachments.size > 0) {

        message.channel.send("You successfully sent a screenshot")
        console.log(`Collected ${message.content}`)
        client.channels.get(`628607857662623745`).send(message.content);

    } else if (message.attachments.size < 0) {
        message.channel.send("you did not");

    }   

})

该机器人只需要将您通过 DM 发送的图片发送到不和谐的某个频道。

标签: discord.js

解决方案


1.您在错误的频道上收集消息

Discord.MessageCollector(message.channel, m => m.author.id === message.author.id, {});将收集message.channel,这是发送初始“触发”消息的通道,而不是 DMChannel。要在 DMChannel 上收集,您需要执行以下操作:

if (initial_trigger) {
  message.author.createDM().then(dmc => {
    const collector = new Discord.MessageCollector(
      dmc,
      m => m.author.id === message.author.id,
      {}
    );
    [...]
  });
}

2. 你发回了错误的内容

client.channels.get(`628607857662623745`).send(message.content);只会发送message.content()which,当您发送没有任何评论的文件时,它是空的。要发回文件而不是内容,您需要.sendFile()像这样使用:

console.log(`Collected ${message.attachments.size} screenshots`);
    client.channels
                .get(`628607857662623745`)
                .send({files:[message.attachments.first().url]});

推荐阅读