所以我从昨晚起就试图破解这个问题。我正在使用Discord.js api开发Discord聊天机器人。到目前为止一切都那么好,但我认为每隔几分钟我的机器人在聊天中宣布相关subreddit上的最新帖子会很好。所以现在我已经设法让脚本从reddit json api中提取相关数据,但我的node.js一直返回以下错误:
这是我的代码:
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();
我觉得这是非常明显的事情,但我似乎只是在看它。为什么机器人未定义?
答案 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();应该做的。