javascript TypeError: Невозможно прочитать свойство'arsWith 'из неопределенного - дискорд бот - PullRequest
0 голосов
/ 16 ноября 2018

Я должен начать этот вопрос с того, что у меня очень мало знаний о javascript (я практикуюсь на Java) и просто хотел создать (несколько) простой бот Discord, который бы произносил сообщения в случайные моменты времени. Я получил два фрагмента кода из различных учебных пособий, и сейчас у меня есть это:

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);
}

Проблема возникает в этом блоке:

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

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

Каждый раз, когда я пытаюсь командовать ботом в своем чате разногласий (! On), я получаю сообщение об ошибке «Ошибка ввода: Не удается прочитать свойство 'setsWith of undefined» в командной строке Node.js /. Я пробовал разные вещи, чтобы это исправить (удаление «контента» из обоих выражений msg.content ... - никаких жалоб, но абсолютно ничего не происходит), но ... я, честно говоря, понятия не имею, что я делаю. Я проверил каждый пост в интернете, посвященный подобным вещам, и ничего не смог ответить на этот вопрос. Я надеюсь, что это простая синтаксическая вещь / что-то, что не объявлено должным образом ... если у вас есть время и жалость ко мне, пожалуйста, помогите. Я знаю, что попал в беспорядок, но я отказываюсь от него отказываться! Дайте мне знать, какую другую информацию я могу предоставить, чтобы помочь.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Ваша проблема в том, что вы смешиваете discord.js с discord.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"
        });
    }
});
0 голосов
/ 16 ноября 2018

Возможно, заклините что-то вроде if(!msg || !msg.content) return;, чтобы выручить, если объект msg или его свойство content не определены.

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

  if(!msg || !msg.content) return;

  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.");
        }
  }


});
...