Bot 在私信中没有正确回复
Bot not replying correctly in a private message
因此,此代码块是玩家 A(挑战者)向玩家 B(目标)发起游戏挑战的代码的一部分。机器人向玩家 B 发送一条私人消息,告诉他们他们受到了挑战,并询问他们是否接受或拒绝挑战。
下面的代码似乎没有响应玩家 B 的回复。
if (message.channel.id === '541736552582086656') return target.send("Do you accept the challenge? Please reply with 'accept' or 'deny'.")
.then((newmsg) => {
newmsg.channel.awaitMessages(response => response.content, {
max: 1,
time: 150000,
errors: ['time'],
}).then((collected) => {
if (collected === 'accept') {
newmsg.channel.send("You have ***accepted*** the challenge. Please wait while your battlefield is made...");
} else if (collected === 'deny') {
newmsg.channel.send("You have ***denied*** the challenge.")
}
}).catch(() => {
newmsg.channel.send('Please Accept or Deny the challenge.');
});
});
}
在此代码块之前,我设置了将消息记录到服务器上的通道,向挑战者和目标发送挑战信息。机器人通过pm成功联系到他们被挑战的目标,但是回复(即使回复"accept"仍然会认为它被拒绝了。
感谢您提供的所有帮助!
扩展 @Stock Overflaw 的回答,awaitMessages
将始终 return 一个 collection 获取的消息,这意味着 collected === 'accepted'
将不起作用。您正在检查 collection object 是否与字符串相同。
您需要从 collection 中获取第一条(并且仅在您的情况下)消息,并根据字符串检查其内容。您将在下方找到您的 .then(...)
声明 re-written。试一试,让我知道结果是什么。
P.s。您的 collection 过滤器不会像您预期的那样工作。过滤器仅检查是否将消息添加到 collection 中。由于你的 'filter' 是 response => response.content
,它只会检查 response.content
是否为空,null
或 undefined
.then((collected) => {
// Grabs the first (and only) message from the collection.
const reply = collected.first();
if (reply.content === 'accept'){
reply.channel.send("You have ***accepted*** the challenge. Please wait while your battlefield is made...");
} else if (reply.content === 'deny') {
reply.channel.send("You have ***denied*** the challenge.")
} else {
reply.channel.send("Your response wasn't valid.");
/*
* Code here to handle invalid responses
*/
}
})
因此,此代码块是玩家 A(挑战者)向玩家 B(目标)发起游戏挑战的代码的一部分。机器人向玩家 B 发送一条私人消息,告诉他们他们受到了挑战,并询问他们是否接受或拒绝挑战。
下面的代码似乎没有响应玩家 B 的回复。
if (message.channel.id === '541736552582086656') return target.send("Do you accept the challenge? Please reply with 'accept' or 'deny'.")
.then((newmsg) => {
newmsg.channel.awaitMessages(response => response.content, {
max: 1,
time: 150000,
errors: ['time'],
}).then((collected) => {
if (collected === 'accept') {
newmsg.channel.send("You have ***accepted*** the challenge. Please wait while your battlefield is made...");
} else if (collected === 'deny') {
newmsg.channel.send("You have ***denied*** the challenge.")
}
}).catch(() => {
newmsg.channel.send('Please Accept or Deny the challenge.');
});
});
}
在此代码块之前,我设置了将消息记录到服务器上的通道,向挑战者和目标发送挑战信息。机器人通过pm成功联系到他们被挑战的目标,但是回复(即使回复"accept"仍然会认为它被拒绝了。
感谢您提供的所有帮助!
扩展 @Stock Overflaw 的回答,awaitMessages
将始终 return 一个 collection 获取的消息,这意味着 collected === 'accepted'
将不起作用。您正在检查 collection object 是否与字符串相同。
您需要从 collection 中获取第一条(并且仅在您的情况下)消息,并根据字符串检查其内容。您将在下方找到您的 .then(...)
声明 re-written。试一试,让我知道结果是什么。
P.s。您的 collection 过滤器不会像您预期的那样工作。过滤器仅检查是否将消息添加到 collection 中。由于你的 'filter' 是 response => response.content
,它只会检查 response.content
是否为空,null
或 undefined
.then((collected) => {
// Grabs the first (and only) message from the collection.
const reply = collected.first();
if (reply.content === 'accept'){
reply.channel.send("You have ***accepted*** the challenge. Please wait while your battlefield is made...");
} else if (reply.content === 'deny') {
reply.channel.send("You have ***denied*** the challenge.")
} else {
reply.channel.send("Your response wasn't valid.");
/*
* Code here to handle invalid responses
*/
}
})