NodeJS 不和机器人只对DM有React,不对公会的命令有React

hts6caw3  于 2023-02-08  发布在  Node.js
关注(0)|答案(1)|浏览(109)

我正在用javascript和discord.js v14编写我的第一个不和谐机器人。我的机器人在私聊中只是服从命令,如果是通过服务器,它不会发回消息。有人能帮助我吗?我的代码:

//npm é um gerenciador de pacotes

const { Client, GatewayIntentBits, Partials } = require('discord.js');
const config = require('./config.json');
const { Guilds, GuildMembers, DirectMessages } = GatewayIntentBits;
const { Channel, GuildMember, Message, User, Reaction } = Partials;
const client = new Client({
  intents: [Guilds, GuildMembers, DirectMessages],
  partials: [Channel, GuildMember, Message, User, Reaction],
});

client.on('ready', () => {
  console.log(
    `Bot foi iniciado, com ${client.users.cache.size} usuários, em ${client.channels.cache.size} canais, em      ${client.guilds.cache.size} servidores.`,
  );
  client.user.setActivity(
    `Eu estou em ${client.guilds.cache.size} servidores.`,
  ); //atualiza status do bot
});

client.on('guildCreate', (guild) => {
  console.log(
    `O bot entrou nos servidores: ${guild.cache.name} (id: ${guild.cache.id}). População: ${guild.cache.memberCount} membros.`,
  );
  client.user.setActivity(`Estou em ${client.guilds.cache.size} servidores!`);
}); //toda vez q o bot entra num server, esse comando é executado e atualiza o status do bot

client.on('guildDelete', (guild) => {
  console.log(
    `O bot foi removido do servidor: ${guild.cache.name} (id: ${guild.cache.id}).); client.user.setActivity(Serving ${client.guilds.cache.size} servers!`,
  );
}); //avisa caso o bot seja excluido de um servidor

client.on('messageCreate', async (message) => {
  let prefix = config.prefix; //liga o prefixo do arquivo config para comando

  if (message.author.bot) return; //nao responda outros bots
  if (!message.content.startsWith(config.prefix)) return;
  //if(message.channel.type === "dm") return; //nao responda por DM

  const args = message.content.slice(config.prefix.length).trim().split(/ +/g); //liga o prefix do config para comando
  const comando = args.shift().toLowerCase(); //parametros do comando

  if (comando === 'ping') {
    //define o comando depois do prefixo digitado pelo usuario
    const m = await message.channel.send('Ping?'); //mensagem
    m.edit(
      `:ping_pong: Pong! A latencia é ${
        m.createdTimestamp - message.createdTimestamp
      } ms. A latencia da API é ${Math.round(client.ws.ping)} ms`,
    ); //edita a propria mensagem 'm'
  }
}); //evento de mensagem do bot

client.login(config.token); //liga o bot

我试图重新安装discord.js,我也安装了一个旧版本,但显然问题不是在库中,因为它的工作,而只是在私人聊天。

qnakjoqk

qnakjoqk1#

因为如果没有MessageContent意图,你只能在DM中获得message.content,而不能在公会中获得。它将是an empty string in guilds
您需要将MessageContent添加到Intent数组中:

const { Guilds, GuildMembers, DirectMessages, MessageContent } =
  GatewayIntentBits;
const { Channel, GuildMember, Message, User, Reaction } = Partials;
const client = new Client({
  intents: [Guilds, GuildMembers, DirectMessages, MessageContent],
  partials: [Channel, GuildMember, Message, User, Reaction],
});

相关问题