如何让 DIScord.js 机器人真正回复消息?
Posted
技术标签:
【中文标题】如何让 DIScord.js 机器人真正回复消息?【英文标题】:How do I make a DIscord.js bot actually reply to a message? 【发布时间】:2021-06-26 08:43:52 【问题描述】:我一直在制作一个支持“say”命令类型的 Discord.js (V12) 机器人(请注意我是新手),但是当我使用这个“say”命令并单击“reply”时在特定消息中,它只发送我写的消息,根本不显示我正在回复的原始消息。 Here is what I wrote with the bot 和 here the result。
我的“说”命令代码很简单,因为我找不到实际的回复功能,所以我无法添加它(我不得不删除内容以便更准确)。
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!'));
);
我发现还有另一种回复方式。 Here the two: The first one is the normal and the other is by a Tupperhook (Webhook) created by the bot Tupperbox.
有没有办法为机器人制作至少一个版本的 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)`
是否可以使我的代码适应任何这些回复功能?我发誓我从一个月开始就在尝试这个。任何答案都非常感谢!
【问题讨论】:
this 回答你的问题了吗? 哇,谢谢你的回答!此外,该线程正在解释没有办法让机器人发送正常回复......所以我可以把那部分放在一边,现在我想知道 Webhook 方法是否最初是由机器人的创建者编码的使用那些 Webhook,如果是这种情况,我想我不能做任何其他事情,我几乎不知道编码......我可以尝试制作自己的方法,但由于我是新人,这将很难 - 以防万一Webhooks 有一种已知的方法,我可以为我的机器人制作一个,我会尝试进行更多调查! 【参考方案1】:在 v12 中无法做到这一点,但可以通过更具体的 API 请求 Create Message 来实现。
而允许我们回复消息的字段是message_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(() => );
);
【讨论】:
你不能只使用client.api.channels[channeID].messages.post()
而不是node-fetch 吗?【参考方案2】:
我使用 discord.js v12 的包来回复消息。
如果我理解正确,你想做这样的事情吗?
The result
在 npm 中,安装一个名为“discord-reply”的包。
npm i discord-reply
然后,在您定义 discord.js 的地方,需要 discord-reply 包。这样做:
const discord = require('discord.js');
require('discord-reply'); //IMPORTANT: put this before defining the client
const client = new discord.Client();
然后,而不是 message.send 或 message.reply 只需使用:
message.lineReply('Text goes here')
但是,如果您不想在回复中提及用户,请使用:
message.lineReplyNoMention('Text goes here');
就这么简单!
【讨论】:
以上是关于如何让 DIScord.js 机器人真正回复消息?的主要内容,如果未能解决你的问题,请参考以下文章
从 discord.js 中的消息中获取 Emoji url
即使没有任何错误,我的 discord.js 机器人也不会回复用户消息 [重复]
当有人对消息做出反应时,我如何让我的 discord.js 机器人添加角色?