почему чат-бот discord в javascript не отвечает?

#javascript #node.js #reactjs

Вопрос:

Я работаю над этим простым чат-ботом, следуя учебнику discord.

Чат-бот вошел на мой сервер… Я набираю в чате на Discord «пинг», но чат-бот не отвечает «Понг», как следовало бы.

Ниже приведен основной код js:

 const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('interactionCreate', async interaction => {
  if (!interaction.isCommand()) return;

  if (interaction.commandName === 'ping') {
      console.log("we got a hello!")
    await interaction.reply('Pong!');
  }
});

client.login('token');
 

ПРИМЕЧАНИЕ: У меня есть секретный токен, в котором есть «токен»

в моем терминале это написано Logged in as Quote.it#4979! , и мой бот находится в Сети, когда я просматриваю его на сервере в Discord.

Но ничего не происходит, когда в раздоре я пишу в «пинг», Каким-либо образом я могу лучше диагностировать, что происходит?

Спасибо

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

1. Взаимодействия и сообщения-это совершенно разные вещи, взаимодействия-это новые функции, которые добавил discord, либо команды косой черты, команды пользователя или команды сообщений, в то время как события сообщений являются полным типом сообщений. Чтобы использовать команды взаимодействия, вам необходимо их зарегистрировать, в то время как для текстовых команд потребуется намерение содержимого сообщения. Вы можете обратиться к discord.com/developers/docs ! Надеюсь, это помогло.

Ответ №1:

Я вижу здесь пару проблем, во-первых, не похоже, что вы регистрируете команду ping, см. Здесь, а во-вторых, у вас нет правильных намерений, вам нужна команда GUILD_MESSAGES, см. здесь.

Вот простой бот для пинг-понга:

 const { Client, Intents } = require('discord.js')

const client = new Client({
    intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES],
    partials: ['CHANNEL', 'MESSAGE'],
})

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`)
})

client.on('messageCreate', (message) => {
    if (message.content.startsWith('ping')) {
        message.channel.send('pong!')
    }
})

client.login('token')
 

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

1. Большое вам спасибо! это очень полезно

2. Бот ответит на сервере. Знаете ли вы, как заставить его ответить «понг» в качестве сообщения пользователю, который его отправил? Я изначально думал, что «Создание сообщений» предназначено для сообщений отправителю, но вместо этого оно публикуется на сервере чата… спасибо

3. Если вы хотите отправить прямое сообщение, вы можете использовать message.author.send('Pong!') вместо message.channel.send('Pong')

4. ХОРОШО! отлично, это работает… огромное спасибо

5.Если вы добавите Intents.FLAGS.DIRECT_MESSAGES намерение, они появятся с обработчиком создания сообщений. Затем вы можете проверить, является ли это if (message.guild === null) {} примером DM