如何将用户消息存储为变量?

时间:2020-08-27 05:45:34

标签: node.js discord.js

我有一个非常简单的机器人,正在为我和我朋友的服务器工作。我从我遵循的指南中设置了一个简单的网页抓取功能,以响应前缀命令(!)来从狗形图像搜索中提取gif。

我一直在尝试编辑代码以允许前缀!后接任何术语,以返回他们使用的该术语的gif,而不是专门为每个命令编写代码。

我想出是否可以用变量'test'替换字符串!<variable>到我已经拥有的代码中,但是我似乎不知道。任何指导将不胜感激!

bot.on('message', message => {
  let args = message.content.substring(PREFIX.length).split(" ");

  switch (args[0]) {
    case 'test':
      test(message);
      break;
  }
});

function test(message) {
  var options = {
    url: "https://results.dogpile.com/serp?qc=images&q=" + "test gif",
    method: "GET",
    headers: {
      "Accept": "test/html",
      "User-Agent": "Chrome"
    }
  };

  request(options, function(error, response, responseBody) {
    if (error) {
      return;
    }
    $ = cheerio.load(responseBody);
    var links = $(".image a.link");
    var urls = new Array(links.length).fill(0).map((v, i) => links.eq(i).attr("href"));

    if (!urls.length) {
      return;
    }
    // Send result
    message.channel.send(urls[Math.floor(Math.random() * urls.length)]);
  });

}

2 个答案:

答案 0 :(得分:1)

您可以仅使用消息的内容(不包括前缀)作为查询的字符串。
请注意,如果您不使用命令,则只需运行消息处理程序中的所有内容即可。

bot.on('message', message => {
  // Always ignore unwanted messages
  if (message.author.bot || !message.startsWith(PREFIX)) return;

  let query = message.content.slice(PREFIX.length).trim()

  options = {
    // Add the query string like this:
    url : "https://results.dogpile.com/serp?qc=images&q=" + query + "gif",
    ...
  }

  // You can then use your existing code
  request(...)
})

答案 1 :(得分:0)

您可以将其用作命令名称,而不是替换'test'字符串,然后将args变量用于搜索项,例如:!test <search term>。为此,您只需要定义args[0]是命令名称,然后将其余参数连同消息一起传递给test函数

let args = message.content.slice(PREFIX.length).trim().split(" ");
let commandName = args.shift().toLowerCase(); // Use args[0] as the command name

switch(commandName) {
   case 'test':
     test(message, args);
    break;
}

function test(message, args) {
    let [...term] = args;

    var options = {
        url : "https://results.dogpile.com/serp?qc=images&q=" + term.join(' '),
        method: "GET",
        headers: {
            "Accept": "test/html",
            "User-Agent": "Chrome"
        }
    };

    request(options, function(error, response, responseBody) {
        if (error) {
           return;
       }
       $ = cheerio.load(responseBody);
       var links = $(".image a.link");
       var urls = new Array(links.length).fill(0).map((v, i) => links.eq(i).attr("href"));
       
       if (!urls.length) {
           return;
       }
       // Send result
       message.channel.send(urls[Math.floor(Math.random() * urls.length)]);
   });
}