discord.js 正在向特定频道发送消息

discord.js sending message to specific channel

我一直在四处寻找,似乎无法找到我使用 Typescript 制作的不和谐机器人遇到的这个问题的答案。我将所有命令都放在它们自己的文件夹中,每个命令都使用一个单独的文件。有助于让事情井井有条。

我看到有人说client.channels.get(`channelID`).send(`Text`)

但这给了我 Object is possibly 'undefined'.Property 'send' does not exist on type 'Channel'.

实际上,每当有人运行重启命令时,我都会尝试在每个文本频道(从列表中给出)发送一条机器人消息,因为无论出于何种原因,人们都会不断重启机器人。如果有人需要使用它,我会时不时地把它作为一个有趣的事情来实现。机器人离线 3 分钟,但我不喜欢人们向它发送垃圾邮件,而且几乎无法使用机器人。

我正在使用 client.channels.get(channels.channelnames[5]).send("This is a message.")

根据https://discord.js.org/#/docs/main/stable/class/Collection看来好像没有get方法。

尝试client.channels[channels.channelnames[5]].send("This is a message.")

换句话说,尝试用方括号替换.get。

编辑:对不起,我有点快,我认为问题是类型转换,如果你知道它是一个文本频道,请尝试将 Channel 转换为 TextChannel

假设您的频道是文本频道,这应该有效。

client.on('ready',(e)=>{


    let channel_ids = ['123','456','789'];

    // loop through the list of channel ids.
    for(let i=0, l=channel_ids.length; i<l; i++){
        let channel_id = channel_ids[i];

        let this_channel = client.channels.get( channel_id );

        // if exists, and type in list send message
        if(this_channel && ['dm', 'group', 'text'].indexOf( this_channel.type ) != -1){
            this_channel.send('a cool message')
            .then(message => console.log(`Sent message: ${message.content}`))
            .catch(console.error);
        }

    }

});

解决方案:

if(msgObject.member.guild.channels.find(channel => channel.name === channels.channelnames[5]) as Discord.TextChannel) {
    var txtchannel = msgObject.member.guild.channels.find(channel => channel.name === channels.channelnames[5]) as Discord.TextChannel
    txtchannel.send("This is a message in a channel. Don't know why you read this.")
}

所以我基本上是在正确的轨道上。只需要做 as Discord.TextChannel 我认为这就是为什么 Cynthia 说要将变量转换为 TextChannel

此代码有效。感谢大家的帮助!