我的 Discord 机器人最近在提到时不会回应
My Discord bot recently won't respond when mentioned
这是我第一次使用这个网站,如果格式不合格,我深表歉意。
问题:
我的 Discord 机器人 (javascript) 最近在 @mentioned 时停止响应。没有对代码进行任何更改来导致此问题,不久前它还运行良好。一个朋友的bot也有类似的编程,所以我知道不只是我。
该机器人基本上是一个聊天和回复机器人;你 @mention 它的名字并包含一个触发器,它有一个随机的机会来响应四个响应之一。但是,发生了一些事情,它似乎没有注意到它被@mentioned,因此没有回复。
因此,例如,如果我输入“@bot hi!”在不和谐中,机器人会回复以下回复之一:"It's too early for this."、"Mornin'."、"I need coffee."。 “[打哈欠,喃喃问候]”。
我试过直接用它的客户端标识符以及将在 discord 中使用的标识符替换 client.user.toString()
(例如;“@name#0000”、“<@##### ###>") 但那些也被忽略了。我在代码中的这个区域旁边添加了一个箭头。
我不确定是否有更新导致某些代码过时,但我尝试搜索类似问题但没有成功。
我相对确定问题不在于 processChat(receivedMessage)
函数,因为我可以用备用触发器替换注意到的问题部分,例如:
if (receivedMessage.content.startsWith("@all ")) {
processChat(receivedMessage)
}
然后机器人将发送回复。当被提及时,它似乎根本不想回应;其余代码按预期工作。虽然这是我可以转换成的东西,但我已经在我的服务器上安装了这个机器人将近一年了,还有多个其他服务器成员需要适应这种变化。我宁愿 运行 以他们过去的方式得到东西,也不愿让每个人都养成习惯来补偿。
有办法解决这个问题吗?
这是一个具有相同问题的小示例代码:
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
console.log("Connected as " + client.user.tag);
})
//The color for all of the bot's messages
messageColor = 4611141;
client.on('message', receivedMessage => {
// Prevent bot from responding to its own messages
if (receivedMessage.author == client.user) {
return;
}
//process regular triggers (@ mentions)
//This is where the issue seems to be <--------------------------
if ((receivedMessage.content.includes(client.user.toString()))) {
processChat(receivedMessage);
}
});
//For usage with chat prompts and triggers
function processChat(receivedMessage) {
if ((receivedMessage.content.toLowerCase().includes("hi"))){
var random = randomInt(5, 1) ;
if (random == 1) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "It's too early for this."
}});
} else if (random == 2) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "Mornin'."
}});
} else if (random == 3) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "I need coffee."
}});
} else if (random == 4) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "*[yawn, mumbled greeting]*"
}});
} else {
return;
}
}
}
//Random number generation
function randomInt(max, min) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
client.on('error', console.error);
client.login(token)
从
切换
if ((receivedMessage.content.includes(client.user.toString()))) {
processChat(receivedMessage);
}
至
if (recievedMessage.isMemberMentioned(client.user)) {
processChat(recievedMessage)
}
问题解决了。谢谢 Bauke,提供这些链接。
这是我第一次使用这个网站,如果格式不合格,我深表歉意。
问题: 我的 Discord 机器人 (javascript) 最近在 @mentioned 时停止响应。没有对代码进行任何更改来导致此问题,不久前它还运行良好。一个朋友的bot也有类似的编程,所以我知道不只是我。
该机器人基本上是一个聊天和回复机器人;你 @mention 它的名字并包含一个触发器,它有一个随机的机会来响应四个响应之一。但是,发生了一些事情,它似乎没有注意到它被@mentioned,因此没有回复。
因此,例如,如果我输入“@bot hi!”在不和谐中,机器人会回复以下回复之一:"It's too early for this."、"Mornin'."、"I need coffee."。 “[打哈欠,喃喃问候]”。
我试过直接用它的客户端标识符以及将在 discord 中使用的标识符替换 client.user.toString()
(例如;“@name#0000”、“<@##### ###>") 但那些也被忽略了。我在代码中的这个区域旁边添加了一个箭头。
我不确定是否有更新导致某些代码过时,但我尝试搜索类似问题但没有成功。
我相对确定问题不在于 processChat(receivedMessage)
函数,因为我可以用备用触发器替换注意到的问题部分,例如:
if (receivedMessage.content.startsWith("@all ")) {
processChat(receivedMessage)
}
然后机器人将发送回复。当被提及时,它似乎根本不想回应;其余代码按预期工作。虽然这是我可以转换成的东西,但我已经在我的服务器上安装了这个机器人将近一年了,还有多个其他服务器成员需要适应这种变化。我宁愿 运行 以他们过去的方式得到东西,也不愿让每个人都养成习惯来补偿。
有办法解决这个问题吗?
这是一个具有相同问题的小示例代码:
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
console.log("Connected as " + client.user.tag);
})
//The color for all of the bot's messages
messageColor = 4611141;
client.on('message', receivedMessage => {
// Prevent bot from responding to its own messages
if (receivedMessage.author == client.user) {
return;
}
//process regular triggers (@ mentions)
//This is where the issue seems to be <--------------------------
if ((receivedMessage.content.includes(client.user.toString()))) {
processChat(receivedMessage);
}
});
//For usage with chat prompts and triggers
function processChat(receivedMessage) {
if ((receivedMessage.content.toLowerCase().includes("hi"))){
var random = randomInt(5, 1) ;
if (random == 1) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "It's too early for this."
}});
} else if (random == 2) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "Mornin'."
}});
} else if (random == 3) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "I need coffee."
}});
} else if (random == 4) {
receivedMessage.channel.send({embed: {
color: messageColor,
description: "*[yawn, mumbled greeting]*"
}});
} else {
return;
}
}
}
//Random number generation
function randomInt(max, min) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
client.on('error', console.error);
client.login(token)
从
切换if ((receivedMessage.content.includes(client.user.toString()))) {
processChat(receivedMessage);
}
至
if (recievedMessage.isMemberMentioned(client.user)) {
processChat(recievedMessage)
}
问题解决了。谢谢 Bauke,提供这些链接。