Discord% sticky команда - PullRequest
0 голосов
/ 02 мая 2020

В настоящее время я пытаюсь создать бота Discord, который отправляет сообщение, когда пользователь с указанной ролью отправляет команду %sticky This is a test

Я хочу, чтобы оно всегда было первым сообщением в канале и каждым В тот момент, когда другой пользователь вводит канал, бот удаляет свое последнее сообщение и снова публикует сообщения. Мне еще не повезло в сети, даже я не нашел бота, который уже выполняет эту функцию, или с чего бы начать. Вот то, что у меня сейчас есть

var lastStickyMessage;

client.on('message', message => {
    if (lastStickyMessage != null) {
       message.channel.fetchMessage(lastStickyMessage)
            .then(retrievedMessage => retrievedMessage.delete());
    }
   message.reply("This is a Sticky Message").then(sent => {
        let lastStickyMessage = sent.id;
   }
});

1 Ответ

1 голос
/ 02 мая 2020

В управлении переменными есть несколько ошибок: одной рукой вы создаете новый пусть с тем же именем. Поскольку переменная let является областью видимости, значение lastStickyMessage внутри отправленного обратного вызова будет иметь другое значение, чем за его пределами, поскольку это две разные переменные (подробнее об этом здесь ).

Кроме того, вы должны сохранить последний отправленный идентификатор в файле или где-то еще, так как var будет сброшен после перезапуска вашего бота (встроенный модуль fs может помочь вам в этом, вы можете найти документацию здесь ).

И последнее: если вы инициализируете переменную без значения, это будет не null, а undefined. Если вы проверяете только с использованием ==, оно все равно будет иметь значение true (означает null == undefined), но если вы сравните с использованием ===, оно будет иметь значение false (null !== undefined). В вашем случае это на самом деле не проблема, но это может быть полезно знать для других случаев.

...