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

Posted

技术标签:

【中文标题】Discord.js 机器人命令不起作用。怎么解决?【英文标题】:Discord.js bot commands not working. How to solve? 【发布时间】:2020-09-20 08:01:13 【问题描述】:

我正在尝试使用 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)]);
  );

【问题讨论】:

你使用的是什么版本的 discord.js? 我正在使用 discord.js 版本 v12.17.0 @Syntle Channel.sendMessage 已弃用,请改用Channel.send。如果您正在观看教程或其他内容,请确保它不是旧的。 【参考方案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;

【讨论】:

非常感谢! 不客气,欢迎来到 SO。如果某个答案解决了您的问题,请使用旁边的勾号接受它,让其他人知道什么有效并且问题已得到回答【参考方案2】:

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

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

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

我做了这些更改,您的机器人运行良好。

【讨论】:

不客气,请在答案旁边打勾,让大家知道答案是正确的

以上是关于Discord.js 机器人命令不起作用。怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js mod bot ban 命令不起作用

Discord.js:GuildMember 的 setMute 命令不起作用?

(discord.js) 检查机器人是不是有权限不起作用

使用 quick.db 的 Discord.js V12 黑名单命令不起作用

Discord Bot 关于命令

Discord.JS 嵌入问题