我正在使用 discord.js 编写一个不和谐机器人,并且我最近添加了一个 //translate 命令,该命令利用 Google Translate API 在 Google Translate 支持的所有语言之间进行翻译。我想添加使用反应快速将翻译重新翻译回英语的功能,并且我希望机器人检查是否有 1 人对帖子做出了反应并提供了反应,如果有,则将翻译重新翻译回来到英语。
我真的很接近,但我遇到了一个问题,我无法让机器人检查它是否自己发送了反应,所以它会自动重新翻译回英语,因为它正在检测自己的反应。我希望它只在 A PERSON 做出反应时重新翻译,并且只重新翻译一次。
我对 discord.js 的这个领域还不是很熟悉,所以我真的不知道该怎么做。
这是代码:
if (msg.content.startsWith(`${prefix}translate`) || msg.content.startsWith(`${prefix}t`)) {
const text = args.slice(1).join(` `);
if (!text) return msg.channel.send(`Nothing to translate provided! Languages codes are at https://cloud.google.com/translate/docs/languages !\n Command syntax: \`${prefix}translate\` or \`${prefix}t\` [text] [language code]`);
const text1 = text.substring(0, text.length - 2)
const target = text.substring(text.length - 2, text.length) || languages
translate
.translate(text1, target)
.then(results => {
const translation = results[0];
msg.channel.send(`Translation: ${translation}`).then(sentText => {
sentText.react(``);
const filter = (reaction, user) => {
return [''].includes(reaction.emoji.name);
};
sentText.awaitReactions(filter, { max: 2, time: 5000, errors: ['time'] })
.then(collected => {
const reaction = collected.first();
if (reaction.emoji.name === '' && sentText.react.me === false) {
const target = `en`
translate
.translate(text1, target)
.then(results => {
const translation = results[0];
msg.channel.send(`Translation: ${translation}`);
})
.catch(err => {
console.log(err);
})
}
})
})
})
//code for command continues below this line, but it is irrelevant to what I'm trying to achieve
预期结果:如果用户对提供的反应做出反应,机器人将重新翻译回英语,并且只翻译一次。
实际结果:机器人什么都不做,或者,如果我删除&& sentText.react.me === false
,机器人会重新翻译回英语,因为它正在检测自己的反应。
任何帮助,将不胜感激!