当前位置: 首页 > 知识库问答 >
问题:

如何使DIscord.js机器人实际回复消息?

尹超
2023-03-14

我一直在制作一个Discord.js(V12)机器人,它支持命令“说”的类型(请注意,我是新来的),但是当我使用这个“说”命令并在特定的消息中单击“回复”时,它只是发送我已经写道,它根本不显示我回复的原始消息。这是我用机器人写的,这里是结果。

我的“say”命令代码很简单,因为我找不到实际的回复函数,所以无法添加它(我必须删除内容,以便更准确)。

client.on('message', (message) => {
    if (message.content.startsWith('p:')) {
      //This line reads the content of the message, creates the variable "say" for it.
        var say = message.content;
      //This removes my message, so it can be replaced by bot's one.
        message.delete();
      //This line deletes the prefix from "say" and sends the rest of the message.
        message.channel.send(say.replace('p:', '')
    .catch(() => console.error('Failed to send - Can\'t send empty messages!'));
    }
});

我发现还有另一种方式可以回答。这里有两个:第一个是正常的,另一个是由bot-Tupperbox创建的Tupperhook(Webhook)。

有没有办法为bot制作至少一个版本的Webhook回复?

在Webhook方法可以工作的情况下,我已经有了在嵌入中跳转到消息的方法(在本例中,原始消息触发了一个特定的命令-这将被更改为跳转到回复消息),下面是代码。

//These should be in the embed command.
//This line recognizes the servers the bot is in.
  var guild = message.guild
//This other line recognizes the channels of the servers.
  var channel = message.channel
//This one sends the word "Message" and includes a link to the message that triggered this command.
  `[Message](https://discordapp.com/channels/${guild.id}/${channel.id}/${message.id})`

是否可以使我的代码适应这些回复函数?我发誓一个月以来我一直在尝试。非常感谢您的回答!

共有2个答案

融烨磊
2023-03-14

我使用v12discord.js包来回复消息。

如果我理解正确的话,你想做这样的东西吗?

结果

在npm中,安装一个名为“不和谐-回复”的包。

npm i discord-reply

然后,你定义了不和谐。js,需要discord回复包。这样做:

const discord = require('discord.js');
require('discord-reply'); //IMPORTANT: put this before defining the client
const client = new discord.Client();

然后,而不是信息。发送或发送消息。回复仅使用:

message.lineReply('Text goes here')

然而,如果你不想提到一个用户的回复,使用这个:

message.lineReplyNoMention('Text goes here');

就这么简单!

司空默
2023-03-14

在v12中没有办法做到这一点,但可以通过API请求更具体地创建消息。

允许我们回复消息的字段是message\u reference

const fetch = require('node-fetch')
client.on("message", (message) => {
  if (message.author.bot) return;
  const url = `https://discord.com/api/v8/channels/${message.channel.id}/messages`;
  var payload = {
    content: "Hello, World!",
    tts: false,
    message_reference: {
      message_id: message.id
    }
  };
   fetch(url, {
    method: "POST",
    body: JSON.stringify(payload),
    headers: {
      Authorization: `${client.user?.bot ? "Bot " : ""}${client.token}`,
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
  }).catch(() => { });
});
 类似资料:
  • 我是一个编程新手。几天前,我开始开发我的第一个discord机器人,你知道,让我和我的朋友一起玩。现在,让我们假设我想让这个机器人检测消息中的单词,并在每次有人提到该单词时回复,无论消息的哪个部分。我能做到,但现在有个问题。假设我要找的单词是“你好”。如果有人说“哦,你好”,“你好”,一条写着“你好”的消息,机器人会回复“你好”。但是机器人也会在自己的消息中检测到hello,并一遍又一遍地回复自己

  • 我需要我的机器人回复一个特定的角色,如果用户没有这个角色,机器人会回复另一条消息说“你不允许执行这个命令”,这是我的代码:

  • 下面是代码: 出于某种原因,即使我使用用户id,bot也总是输出“未找到用户”。机器人有权这么做,有人知道解决办法吗?

  • 最近,不和谐增加了新功能,当用户回复消息时,它会引用它,并添加一行回复者的个人资料图片与原始发件人的个人资料图片和消息,如图所示(我回复来自机器人的消息): 有可能不和谐地做这件事吗。js? 目前,我使用,但是机器人只是发送一条消息,而不是实际回复(发送“回复类型”消息),这是我通过应用程序的GUI手动回复消息时显示的(如上所示)。

  • 我刚开始用node学习javascript。js和我正在尝试创建一个音乐机器人,我已经设置了命令处理程序和所有东西,但是,当我尝试运行play命令时,我一直会遇到这个错误 错误:未找到FFmpeg/avconv!在功能上。getInfo(C:\Users\johnd\OneDrive\Desktop\discordBot\node\u modules\prism media\src\core\FF

  • 我想制作一个可分页队列命令,这样我就可以用反应控制整个队列。但是,每当我运行命令时,总是会出现错误。因此,我希望每当消息作者对⏹" 反应。这是我的密码: 但是,即使在机器人对停止反应作出反应时删除它。我从bot收到一条消息,说发生了一个错误。我无法理解为什么,也无法理解如何解决它。你能帮我吗?提前谢谢!