检索具有匹配名称的所有 Discord 频道 ID

时间:2021-01-05 13:47:10

标签: node.js discord

我正在使用 NodeJS,并尝试使用 DiscordJS 创建一个机器人,它会查找所有命名相同的频道,并向每个频道发送一条消息。

const PREFIX = "<";
const { Client, DiscordAPIError }= require('discord.js');
const { findSourceMap } = require('module');
const disclient = new Client();
require('dotenv').config();
disclient.login(process.env.DISCORDJS_BOT_TOKEN);

disclient.on('ready',() => {
    console.log('Discord logged on');
});
disclient.on('message', (message) => {
    if (message.author.bot) return;
    if (message.content.startsWith(PREFIX)){
        const [CMD_NAME, ...args] = message.content
        .trim()
        .substring(PREFIX.length)
        .split(/\s+/);
        
        let channels = message.guild.channels.cache;
        if (CMD_NAME === "findchannel"){
            
         let clamnewschan =  disclient.channels.cache.find(channels => channels.name === "clamnews");
         
        };
    };
});

我不知道该怎么做,但我设法获得了名为“clamnews”的频道,我只需要它的 ID,以便我可以在其中发帖。

编辑:固定的,更新了下面的代码。

const PREFIX = "<";
const { Client, DiscordAPIError }= require('discord.js');
const { findSourceMap } = require('module');
const disclient = new Client();
require('dotenv').config();
disclient.login(process.env.DISCORDJS_BOT_TOKEN);

disclient.on('ready',() => {
    console.log('Discord logged on');
});
disclient.on('message', (message) => {
    if (message.author.bot) return;
    if (message.content.startsWith(PREFIX)){
        const [CMD_NAME, ...args] = message.content
        .trim()
        .substring(PREFIX.length)
        .split(/\s+/);
        
        let channels = disclient.channels.cache.filter(ch => ch.name === "clamnews");
        if (CMD_NAME === "findchannel"){
            
        channels.forEach(channel => channel.send("test"))
         
        };
    };
});

1 个答案:

答案 0 :(得分:0)

如果您想找到具有相同名称的频道并将其发布到其中,您可以这样做:

let channels = disclient.channels.cache.filter(ch => ch.name === "clamnews");
channels.forEach(channel => channel.send("test"))

此示例过滤掉名为 clamnews 的每个频道。这存储在 channels 中。然后您只需使用 forEach 函数将消息发送到具有相同名称的每个频道。