Получите Discord Bot, чтобы проверить, реагирует ли он на свой пост - PullRequest
0 голосов
/ 03 июня 2019

Я пишу бот-диск с использованием discord.js, и недавно я добавил команду // translate, которая использует API Google Translate для перевода между всеми языками, поддерживаемыми Google Translate.Я хочу добавить возможность быстрого повторного перевода перевода обратно на английский, используя реакции, и я хочу, чтобы бот проверил, отреагировал ли 1 человек на сообщение с предоставленной реакцией, и, если они это сделали, повторно переведет перевод обратно.на английский.

Я действительно близко, но я столкнулся с проблемой, что я не могу заставить бота проверить, послал ли он сам реакцию, поэтому он автоматически переводит обратно на английский, потому что этообнаруживая свою собственную реакцию.Я хочу, чтобы он пере-переводил только тогда, когда реагирует A PERSON, и только ОДИН РАЗ.

Я пока не очень знаком с этой областью discord.js, поэтому не могу понять, как это сделать.it.

Вот код:

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, бот снова переводит обратно на английский, потому что он обнаруживает свою собственную реакцию.

Любая помощь будет принята!

1 Ответ

1 голос
/ 03 июня 2019

В вашем фильтре вы можете проверить, что пользователь не является клиентом, например ...

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

Таким образом, добавляются только те реакции, которые не клиент собирает.

Вам нужно изменить опцию max в коллекторе на 1, так как реакция самого клиента не будет собрана.Вы также можете удалить оператор if, сравнивая reaction.emoji.name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...