Как отправить приветственное сообщение с ботом Discord - NodeJS - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь разработать бота Discord и хочу, чтобы он отправлял приветственное сообщение, когда кто-то добавляется на сервер.Я получаю эту ошибку:

/perso-workspace/discordtest/index.js:31
guild.defaultChannel.send(`Bienvenue ${member.user} sur mon serveur Discord !  `).catch(console.error);
                         ^

TypeError: Cannot read property 'send' of undefined
    at Client.bot.on.member (/home/spoisson/Documents/perso-workspace/discordtest/index.js:31:26)
    at Client.emit (events.js:189:13)
    at Guild._addMember (/home/spoisson/Documents/perso-workspace/discordtest/node_modules/discord.js/src/structures/Guild.js:1192:19)
    at GuildMemberAddHandler.handle (/home/spoisson/Documents/perso-workspace/discordtest/node_modules/discord.js/src/client/websocket/packets/handlers/GuildMemberAdd.js:12:13)
    at WebSocketPacketManager.handle (/home/spoisson/Documents/perso-workspace/discordtest/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:103:65)
    at WebSocketConnection.onPacket (/home/spoisson/Documents/perso-workspace/discordtest/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:333:35)
    at WebSocketConnection.onMessage (/home/spoisson/Documents/perso-workspace/discordtest/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:296:17)
    at WebSocket.onMessage (/home/spoisson/Documents/perso-workspace/discordtest/node_modules/ws/lib/event-target.js:120:16)
    at WebSocket.emit (events.js:189:13)
    at Receiver._receiver.onmessage (/home/spoisson/Documents/perso-workspace/discordtest/node_modules/ws/lib/websocket.js:137:47)

Вот мой код:

const Discord = require('discord.js')
const bot = new Discord.Client()


bot.on('ready', function(){
    console.log('I am ready to learn !')
})

bot.on('message', function (message){
    if (message.content === '!ping') {
        message.channel.send('Pong !')
    }
})

bot.on("guildMemberAdd", member => {
    let guild = member.guild;
    console.log('Guild is ' + guild + ' and member is ' + member.user)
    guild.defaultChannel.send(`Bienvenue ${member.user} sur mon serveur Discord !  `).catch(console.error);
});

bot.login('i_set_my_token_here')

Я уже пробовал разные уроки на YouTube или что-то подобное, но я не понимаю, какая у меня разницас парнями, которых я смотрю.Первая команда (! Ping) работает отлично.Мне удалось установить активность для моего бота.

Я видел, что defaultChannel устарело, но я не нашел ничего, что могло бы соответствовать тому, что я хочу.

Может кто-нибудь подсказать мне, как исправить / исправить эту ошибку?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

У новых серверов разногласий больше нет канала по умолчанию, поэтому Guild#defaultChannel устарел и возвращает неопределенное значение для новых гильдий.

Если вы хотите, чтобы бот просто нашел канал по имени, вы можете использовать:

guild.channels.find(channel => channel.name === 'general-chat');

Вы также можете перебирать список возможных имен каналов, чтобы разрешить большее количество каналов, или у вас может быть конфигурация, которая устанавливает канал журнала.

0 голосов
/ 02 апреля 2019

Из-за изменения api .defaultChannel больше не доступен.Однако вы можете указать имя или идентификатор для выбора нужного канала.

С идентификатором:

guild.channels.find(ch => ch.id === "channel id here".send(`Welcome ${member.user} on my Discord server !`).catch(console.error);

С именем:

guild.channels.find(ch => ch.name === "channel name here").send("Welcome ${member.user} on my server Discord !").catch(console.error);
...