0

我正在使用 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,机器人会重新翻译回英语,因为它正在检测自己的反应。

任何帮助,将不胜感激!

4

1 回答 1

2

在您的过滤器中,您可以检查以确保用户不是客户,就像这样......

const filter = (reaction, user) => reaction.emoji.name === '' && user.id !== client.user.id;

这样,只收集客户端未添加的反应。

您必须将max收集器中的选项更改为 1,因为不会收集客户自己的反应。您还可以删除if比较语句reaction.emoji.name

于 2019-06-03T17:38:34.557 回答