FTWGaming
FTWGaming

Reputation: 29

discord.js sending message to specific channel

I've been looking around, can't quite seem to find the answer to this issue I am having with a discord bot I am making with Typescript. I have all of my commands in their own folder using a separate file for each command. Helps to keep things organised.

I've seen people say client.channels.get(`channelID`).send(`Text`)

but that's giving me Object is possibly 'undefined'. and Property 'send' does not exist on type 'Channel'.

I'm actually trying to make a bot message every text channel (given from a list) whenever someone runs a reboot command because for whatever reason people keep rebooting the bot. I implemented it as a funny thing to do every now and again as a troll if someone needs to use it. The bot goes offline for 3 minutes but I don't like having people spam it and pretty much have the bot un-usable.

I'm using client.channels.get(channels.channelnames[5]).send("This is a message.")

enter image description here

enter image description here

Upvotes: 1

Views: 5633

Answers (3)

FTWGaming
FTWGaming

Reputation: 29

Solution:

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.")
}

so I was on the right track mostly. just had to do as Discord.TextChannel and I think that's why Cynthia was saying about casting the variable as a TextChannel

This code works. thanks for all your help guys!

Upvotes: 2

Gavin
Gavin

Reputation: 2365

This should work assuming your channels are text ones.

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);
        }

    }

});

Upvotes: 0

Cynthia
Cynthia

Reputation: 11

According to https://discord.js.org/#/docs/main/stable/class/Collection it seems like there is no get method.

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

In other words try to replace .get with the square brackets.

EDIT: Sorry I was a bit quick, I think the issue is type casting, try casting the Channel to a TextChannel if you know that it is a text channel.

Upvotes: 1

Related Questions