返回命令中提到的频道的频道ID

时间:2018-09-08 01:50:32

标签: javascript discord.js

标题说明了一切。我正在node.js中制作一个Discord机器人,而我想添加的一部分是.setup命令,以使该机器人更少依赖于手动更改client.channels.get().send()的值,从而允许以便将来更容易设置。

无论如何,就我而言,我试图让用户回复带有频道提及的消息(例如#welcome),并让漫游器返回该ID并将其保存到变量中。

目前,我有这个:

function setupChannel() {
  client.channels.get(setupChannelID).send('Alright. What channel would you like me to send my reminders to?');
  client.on('message', message => {
    checkChannel = message.mentions.channels.first().id;
    client.channels.get(setupChannelID).send('Ok. I\'ll send my reminders to that channel.');
  });
}

message.mentions.channels返回未定义。
我知道message.mentions.channels.first().id位在用户而不是频道时起作用,是否有其他方法可以在消息中提及频道?

2 个答案:

答案 0 :(得分:0)

我只想从消息中删除所有非整数,因为这使得ID和提及都易于使用,并且它将为您返回ID,因为提及的只是带有<#和>的ID在他们旁边。为此,您将使用

message.content.replace(/\D/g,'')

有了这个,您的代码将如下所示:

function setupChannel() {
  client.channels.get(setupChannelID).send('Alright. What channel would you like me to send my reminders to?');
  client.on('message', message => {
    checkChannel = message.content.replace(/\D/g,'');
    client.channels.get(setupChannelID).send('Ok. I\'ll send my reminders to <#' + checkChannel + '>.');
  });
}

由此您将始终获得一个ID。而且我们可以将ID包围起来以进行提及。

答案 1 :(得分:0)

这是我发现的最简单易懂的方法:

message.guild.channels.cache.get(args[0].replace('<#','').replace('>',''))

但这并不是我们想要的,我们可以使用<#####9874829874##><<<547372>>,它将起作用。所以我想通了:

message.guild.channels.cache.get(args[0].substring(2).substring(0,18))