【问题标题】:Send a message to a specific user?向特定用户发送消息?
【发布时间】:2019-07-24 01:16:21
【问题描述】:

我正在尝试让我的不和谐机器人每隔几个小时向我发送一条消息,所以我知道它仍在运行。

例如:
机器人向我发送“仍在运行!”每两个小时给我一次。

这是我尝试过的一些代码,但它不起作用:

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)

【问题讨论】:

  • 您随后得到了什么结果和/或错误?
  • @rhand 错误现在在 OP 中。
  • 看起来client.channels.get("&lt;retracted id&gt;") 没有找到频道:如果您尝试在命令中执行它,它会获得频道吗?

标签: node.js discord discord.js


【解决方案1】:

先使用var fetchedUser = client.fetchUser(userID)获取用户,再调用fetchedUser.createDM()为用户创建和获取DM频道。
或者,dmChannel 属性也可以使用,但如果之前未在机器人和用户之间创建 DM 通道,它将返回 null。

【讨论】:

  • 我让 client.fetchUser 工作,但我似乎无法让 fetchedUser.createDM 工作。这是我做的代码。 client.fetchUser(293181883871920128) client.fetchedUser.createDM() 我收到了这个错误:pastebin.com/ss2F9q0z
  • 您是否分配了fetchedUser... 另外,在我的回答中,我假设fetchedUser 是您根据client.fetchUser(userID) 的返回值分配的变量,这不是客户拥有的.我编辑了我的答案以防止混淆
  • 还是不行。我这样做了:var fetchedUser = client.fetchUser(&lt;userid&gt;) fetchedUser.createDM(),我最终得到了这个:pastebin.com/c7P2qXn3
  • 显然client.fetchUser(&lt;userid&gt;) 返回一个promise&lt;user&gt;,这意味着你需要await for that operation。我对那个不好。
【解决方案2】:

如果要告诉自己机器人仍在运行,您可以使用此代码使其在您指定的时间间隔内向您发送消息。

首先,将您的用户 ID 存储为变量。对于此示例,我将其设为 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。我将使用 yourchannel 作为频道的变量。

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 频道。因此,您可以获取它们各自的 ID,并告诉机器人每隔一段时间在它们中发送您的消息。希望这会有所帮助!

【讨论】:

  • 似乎对我不起作用。 /app/index.js:26 timeout = setInterval(() =&gt; ownerid.send("I'm still running!"), 60000); ^ TypeError: ownerid.send is not a function at Timeout.setInterval [as _onTimeout] (/app/index.js:26:39) 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)
  • 奇怪,让我看看我是否可以重现错误并修复它。
  • 看起来我什至忘记了获取频道 ID,这是我的一大错误。将解决方案更新为有效的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
相关资源
最近更新 更多