从不和谐的漫游器中搜索图像

时间:2019-06-10 15:07:59

标签: node.js discord.js google-image-search

我正在使用google-images和image-search-google npm软件包,但是该软件包的“使用”部分的结果为空或“错误:无法发送空消息”,我真的很困惑

我完全从页面上尝试过,但是结果还是一样,我发现了一个相似的教程,但是现在我还是很困惑

const {RichEmbed, Attachment} = require('discord.js')
const GoogleImage = require('image-search-google')
const {saveGoogle, google_api} = require('../config.json')
const google = new GoogleImage(saveGoogle, google_api);

module.exports.run = async(bot, message, args) => {
        google.search("John Cena").then(result => {
          if(!result) return console.log('FAILED');
          console.log(result)

          const attachment = new Attachment(result.url);
          message.channel.send(attachment);

        }).catch(e => console.log(e))
};

(node:12184) UnhandledPromiseRejectionWarning: TypeError: The resource must be a string or Buffer.
    at ClientDataResolver.resolveFile (D:\Workspace\DiscordBot\node_modules\discord.js\src\client\ClientDataResolver.js:278:27)
    at Promise.all.options.files.map.file (D:\Workspace\DiscordBot\node_modules\discord.js\src\structures\interfaces\TextBasedChannel.js:173:30)
    at Array.map (<anonymous>)
    at TextChannel.send (D:\Workspace\DiscordBot\node_modules\discord.js\src\structures\interfaces\TextBasedChannel.js:172:40)
    at google.search.then.result (D:\Workspace\DiscordBot\commands\image.js:13:27)
    at process._tickCallback (internal/process/next_tick.js:68:7)

这是我收到的“无法发送空消息”错误的结果

1 个答案:

答案 0 :(得分:0)

您当前的代码有两个主要问题:

  1. google.search(...)应该返回(承诺的)对象数组。
  2. 必须通过Discord.js中的附件发送图像。

要解决这些问题,可以使用以下修改的代码:

const { Attachment } = require('discord.js');

module.exports.run = async (bot, message, args) => {
  try {
    const [result] = await google.search('John Cena', { page: 1 });

    if (!result) return await message.channel.send(':x: No images found!');

    const attachment = new Attachment(result.url);
    await message.channel.send(attachment);
  } catch(err) {
    console.error(err);
  }
}; // This semicolon isn't a mistake; you're assigning a value to a property.

这是它起作用的原因:

  • [result]destructuring语法的一部分。此行将result声明为搜索返回的数组的第一个元素。这解决了result是对象数组的问题。
  • attachment是一种不和谐Attachment,可以在邮件中正确发送。构造函数的第一个参数是图像的URL /路径。为此,我们可以使用图像搜索中对象的url属性。第二个参数是我在Discord中显示的文件名。由于在这种情况下由于没有必要,我将其省略。
  • 在邮件中发送附件,然后出现图像。瞧!

其他资源: