首页 > 解决方案 > 如何让我的机器人通过命令示例 ping 一个人:!eat @the user i want, the bot: @the user has been eated

问题描述

我想做一个命令,例如吃,我想要机器人 ping,这是一个例子:D

bot.on('message', (message) => {
    const parts = message.content.split('');
    if (parts [0] == '!eat'){
        if (parts [1] == 'The member that i want to be pinged by the bot') {
            message.channel.send('The user that i pinged on command has been eated!')
        }
    };
}

标签: discord.js

解决方案


我做了一些改变:

  • 我添加了一个全局prefix变量,以便可以轻松更改前缀。
  • 我添加了检查以确保如果消息是由机器人发送的或者不是以前缀开头的则函数退出。
  • 我添加了一些代码来将消息拆分为命令和参数。
  • 我已将if声明替换为switch声明。

我强烈建议您阅读Discord.js 指南,因为它对初学者非常友好,并且可以让您编写比此答案更好的代码。此答案中的大部分代码取自 Discord.js 指南。

const prefix = '!';

bot.on('message', (message) => {
  if (message.author.bot || !message.content.startsWith(prefix)) return;

  const args = message.content.slice(prefix.length).trim().split(/\s+/g);
  const command = args.shift().toLowerCase();

  switch (command) {
    case 'eat':
      const member = message.mentions.members.first();
      if (!member) return message.reply('Could not find the mentioned user.');

      message.channel.send(`${member.user.username} has been eaten!`);
      break;
    default:
      message.reply(`The command \`${command}\` was not recognized`);
  }
});

解释

命令前缀设置:

const prefix = '!';

如果消息由机器人发送或不以前缀开头,则函数退出:

if (message.author.bot || !message.content.startsWith(prefix)) return;

前缀从消息的开头被删除,并且消息在所有空白间隙处拆分:

const args = message.content.slice(prefix.length).trim().split(/\s+/g);

第一个参数被删除,转换为小写并存储在command变量中:

const command = args.shift().toLowerCase();

找到第一个提到的用户:

const member = message.mentions.members.first();

如果没有提及用户,则返回警告消息:

if (!member) return message.reply('Could not find the mentioned user.');

一条消息被发送到服务器说“[用户]已经被吃掉了!”

message.channel.send(`${member.user.username} has been eaten!`);

参考


推荐阅读