JavaScript TypeError: Cannot read property 'startsWith' of undefined - discord bot
JavaScript TypeError: Cannot read property 'startsWith' of undefined - discord bot
我必须先说我对 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);
}
此块中出现问题:
bot.on('message', (msg) => {
if (msg.content.startsWith(prefix + "on")) {
if (randOn) {
msg.channel.sendMessage("Already running.");
}
每次我尝试在 discord 聊天 (!on) 中命令机器人时,我都会在 Node.js/command 提示符中收到错误 "TypeError: Cannot read property 'startsWith' of undefined"。我已经尝试了各种方法来修复它(从两个 msg.content... 语句中删除 "content" - 没有抱怨,但绝对没有任何反应)但是......老实说我不知道我在做什么。我检查了 Internet 上处理类似问题的所有 post,但没有人能够回答这个问题。我希望这是一个简单的语法 thing/something 没有正确声明......如果你有时间和怜悯我,请帮助。我知道我把自己弄得一团糟,但我拒绝放弃它!
让我知道我可以提供哪些其他信息来提供帮助。
如果 msg
对象或其 content
属性 未定义,可能会在其中塞入 if(!msg || !msg.content) return;
之类的东西以摆脱困境。
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.");
}
}
});
您的问题是,您将 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"
});
}
});
我必须先说我对 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);
}
此块中出现问题:
bot.on('message', (msg) => {
if (msg.content.startsWith(prefix + "on")) {
if (randOn) {
msg.channel.sendMessage("Already running.");
}
每次我尝试在 discord 聊天 (!on) 中命令机器人时,我都会在 Node.js/command 提示符中收到错误 "TypeError: Cannot read property 'startsWith' of undefined"。我已经尝试了各种方法来修复它(从两个 msg.content... 语句中删除 "content" - 没有抱怨,但绝对没有任何反应)但是......老实说我不知道我在做什么。我检查了 Internet 上处理类似问题的所有 post,但没有人能够回答这个问题。我希望这是一个简单的语法 thing/something 没有正确声明......如果你有时间和怜悯我,请帮助。我知道我把自己弄得一团糟,但我拒绝放弃它!
让我知道我可以提供哪些其他信息来提供帮助。
如果 msg
对象或其 content
属性 未定义,可能会在其中塞入 if(!msg || !msg.content) return;
之类的东西以摆脱困境。
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.");
}
}
});
您的问题是,您将 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"
});
}
});