为什么机器人未定义?

时间:2016-06-19 12:44:21

标签: javascript node.js discord.js

所以我从昨晚起就试图破解这个问题。我正在使用Discord.js api开发Discord聊天机器人。到目前为止一切都那么好,但我认为每隔几分钟我的机器人在聊天中宣布相关subreddit上的最新帖子会很好。所以现在我已经设法让脚本从reddit json api中提取相关数据,但我的node.js一直返回以下错误:

error

这是我的代码:

var Discord = require("discord.js");
var bot = new Discord.Client();


var redditSubModule = "pics";

function getRedditPosts(bot, msg) {
  var url = "http://www.reddit.com/r/" + redditSubModule + "/new/.json?limit=2";
  var request = http.get(url, function(response) {
  var json = '';
    response.on('data', function(chunk) {
      json += chunk;
    });

    response.on('end', function() {
      var redditResponse = JSON.parse(json);
      redditResponse.data.children.forEach(function(child) {
      console.log('https://www.reddit.com' + child.data.permalink);
      bot.sendMessage(msg.channel,"https://www.reddit.com" + child.data.permalink);
      });
    })
  });
  request.on('error', function(err) {
    console.log(err);
  });
 setTimeout(getRedditPosts, 60000);
}
getRedditPosts();

我觉得这是非常明显的事情,但我似乎只是在看它。为什么机器人未定义?

2 个答案:

答案 0 :(得分:0)

您似乎期望使用属性getRedditPosts调用(bot, msg),但您调用它时没有属性getRedditPosts();

所以基本上你将undefined作为bot变量传递。 undefined没有任何功能,您正试图致电sendMessage

这就是Cannot read property 'sendMessage' of undefined

的含义

答案 1 :(得分:0)

当用户运行命令时,您还需要调用函数getRedditPosts()。类似的东西:

bot.on('message', (msg)=>{
 if(message.content.toLowerCase().startsWith("!redditcommand")) {
  getRedditPosts(msg.client, msg)
 }
}

在代码的末尾代替getRedditPosts();应该做的。