【问题标题】:Send a message with Discord.js使用 Discord.js 发送消息
【发布时间】:2020-08-04 00:38:49
【问题描述】:

我正在尝试制作一个不和谐机器人,但我不太了解 Discord.js。 我的代码如下所示:

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

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

谁能帮帮我?

【问题讨论】:

  • 您阅读过文档吗?
  • if 语句在任何时候都是真的吗?请尝试使用 console.log("test") 并将其放在 if 语句中并检查控制台的输出
  • 我已经浏览了文档
  • @MártonKissik 不要使用该链接,因为它包含过时的信息。使用 discord.js.org/#/docs/main/stable/general/welcome 。您使用message.channel.send("Something")发送消息

标签: javascript node.js discord discord.js


【解决方案1】:

发送代码已再次更改。问题和答案中的项目都已过时。对于版本 12,下面将是正确的代码。有关此代码的详细信息,请参阅此link

向特定频道发送消息

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

向 DM 中的特定用户发送消息

const user = <client>.users.cache.get('<id>');
user.send('<content>');

如果您想向用户发送 DM,请注意机器人和用户应至少拥有一台公共服务器。

希望这个答案对版本 12 之后来这里的人有所帮助。

【讨论】:

    【解决方案2】:

    您的.send() 行中有错误。您当前的代码在早期版本的 discord.js 库中使用过,实现此目的的方法已更改。

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

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

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

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

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

    (使用异步/等待)

    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

    【讨论】:

      【解决方案3】:

      最佳答案已过时

      新方法是:

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

      在获取频道 ID 时添加一些上下文; 所有频道的列表存储在client.channels 属性中。

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

      【讨论】:

        【解决方案4】:

        您可以通过四种方式来实现您想要实现的目标,您可以使用提及用户的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
        })
        

        还可以选择 dm 用户,可以通过以下方式实现:

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

        the official documentation

        【讨论】:

        • 有3种方式。你也可以给用户私信。
        【解决方案5】:

        下面是 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

        【讨论】:

          【解决方案6】:

          您只能向频道

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

          如果你想 DM 用户,那么你可以使用 User.send() 函数

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

          【讨论】:

            【解决方案7】:

            发送消息的方式类型: DM 运行命令的人:

            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")
             }
            });
            

            【讨论】:

              【解决方案8】:

              这是message.channel.send("content");,因为您正在向当前频道发送消息。

              【讨论】:

              • 错误的链接哎呀哈哈,discord.js.org/# 是我要放的链接
              • 这是一个将近 3 年的主题,但仍然感谢 ;)
              • 没意识到 lmao,没问题
              猜你喜欢
              • 2018-08-25
              • 1970-01-01
              • 2020-11-25
              • 2021-04-01
              • 2021-02-05
              • 2020-10-08
              • 2020-06-13
              • 2021-10-17
              相关资源
              最近更新 更多