如何修复机器人在 DM 中询问 id,在 JavaScript 中不和谐机器人
How to fix the bot from asking for id in DM , discord bot in JavaScript
我正在编写一个不和谐的机器人,如果 运行 在服务器内部,该机器人工作正常,但我想添加一些也可以在 DM 内部工作的命令,我有一些代码可以为每个服务器设置前缀以及何时我 运行 机器人并在 DM 中尝试命令它会产生错误,因为它正在寻找 DM 没有的公会 ID,我该如何解决这个问题。
//the code from line index.js:63:30 in the error message
if(message.author.bot) return;
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
if(!prefixes[message.guild.id]){
prefixes[message.guild.id] = {
prefixes: botconfig.prefix
};
}
我已经尝试使用 if 语句,但是当我在 DM 中使用 运行 命令时,该命令仍然不起作用,但它没有产生任何错误。
bot.on("message", async message => {
if (message.channel.type === "dm") {
let prefix = "!";
} else (message.guild) {
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
if(!prefixes[message.guild.id]){
prefixes[message.guild.id] = {
prefixes: botconfig.prefix
};
let prefix = prefixes[message.guild.id].prefixes;
if(!message.content.startsWith(prefix)) return;
let messageArray = message.content.split(" ");
let cmd = messageArray[0];
let args = messageArray.slice(1);
let commandfile = bot.commands.get(cmd.slice(prefix.length));
if(commandfile) commandfile.run(bot,message,args);
}
}
}
下面是我得到的错误,它指向我代码中的第 63 行,这是我在上面发布的代码
at Client.bot.on (C:\Users\Milan\Desktop\episode-18-code\index.js:63:30)
at Client.emit (events.js:198:13)
at MessageCreateHandler.handle (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
at WebSocketPacketManager.handle (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:105:65)
at WebSocketConnection.onPacket (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
at WebSocket.onMessage (C:\Users\Milan\Desktop\episode-18-code\node_modules\ws\lib\event-target.js:120:16)
at WebSocket.emit (events.js:198:13)
at Receiver.receiverOnMessage (C:\Users\Milan\Desktop\episode-18-code\node_modules\ws\lib\websocket.js:789:20)
at Receiver.emit (events.js:198:13)
(node:2912) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:2912) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.```
您可以 运行 根据频道类型进行某些操作。
if (message.channel.type === 'text') {
// Server text channel commands
}
if (message.channel.type === 'dm') {
// DM channel commands
}
所有类型的渠道,根据docs
dm
私信频道
group
群DM频道
text
服务器文本频道
voice
服务器语音频道
category
服务器分类频道
news
服务器新闻频道
store
服务器商店频道
您可以使用
if(message.channel.type === 'dm') {
let prefix = 'bot main prefix'
}
else if(message.channel.type === 'guild') {
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
}
我正在编写一个不和谐的机器人,如果 运行 在服务器内部,该机器人工作正常,但我想添加一些也可以在 DM 内部工作的命令,我有一些代码可以为每个服务器设置前缀以及何时我 运行 机器人并在 DM 中尝试命令它会产生错误,因为它正在寻找 DM 没有的公会 ID,我该如何解决这个问题。
//the code from line index.js:63:30 in the error message
if(message.author.bot) return;
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
if(!prefixes[message.guild.id]){
prefixes[message.guild.id] = {
prefixes: botconfig.prefix
};
}
我已经尝试使用 if 语句,但是当我在 DM 中使用 运行 命令时,该命令仍然不起作用,但它没有产生任何错误。
bot.on("message", async message => {
if (message.channel.type === "dm") {
let prefix = "!";
} else (message.guild) {
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
if(!prefixes[message.guild.id]){
prefixes[message.guild.id] = {
prefixes: botconfig.prefix
};
let prefix = prefixes[message.guild.id].prefixes;
if(!message.content.startsWith(prefix)) return;
let messageArray = message.content.split(" ");
let cmd = messageArray[0];
let args = messageArray.slice(1);
let commandfile = bot.commands.get(cmd.slice(prefix.length));
if(commandfile) commandfile.run(bot,message,args);
}
}
}
下面是我得到的错误,它指向我代码中的第 63 行,这是我在上面发布的代码
at Client.bot.on (C:\Users\Milan\Desktop\episode-18-code\index.js:63:30)
at Client.emit (events.js:198:13)
at MessageCreateHandler.handle (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
at WebSocketPacketManager.handle (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:105:65)
at WebSocketConnection.onPacket (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (C:\Users\Milan\Desktop\episode-18-code\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
at WebSocket.onMessage (C:\Users\Milan\Desktop\episode-18-code\node_modules\ws\lib\event-target.js:120:16)
at WebSocket.emit (events.js:198:13)
at Receiver.receiverOnMessage (C:\Users\Milan\Desktop\episode-18-code\node_modules\ws\lib\websocket.js:789:20)
at Receiver.emit (events.js:198:13)
(node:2912) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:2912) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.```
您可以 运行 根据频道类型进行某些操作。
if (message.channel.type === 'text') {
// Server text channel commands
}
if (message.channel.type === 'dm') {
// DM channel commands
}
所有类型的渠道,根据docs
dm
私信频道group
群DM频道text
服务器文本频道voice
服务器语音频道category
服务器分类频道news
服务器新闻频道store
服务器商店频道
您可以使用
if(message.channel.type === 'dm') {
let prefix = 'bot main prefix'
}
else if(message.channel.type === 'guild') {
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
}