我正在为服务器制作机器人,并且之前已经做过,但是现在我收到一条错误消息,提示未定义receiveMessage。
这是代码,它将检查消息是否以“>”开头并检查它是什么命令(我知道switch语句更有效。):
client.on('message', (receivedMessage) => {
if (receivedMessage.content.startsWith(">")) {
processCommand(receivedMessage)
}
})
function processCommand(receivedMessage) {
let fullCommand = receivedMessage.content.substr(1)
let splitCommand = fullCommand.split(" ")
let primaryCommand = splitCommand[0]
let arguments = splitCommand.slice(1)
if (primaryCommand == "help") {
helpCommand(arguments, primaryCommand)
} else if (primaryCommand == "giveRole") {
gvRoleCommand(arguments, primaryCommand)
} else if (primaryCommand == "duck") {
duckCommand(arguments, primaryCommand)
} else if (primaryCommand == "kick") {
kickCommand(arguments, primaryCommand)
} else if (primaryCommand == "ban") {
banCommand(arguments, primaryCommand)
} else if (primaryCommand == "listCommandForMyRole") {
listCommandForRole(arguments, primaryCommand)
} else if (primaryCommand == "stoppedLookingForTeam") {
stopLookingForTeamCommand(arguments, primaryCommand)
} else if (primaryCommand == "poke") {
pokeCommand(arguments, primaryCommand)
} else if (primaryCommand == "stop") {
stopCommand(arguments, primaryCommand)
} else if (primaryCommand == "ping") {
pongCommand(arguments, primaryCommand)
} else {
receivedMessage.channel.send("Error: Invalid command!")
}
我为以前的机器人使用了相同的代码,并且运行良好,我尝试使用相同的节点模块,因为在制造机器人时无法安装它们。当我想返回消息时(或机器人将消息发送时),将发生错误。
return receivedMessage.channel.send("Pong!");
谢谢!
编辑:这是完整的代码:
const Discord = require("discord.js");
const client = new Discord.Client();
client.on('ready', () => {
console.log("Connected as " + client.user.tag)
client.user.setActivity("jams", {type: "PLAYING"})
client.guilds.forEach((guild) => {
console.log(guild.name)
guild.channels.forEach((channel) => {
console.log(' - ${channel.name} ${channel.type} ${channel.id}')
})
})
args = ["Is", "this", "the", "real", "life?"]
})
/*client.on('message', (receivedMessage) => {
if (receivedMessage.author == client.user) {
return
}
if (receivedMessage.content.includes(client.user.toString())) {
receivedMessage.message.send("Why you ping me " + receivedMessage.author.toString())
}
if (receivedMessage.content.startsWith(">")) {
processCommand(receivedMessage)
}
})*/
client.on('message', receivedMessage => {
if (receivedMessage.content.startsWith(">")) {
processCommand(receivedMessage)
}
})
/*client.on('guildMemberAdd', member => {
const channel = member.guild.channels.find(channel => channel.name === "welcome");
if (!channel) return;
channel.send("Welcome $(member), we are hoping that you will fit in. Please read our rules if you want to stay in this server.");
if (!member.roles.find(r => r.name === "Admin")) {
member.addRole("Newcomer");
}
})*/
function processCommand(receivedMessage) {
let fullCommand = receivedMessage.content.substr(1)
let splitCommand = fullCommand.split(" ")
let primaryCommand = splitCommand[0]
let arguments = splitCommand.slice(1)
if (primaryCommand == "help") {
helpCommand(arguments, primaryCommand)
} else if (primaryCommand == "giveRole") {
gvRoleCommand(arguments, primaryCommand)
} else if (primaryCommand == "duck") {
duckCommand(arguments, primaryCommand)
} else if (primaryCommand == "kick") {
kickCommand(arguments, primaryCommand)
} else if (primaryCommand == "ban") {
banCommand(arguments, primaryCommand)
} else if (primaryCommand == "listCommandForMyRole") {
listCommandForRole(arguments, primaryCommand)
} else if (primaryCommand == "stoppedLookingForTeam") {
stopLookingForTeamCommand(arguments, primaryCommand)
} else if (primaryCommand == "poke") {
pokeCommand(arguments, primaryCommand)
} else if (primaryCommand == "stop") {
stopCommand(arguments, primaryCommand)
} else if (primaryCommand == "ping") {
pongCommand(arguments, primaryCommand)
} else {
receivedMessage.channel.send("Error: Invalid command!")
}
/*switch(primaryCommand) {
case "help":
helpCommand(arguments, primaryCommand);
break;
case "giveRole":
gvRoleCommand(arguments, primaryCommand);
break;
case "duck":
duckCommand(arguments, primaryCommand);
break;
case "kick":
kickCommand(arguments, primaryCommand);
break;
case "ban":
banCommand(arguments, primaryCommand);
break;
case "listCommandsForMyRole":
listCommandForRole(arguments, primaryCommand);
break;
case "stoppedLookingForTeam":
stopLookingForTeamCommand(arguments, primaryCommand);
break;
case "poke":
pokeCommand(arguments, primaryCommand);
break;
case "stop":
stopCommand(arguments, primaryCommand);
break;
case "pong":
pongCommand(arguments, primaryCommand);
break;
}*/
}
function stopCommand(arguments, primaryCommand) {
if (!receivedMessage.member.guild.me.hasPerimission("ADMINISTRATOR")) {
return receivedMessage.channel.send("Error: Only the administrator of this server and the creator of the bot has that permission!");
}
if (!receivedMessage.member.guild.me.hasPerimission("ADMINISTRATOR")) {
client.destroy();
}
}
function gvRoleCommand(arguments, primaryCommand) {
if (!receivedMessage.toString()) {
return receivedMessage.channel.send("Please put members after the give role command \n ps. put a space when you are mentioning the user");
}
if (!receivedMessage.member.roles.find(r => r.name === "Admin")) {
return receivedMessage.channel.send("Error: You don't have permissions for that command. Type >listCommandsForMyRole to see which commands are available for your role.");
}
}
/*function listCommandForRole(arguments, primaryCommand) {
if (receivedMessage.member.roles.find(r => r.name === "Admin")) {
return receivedMessage.channel.send("Available Commands: help \n giveRole \n duck \n kick \n ban \ listCommandsForMyRole \n poke \n stop");
} else if (receivedMessage.member.roles.find(r => r.name === "Looking for Team")) {
return receivedMessage.channel.send("Available Commands: help \n duck \n listCommandForMyRole \n poke \n stoppedLookingForTeam");
} //else if (receivedMessage.member.roles.find(r => r.name === ""))
}
*/
function pongCommand(arguments, primaryCommand) {
return receivedMessage.channel.send("Pong!");
}
client.login(NOT REVEALING MY TOKEN!)
答案 0 :(得分:0)
您可以尝试一下此代码吗?如果它不起作用,请给我您的错误代码(截图/完整粘贴粘贴)
client.on("message", async message => {
if (message.author.bot) return;
if (message.content && message.content.startsWith('>')) {
processCommand(message);
}
})
function processCommand(message) {
if (!message) return;
let fullCommand = receivedMessage.content.substr(1)
let splitCommand = fullCommand.split(" ")
let primaryCommand = splitCommand[0]
let arguments = splitCommand.slice(1)
switch (primaryCommand) {
case 'help':
helpCommand(arguments, message)
break;
case 'giveRole':
gvRoleCommand(arguments, message)
break;
case 'duck':
duckCommand(arguments, message)
break;
case 'kick':
kickCommand(arguments, message)
break;
case 'ban':
banCommand(arguments, message)
break;
case 'listCommandForMyRole':
listCommandForRole(arguments, message)
break;
case 'stoppedLookingForTeam':
stopLookingForTeamCommand(arguments, message)
break;
case 'poke':
pokeCommand(arguments, message)
break;
case 'stop':
stopCommand(arguments, message)
break;
case 'ping':
pongCommand(arguments, message)
break;
default:
message.channel.send("Error: Invalid command!")
break;
}
}
function pongCommand(arguments, message) {
return message.channel.send('Pong!')
}
我认为出错的是,当您执行函数时,没有传递“ message”变量。试试看,看看是否有效
GL