JavaScript 类型错误 : Cannot read property 'startsWith' of undefined - discord bot

标签 javascript node.js bots discord.io

我必须先说我对 javascript 知之甚少(我在 Java 中练习过),只是想制作一个(有点)简单的 Discord 机器人,它会随机说出消息。我将不同教程中的 2 段代码组合在一起,目前得到的是:

var Discord = require('discord.io');
var logger = require('winston');
var auth = require('./auth.json');
//random bot code
var randomMessage;
var randOn = false;
var responseArray = [ //add more messages here
  "Ayy, lmao!",
  "Say what?",
  "roflmaotntpmp"
];

var prefix = "!";
var timer = [5,10]; //set min and max in seconds for random messages


// Configure logger settings
logger.remove(logger.transports.Console);
logger.add(new logger.transports.Console, {
    colorize: true
});
logger.level = 'debug';
// Initialize Discord Bot
var bot = new Discord.Client({
   token: auth.token,
   autorun: true
});
bot.on('ready', function (evt) {
    logger.info('Connected');
    logger.info('Logged in as: ');
    logger.info(bot.username + ' - (' + bot.id + ')');
});


bot.on('message', (msg) => {

  if (msg.content.startsWith(prefix + "on")) {
        if (randOn) {
            msg.channel.sendMessage("Already running.");
        }
        else {
            msg.channel.sendMessage("Random message started.")
        randomMessage = setTimeout(function() {
                randMsg(msg.channel);
            }, 1000*timer[0]);
        }
  }
  else if (msg.content.startsWith(prefix + "off")) {
        if (randOn) {
            clearTimeout(randomMessage);
            msg.channel.sendMessage("Random message disabled.");
        }
        else {
            msg.channel.sendMessage("Not running.");
        }
  }


});



function randomIntFromInterval(min, max) {
  return Math.floor(Math.random()*(max-min+1)+min);
}

function randMsg(msgChan) {
    console.log("callback");
    var interval = 1000*randomIntFromInterval(timer[0],timer[1]);
  var rand = randomIntFromInterval(0,responseArray.length-1);
  if(responseArray[rand]) {
    msgChan.sendMessage(responseArray[rand]);
  }
    randomMessage = setTimeout(function() {
        randMsg(msgChan);
    }, interval);
}

问题发生在这个 block 中:

 bot.on('message', (msg) => {

      if (msg.content.startsWith(prefix + "on")) {
            if (randOn) {
                msg.channel.sendMessage("Already running.");
            }

每次我尝试在不和谐聊天 (!on) 中命令机器人时,我都会在 Node.js/命令提示符中收到错误“TypeError: 无法读取未定义的属性 'startsWith'”。我已经尝试了各种方法来修复它(从 msg.content... 语句中删除“内容” - 没有投诉,但绝对没有任何反应)但是...我真的不知道我在做什么。我检查了互联网上所有涉及类似问题的帖子,但没有任何内容能够回答这个问题。我希望这是一个简单的语法问题/未正确声明的问题...如果您有时间并同情我,请帮助。我知道我已经让自己陷入了困境,但我拒绝放弃!

请告诉我我还可以提供哪些其他信息来提供帮助。

最佳答案

您的问题是,您将 discord.jsdiscord.io 混合使用

discord.js 是面向对象的,而 discord.io 不是,因此在 discord.io 中,您的消息已经是一个字符串!

discord.io 消息事件示例。

bot.on('message', function(user, userID, channelID, message, event) {
    if (message === "ping") {
        bot.sendMessage({
            to: channelID,
            message: "pong"
        });
    }
});

关于JavaScript 类型错误 : Cannot read property 'startsWith' of undefined - discord bot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53330771/

相关文章:

javascript - React中的({})是什么意思?

javascript - JavaScript 中检测字符串是否不是 URL?

javascript - 更改删除/退格键的功能

javascript - 如何在 NodeJS MVC 中使用原型(prototype) - 尝试使用原型(prototype)函数添加模型变量的默认值

javascript - 将 rowdatapacket 转换为数组,如何将 mysql node.js api rowdatapacket 转换为数组,字符串转换为数组

java - 如何使用jwbf上传文件?

javascript - 在动态添加的 anchor 上调用点击事件

javascript - 当 Firestore 中集合中的所有文档被删除时返回所有文档

php - 如何忽略搜索引擎在 PHP 页面上的综合浏览量?

javascript - 不和谐收集器 react 过滤器方式设置最大限制