Отправить сообщение конкретному пользователю? - PullRequest
0 голосов
/ 02 марта 2019

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

Например:
Бот отправляет мне «Все еще работает!»мне каждые два часа.

Вот некоторый код, который я пробовал, но он не работал:

client.on("ready", () => {
  client.user.setActivity("a game.");

  if (timeout) {
    clearInterval(timeout);
  }
  timeout = setInterval(() => client.channels.get("<ID Retracted>").send("Still functioning!"), 7200000);
  console.log("READY");
});

Это ошибка, которую я получаю:

Jump to /app/index.js:26
    timeout = setInterval(() => client.channels.get("<retracted id>").send("Still functioning!"), 7200000);
                                                                         ^

TypeError: Cannot read property 'send' of undefined
    at Timeout.setInterval [as _onTimeout] (/app/index.js:26:74)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Чтобы DM себе, что бот все еще работает, вы можете использовать этот код, чтобы сделать его DM в указанном вами интервале.

Сначала сохраните свой идентификатор пользователя как пригодный для использования.Для этого примера я сделал его yourid .

let yourid = client.users.get("your id")

Затем создайте функцию для запуска интервала, в этом примере я назвал ее intervalFunc.

function intervalFunc() {
yourchannel.send("Im still running!")
}

Затем, но не в последнюю очередь, запустите функцию с интервалом.

setInterval(intervalFunc, 40000)
})

Итак, в итоге у вас будет этот код.

const discord = require('discord.js');
    client.on("ready", () => {
      client.user.setActivity("a game.");
    let yourchannel = client.users.get("your id")
    function intervalFunc() {
    yourchannel.send("Im still running!")
    }
    setInterval(intervalFunc, 40000)
    })

Дляотправить сообщение по определенному каналу, это одно и то же, только вы меняете users.get на channels.get.Я буду использовать ваш канал в качестве переменной для канала.

let yourchannel = client.channels.get("your id")

Итак, в итоге вы получите этот код.

const discord = require('discord.js');
client.on("ready", () => {
  client.user.setActivity("a game.");
let yourchannel = client.channels.get("your id")
function intervalFunc() {
yourchannel.send("Im still running!")
}
setInterval(intervalFunc, 7200000)
})

Эти методы работаютпотому что вы уже знаете, с каким каналом или каналом DM вы работаете.Таким образом, вы можете получить их соответствующие идентификаторы и сказать боту отправлять ваше сообщение через определенные промежутки времени.Надеюсь, это поможет!

0 голосов
/ 03 марта 2019

Используйте var fetchedUser = client.fetchUser(userID), чтобы сначала получить пользователя, затем вы можете позвонить fetchedUser.createDM(), чтобы создать и извлечь канал DM для пользователя.
В качестве альтернативы, *Свойство 1008 *dmChannel также работает, хотя оно возвращает ноль, если канал DM ранее не создавался между ботом и пользователем.

...