Discord.js机器人程序命令不起作用。怎么解决?

时间:2020-06-01 22:36:58

标签: bots discord discord.js

我正在尝试使用discord.js创建一个机器人。它显示没有错误,并且可以联机并且完美运行。但是,当我尝试运行命令时,该机器人什么也没说,甚至没有错误消息。我的代码在这里:

const discord = require('discord.js');
var cheerio = require('cheerio');
var request = require('request');
const bot = new discord.Client();
const PREFIX = "//";

bot.on('ready', () => {
  console.log('CherryBot is online!');

})

bot.on("message", (message) => {
  if (message.author.equals(bot.user)) return;

  if (!message.content.startsWith(PREFIX)) return;

  var args = message.content.substring(PREFIX.length).split("");

  switch (args[0].toLowerCase()) {
    case "ping":

      message.channel.sendMessage("Pong!")
      break;

    case "cherry":
      image(message);

      break;
  }
});

function image(message) {

  var options = {
    url: "http://results.dogpile.com/serp?qc=images&q=" + "cherry fruit"
    , method: "GET",
    headers: {
      "Accept": "text/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"));

    console.log(urls);

    if (!urls.length) {

      return;
    }

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

2 个答案:

答案 0 :(得分:1)

首先,您错误地定义了args,您需要split()使用空格,slice() prefixtrim()空格是这样的:

const args = message.content
          .slice(PREFIX.length) // gets rid of the prefix
          .trim() // removes whitespaces
          .split(/ +/g) // splits using spaces

然后,因为已弃用,您需要使用send()而不是sendMessage()

case "ping":
    message.channel.send("Pong!")
break;

答案 1 :(得分:0)

您的错误很简单,在var args = ...中,您使用split分割了每个字符。要工作,您只需要分割空格。只需在split函数中添加一个空格即可。

var args = message.content.substring(PREFIX.length).split(" ");

此外,message.channel.sendMessage不再起作用,您需要改为使用message.channel.send

我进行了更改,您的漫游器运行完美。