我决定在node.js上制作一个discord机器人,我找到了那个库dicord.js.我想让机器人接收来自用户的直接消息,但由于某种原因,它看不到直接发送给他的消息.

discord.js版本:

npm view discord.js version
14.9.0

版本nodenpm:

node -v                    
v18.15.0
npm -v
9.5.0

以下是我的代码:

import discord from 'discord.js';
import config from './config.js';

const bot = new discord.Client({intents: config.intents, partials: config.partials})
bot.on('ready', () => {
    console.log(`Logged in as ${bot.user.tag}!`);
});

bot.on('messageCreate', (message) => {
    console.log(message);
});

bot.login(config.token);

还有我的config.js号档案:

import discord from 'discord.js'
const { GatewayIntentBits, Partials } = discord

export default {
    "token": xxxxxxx,
    "intents": Object.keys(GatewayIntentBits),
    "partials": [Object.keys(Partials)]
}

所以,是的,我真的给了他所有的主旨和部分,只是为了确保我不会错过一些.当我直接向他发送消息时,我预计会在控制台中看到类似的情况:

<ref *1> Message {
  channelId: '1101904091908689970',
  guildId: '1101895271669055611',
  id: '1102197229973938348',
  createdTimestamp: 1682854697460,
  type: 0,
  system: false,
  content: 'Hello',
  author: User {
    id: 'xxxxxxxx',
    bot: false,
    system: false,
    flags: UserFlagsBitField { bitfield: 0 },
    username: 'sewrprvrt',
    discriminator: 'xxxx',
    avatar: '49891ad2803d523d6edf79dd41b72ecb',
    banner: undefined,
    accentColor: undefined
  },
  pinned: false,
  tts: false,
  nonce: '1102197239196942336',
  embeds: [],
  components: [],
  attachments: Collection(0) [Map] {},
  stickers: Collection(0) [Map] {},
  position: null,
  roleSubscriptionData: null,
  editedTimestamp: null,
  reactions: ReactionManager { message: [Circular *1] },
  mentions: MessageMentions {
    everyone: false,
    users: Collection(0) [Map] {},
    roles: Collection(0) [Map] {},
    _members: null,
    _channels: null,
    _parsedUsers: null,
    crosspostedChannels: Collection(0) [Map] {},
    repliedUser: null
  },
  webhookId: null,
  groupActivityApplication: null,
  applicationId: null,
  activity: null,
  flags: MessageFlagsBitField { bitfield: 0 },
  reference: null,
  interaction: null
}

就像我说的,我试着判断所有的意向和部分信息,但没有奏效.我在网上搜索,想找出如何修复它,但我找到的一切也帮不了我.可能是因为discord.js最近更新到了14版本,我没有找到适合我的工作选项.

如果有人知道我哪里搞砸了,我会非常感激的,提前谢谢.

推荐答案

您需要设置为<user>.createDM()才能让discord.js为该用户的DM触发messageCreate个事件.您必须 for each 想要从其获取DM的用户执行此操作,如果您的机器人重新启动,则再次执行此操作.

我不确定它为什么会这样工作,但我认为这与只缓存您实际需要的DM频道有关,而不是为您的机器人可以看到的每个用户缓存每个DM频道(这可以非常快地达到数百万).

如果你希望你的用户能够通过DM与你的机器人互动,而不必这么做,我建议考虑使用Application Commands,因为这些Fire交互事件与你有.createDM‘d无关

Javascript相关问答推荐

React状态变量在使用++前置更新时引发错误

从外部访问组件变量-Vueejs

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

reaction如何在不使用符号的情况下允许多行返回?

如何在JavaScript中通过一次单击即可举办多个活动

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

如何在mongoose中链接两个模型?

jQuery s data()[storage object]在vanilla JavaScript中?'

更改JSON中使用AJAX返回的图像的路径

使用GraphQL查询Uniswap的ETH价格

Chart.js-显示值应该在其中的引用区域

检索相加到点的子项

将数组扩展到对象中

将异步回调转换为异步生成器模式

搜索功能不是在分页的每一页上进行搜索

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

如何在AG-Grid文本字段中创建占位符

Cherrio JS返回父div的所有图像SRC

Played link-Initialize.js永远显示加载符号

输入数据覆盖JSON文件