使用Discord.js发送消息

39

我正在尝试制作一个Discord机器人,但我无法完全理解Discord.js。我的代码如下:

client.on('message', function(message) {
 if (message.content === 'ping') {
  client.message.send(author, 'pong');
 }
});

问题在于我不太明白如何发送消息。

有人可以帮我吗?


4
你已经阅读了文件吗? - Andrew Li
请问这个if语句在任何时候都是true吗?请尝试使用console.log("test")并将其放在if语句内,然后检查控制台输出。 - hansTheFranz
我已经仔细阅读了文档。 - Gabe
9个回答

50

发送代码已经再次更改。问题和答案中的所有项目都已过时。对于版本12,下面将是正确的代码。关于此代码的详细信息可在链接中找到。

要向特定频道发送消息

const channel = <client>.channels.cache.get('<id>');
channel.send('<content>');

发送私信给特定用户

const user = <client>.users.cache.get('<id>');
user.send('<content>');
如果你想私信一个用户,请注意机器人和用户至少应该有一个共同的服务器。
希望这个答案能帮助在 12 版本之后到这里来的人们。

40

在你的.send()代码行中存在错误。你目前使用的代码是discord.js库早期版本中使用的,这种方法已经发生了改变。

如果你有一个消息对象,例如在message事件处理程序中,你可以这样向消息对象所在的频道发送消息:

message.channel.send("My Message");

来自 message 事件处理程序的示例:

client.on("message", function(message) {
  message.channel.send("My Message");
});

你还可以向特定的频道发送消息,方法是首先使用其ID获取频道,然后向其发送消息:

(使用async/await)

const channel = await client.channels.fetch(channelID);
channel.send("My Message");

(使用 Promise 回调函数)

client.channels.fetch(channelID).then(channel => {
  channel.send("My Message");
});

适用于 Discord.js 12 版本


8

顶级答案已经过时

新的方法是:

const channel = await client.channels.fetch(<id>);

await channel.send('hi')

关于获取频道ID的一些上下文说明; 所有频道的列表都存储在client.channels属性中。

一个简单的console.log(client.channels)将显示该服务器上所有频道的数组。


3

你可以有四种方式实现你想要的目标,你可以使用 message.reply("Pong") 来提及用户或者使用 message.channel.send("Pong") 来不提及用户,此外在 discord.js 中你还可以通过以下方式发送嵌入内容:

client.on("message", () => {
    var message = new Discord.MessageEmbed()
      .setDescription("Pong") // sets the body of it
      .setColor("somecolor")
      .setThumbnail("./image");
      .setAuthor("Random Person")
      .setTitle("This is an embed")
    msg.channel.send(message) // without mention
    msg.reply(message) // with mention
})

还有一种选项可以通过以下方式与用户进行私信:

client.on("message", (msg) => {
msg.author.send("This is a dm")

})

请查看官方文档


有三种方法。你也可以直接私信用户。 - search-learn

3

以下是向用户发送dm的代码:

(在此情况下,我们的消息不是响应,而是直接发送给所选用户的新消息。)

require('dotenv').config({ path: __dirname + '/.env.local' });

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

client.on("ready", () => {
    console.log(client.users.get('ID_OF_USER').send("hello"));
});

client.login(process.env.DISCORD_BOT_TOKEN);

更多文档:

https://github.com/AnIdiotsGuide/discordjs-bot-guide/blob/master/frequently-asked-questions.md#users-and-members

这是关于IT技术的更多文档。请点击上方链接以获取详细信息。

1

您只能向一个频道发送消息。

client.on('message', function(message) {
 if (message.content === 'ping') {
  message.channel.send('pong');
 }
});

如果您想向用户发送私信,则可以使用User.send()函数。
client.on('message', function(message) {
 if (message.content === 'ping') {
  message.author.send('pong');
 }
});

1

发送消息的方式有以下几种: 向运行命令的人发送私信:

client.on('message', function(message) {
 if (message.content === 'ping') {
  message.author.send('pong');
 }
});

在使用命令的频道中发送消息:
client.on('message', function(message) {
 if (message.content === 'ping') {
  message.channel.send('pong');
 }
});

在特定频道发送消息:
client.on('message', function(message) {
const channel = client.channels.get("<channel id>")
 if (message.content === 'ping') {
  channel.send("pong")
 }
});

0
Discord.js v14.13.0 代码:
// Import d.js library
const { Client, Events } = require('discord.js');

// Your client
const client = new Client({...})

// Sending message
client.on(Events.MessageCreate, (msg) => {
if(msg.content.startsWith('ping') {
 return msg.reply('pong')
}
});

client.login(...)

-1

错误的链接,呵呵,抱歉。实际上我想放的是 https://discord.js.org/#/。 - asciidude
1
这是一个将近三年的旧帖,但还是非常感谢 ;) - Gabe
1
没意识到,哈哈,没问题。 - asciidude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接