Скрипт приветствия / прощания с ошибкой js бота discord

#javascript #discord.js #bots

Вопрос:

Он дает мне этот сценарий приветствия/прощания с ошибкой Discord, и он уже много чего перепробовал, если кто-то мне поможет, я был бы очень признателен, спасибо

 module.exports = (client) => {
    const channelIdA = '718596514305277972'
    
    client.on('guildMemberAdd', (member) => {
       console.log("Se ha unido una nueva persona al servidor TPA")
       
         const messageA = `message`

          const channel = (channelIdA)
          channel.send(messageA)
       })
   }
   
   module.exports = (client) => {
    const channelIdB = '890891192995303424'
    
    client.on('guildMemberRemove', (member) => {
       console.log("Se ha salido una persona del servidor TPA")
       
         const messageB = `message`
          
          const channel = (channelIdB)
          channel.send(messageB)
    })
}
 

Ответ №1:

Вы пытаетесь отправить сообщение на канал, вызвав .send() метод. Однако вы вызываете метод в строке. Этот send() метод существует только для текстовых каналов. Чтобы отправить сообщение на определенный канал, замените код отправки сообщения следующим

 client.on("guildMemberAdd", members => {
 client.channels.cache.get("REPLACE WITH CHANNEL ID").send("message")
});

client.on("guildMemberRemove", members => {
 client.channels.cache.get("REPLACE WITH OTHER CHANNEL ID").send(" other message")
});
 

Если вышесказанное не работает, попробуйте это:
(работает без кэша)

 client.on("guildMemberAdd", async (member) => {
 const channel = await client.channels.fetch("REPLACE WITH CHANNEL ID")
 channel.send(`${member.user.username}, welcome`)
});

client.on("guildMemberRemove", async (member) => {
 const channel = await client.channels.fetch("REPLACE WITH OTHER CHANNEL ID")
 channel.send(`${member.user.username} has left`)
});
 

Комментарии:

1. Большое вам спасибо, но если я хочу использовать <@ $ {member.id}> или $ {member.guild.memberCount}, как мне это сделать? Когда я покидаю сервер, он говорит «до свидания», Когда я захожу на сервер, он говорит «до свидания» и «Добро пожаловать», И это сработало с самого начала

2. channels.fetch() возвращает обещание, поэтому у него нет .send() метода, и вам сначала нужно будет его решить.

3. @ZsoltMeszaros упс я обновлю свой ответ прямо сейчас

4. @Bertogim это похоже на новый вопрос.

5. Хорошо, спасибо, это работает нормально на 100% , Может быть, в будущем я задам вопрос о реакции на роль или что-то еще, большое вам спасибо

Ответ №2:

Вы должны получить канал, используя это. Если у вас уже есть канал в кэше (что-то произошло в канале после запуска бота), вы также можете использовать кэш каналов.