如何使参数作为用户ID?

时间:2019-03-23 02:04:47

标签: javascript arguments bots discord discord.js

我的问题是关于不和谐机器人的这些行:

client.users.get("idhere")
  .send("message")

如何将其转换为一个脚本,该脚本需要一个参数并希望它是一个用户ID? (您能发送脚本吗?)

所以我可以输入[$dm (userid) (msg)]

注意:我希望漫游器通过其ID向用户发送DM

这是我当前的代码:

const Discord = require('discord.js');

const client = new Discord.Client();

client.on("ready", () => {
  console.log("the bot is ready...");
  client.user.setGame("prefix is $");
});

const prefix = "$";
client.on("message", (message) => {
  const args = message.content.slice(prefix.length).trim().split(/ +/);
  const cmdname = args.shift().toLowerCase();
  mention = message.mentions.users.first();
  if (cmdname == 'send') {
    if (mention == null) return;
    message.delete();
    args.shift();
    mention.send(args.join(' '));
    message.channel.send("done");
  }
});

client.login('token');

2 个答案:

答案 0 :(得分:0)

您绝对应该学习js的基础知识。

因此,基本上,您可以先检查是否有提及,以及是否没有尝试通过ID获取用户。

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

client.on ("ready", () => {
    console.log("the bot is ready...");

    client.user.setGame ("prefix is $");
});

client.on ("message", (message) => {

  const args = message.content.slice(prefix.length).trim().split(/ +/);
  const cmdName = args.shift().toLowerCase();
  const prefix = "$";

  if (cmdName == 'send') {
    message.delete();

    let targetChannel;
    let mention = message.mentions.users.first();
    if (!mention) targetChannel = client.users.get(args[0]); // if there is no mention we tring to get user from id
    else targetChannel = mention;

    if (!targetChannel) {
      const embed = new Discord.RichEmbed()
      .setColor("RANDOM")
      .setDescription('You need to mention user or provide his id.')
      message.channel.send(embed).then(msg => msg.delete(5000));
      return;
    }

    let text = args.slice(1).join(' '); // removing id or mention

    if (!text) {
      const embed = new Discord.RichEmbed()
      .setColor("RANDOM")
      .setDescription('You need to provide text to send.')
      message.channel.send(embed).then(msg => msg.delete(5000));
      return;
    }

    targetChannel.send(text);
    const embed = new Discord.RichEmbed()
    .setColor("RANDOM")
    .setDescription('Successufully sended message.')
    message.channel.send(embed).then(msg => msg.delete(5000));

  }

});

client.login('token');

答案 1 :(得分:0)

由于message.mentions.users.first();返回未定义,我们可以对提及变量进行简单而快速的更改:

const mention = message.mentions.users.first() || client.users.get(args[0]);

如果未提及任何用户,您将尝试使用该用户的ID。