指定从discord bot发送聊天的频道(say-channel命令)

时间:2018-08-30 01:40:21

标签: node.js bots discord discord.js

这是GLaDOS机器人,Connor RK800机器人和TypicalBot中的一项功能。

通常命令显示如下:

!说#general heck

然后,文字会通过漫游器显示在该频道中。

如果可能的话,我想将此添加到自己的机器人中!

我对say-delete命令有一个简单的代码。我必须添加什么,我要删除什么?

      if (command === "say") {
  const sayMessage = args.join(" ");

  message.delete().catch(O_o => {
    // Catch error
  });
  message.channel.send(sayMessage);
}

谢谢!我真的很感激。

2 个答案:

答案 0 :(得分:1)

// making the say command
const sayCommand = `${prefix}say`
// say command
if (message.content.toLowerCase().startsWith(`${sayCommand}`)) {
        // declaring args variable
        const args = message.content.slice(sayCommand.length).split(/ +/);
        // delcaring sayMessage that clears the say command from the say message
        let sayMessage = args.join(` `);
        // deletes the command message
        message.delete();
        // bot sends the contents of the command without the say command
        message.channel.send(sayMessage)
    }

这对我非常有效

答案 1 :(得分:0)

首先,您需要将在这种情况下用于定义参数的代码更改为const channel = args.shift();,这将返回args []数组中的第一项。

然后,您可以使用message.guild.channels[channel].send(sayMessage);(我认为)来识别用户想要向其发送消息的频道。

总共,您的代码应为:

if(command === "say") {

   const channel = args.shift();
   const sayMessage = args.join(" ");

   message.delete().catch(O_o=>{});  

   message.guild.channels[channel].send(sayMessage);

}

由于我现在无法检查此内容,因此不确定是否可以正常工作,但值得一试!如果您希望我可以的话,可以为您进行测试。

编辑: 我测试并修复了代码,希望我写的注释足以说明问题。

const channel = args.shift().slice(2,-1); // this is due to how channel mentions work in discord (they are sent to clients as <#462650628376625169>, this cuts off the first <# and the finishing >)
const sayMessage = args.join(` `);

message.delete(); // you may want to add a catch() here, i didn't because my bot requires permissions to be added to a server
client.channels.get(channel).send(sayMessage); // client here may need to be replaced with bot, or app, or whatever you're using - client.channels returns a collection, which we use get() to find an item in

请清楚一点,这段代码必须放在您的if (command === "say")块中。