所以基本上,我尝试编写一些代码,以便当用户在#general中键入.say“ message”时,机器人将转到#general频道并说出“ message”
我尝试了很多代码,但是我不知道如何为机器人分配一个通道来表达信息。
`bot.on('message', message => {
const args = message.content.split(" ").slice(1);
if(message.content.startsWith('.say')) {
message.delete()
var saytext = args.join(" ");
message.channel.send(saytext)
};
} )`
因此,当我键入.say时,代码就可以正常工作了,然后机器人在该通道中说出了什么,用户便说出了代码,但是我想要的是使该机器人在另一个通道而不是同一通道中发送消息。我的意思是,如果服务器使用#general和#Music,并且用户使用的是#general并刚刚键入.say我喜欢#Music中的音乐,则机器人会在“#”中说“我喜欢#Music中的音乐”,而不是“我喜欢#Music中的音乐”音乐”。
答案 0 :(得分:0)
您无需检索message.channel.send
(使机器人在与发送消息的通道相同的位置上回答),而是需要检索指定的通道。
为此,您可以使用message.mentions.channels
来检测命令中提到的哪个频道。
这里是如何执行此操作的示例。另请注意,在我的情况下,我使用.say <#channel> <message>
之类的命令使其工作,该语法比您所要求的语法更易于解析。
在您的情况下,您必须输入“ .say #Music我爱音乐”。该机器人可以访问的任何渠道。
bot.on('message', message => {
if (message.content.startsWith(".say")) {
// Get the channel mention
if (message.mentions.channels.size == 0) {
message.reply("please mention a channel first.");
}
else {
let targetChannel = message.mentions.channels.first();
// Get the message to print
const args = message.content.split(" ").slice(2);
let saytext = args.join(" ");
targetChannel.send(saytext);
message.delete();
}
});