Струны / Аргументы для нового человека - PullRequest
0 голосов
/ 23 апреля 2019

Мне нужна помощь с командой, например, если кто-то пишет "! Report @user Spamming" Как я могу сделать так, чтобы моя учетная запись разногласия получила сообщение от бота о = Кто сообщает, кто и по какой причине

Я пытался смотреть видео и сообщения, но не могу обойтись без этого

  client.on('message', async function(message)  {

    if (message.content.startsWith(prefix + "report")) {
      const user = await client.fetchUser(args[1].match(/^<@!?(\d+)>$/)[1]); 
      if (!user) return message.channel.send('Oops! Please mention a valid user.');

      const reason = args.slice(2).join(' ');

      const me = await client.fetchUser('123456890'); //My id

      me.send(`${message.author} reported ${user} for: \`${reason}\``)
        .catch(err => console.error(err));



      }
     }
  )

Я хочу, например, на канале =! Report @ patrick # 4245 Он спамит Затем бот отправляетсообщение для меня @ fadssa # 2556 Сообщил @ patrick # 4245 Причина = Он спамит

1 Ответ

0 голосов
/ 24 апреля 2019

Прежде чем просто скопировать этот код, давайте на самом деле обдумаем это ...

  1. Итак, давайте начнем с того, что сначала получим все необходимое для сообщения. Во-первых, мы должны извлечь пользователя из предоставленного аргумента. Мы делаем это, сравнивая строку со строкой упоминания и выбирая идентификатор. Если он не существует, мы возвращаем ошибку, в которой пользователь упоминает кого-то.
  2. Теперь, если вы уже объявили свои аргументы (если нет, см. это руководство , чтобы помочь), мы можем просто собрать аргументы, использованные для причины. Для этого мы должны использовать Array.slice(), а затем соединить эти слова с Array.join().
  3. Тогда, так как мы хотим, чтобы бот отправил вам DM, мы должны найти вас в мире Discord. Для этого мы можем использовать client.fetchUser().
  4. Теперь мы можем просто отправить вам DM, и вы будете предупреждены обо всех отчетах.
/*
* Should be placed within your command's code, after checking required arguments exist
* Assuming 'client' is the Discord Client and 'args' is the array of arguments
* Must be within an async function to use 'await'
*/

const user = await client.fetchUser(args[1].match(/^<@!?(\d+)>$/)[1]); // see below
if (!user) return message.channel.send('Oops! Please mention a valid user.');

const reason = args.slice(2).join(' ');

const me = await client.fetchUser('189855563893571595'); // replace with your ID

me.send(`${message.author} reported ${user} for: \`${reason}\``))
  .catch(err => console.error(err));

Хотя это может показаться запутанным, но использование регулярных выражений гораздо лучше, чем message.mentions. Существует множество примеров, когда казалось бы, идеальный код не вернет ожидаемого пользователя, поэтому я бы определенно выбрал получение идентификатора из упоминания сам.

...