通过命令向数据库中的特定人员发送 DM,discord.js-commando

Sending a DM through a command, to a specific person from a database, discord.js-commando

所以,我在向没有作者标签且没有提及此人的特定人员发送 DM 时遇到了问题。我尝试复制提及数组:

/*jshint esversion: 6*/
const commando = require('discord.js-commando');

class Msgowner extends commando.Command {
  constructor(client) {
    super(client, {
      name: 'msgowner',
      group: 'info',
      memberName: 'msgowner',
      description: 'Gives rules on mock or legit duels.',
      examples: ['ladderrules type'],
    });
  }

  async run(message) {
    var user = {
      id: '12345',
      username: 'Bloodmorphed',
      discriminator: '12345',
      avatar: 'd510ca3d384a25b55d5ce7f4c259b2d0',
      bot: false,
      lastMessageID: null,
      lastMessage: null,
    };
    user.send('Test');
  }
}

module.exports = Msgowner;

我需要以这种方式发送 DM 是有原因的,但我似乎无法弄清楚如何。 (它现在给出的错误是一个未知的函数)。还用通用数字替换了 id 和 discriminator,但它们在我的代码中是正确的。

好的,找到我的答案:

  async run(message) {
    var user = {
      id: '12345,
      username: 'Bloodmorphed',
      discriminator: '12345',
      avatar: 'd510ca3d384a25b55d5ce7f4c259b2d0',
      bot: false,
      lastMessageID: null,
      lastMessage: null,
    };
    console.log(user);
    message.member.user.send('Test');
  }
}

module.exports = Msgowner;

编辑:这不是答案,仍在寻找答案。

试试这样的方法 - 使用 message.channel.members.find() 方法获取您要查找的成员:

async run(message) {
    // get Collection of members in channel
    let members = message.channel.members;

    // find specific member in collection - enter user's id in place of '<id number>'
    let guildMember = members.find('id', '<id number>');

    // send Direct Message to member
    guildMember.send('test message');
}

编辑: 看起来也可以通过如下操作找到当前频道外的用户:

async run(message) {
    // get client from message's channel
    let client = message.channel.client;

    // fetch user via given user id
    let user = client.fetchUser('<id number>')
    .then(user => {
        // once promise returns with user, send user a DM
        user.send('Test message'); 
    });
}