我正在为我的机器人编写投票功能,我可以通过与机器人聊天来创建投票。机器人创建的“投票”只是其他用户可以对投票做出反应的基本消息。我正在努力寻找一种方法来告诉机器人我想要每个可能的答案的表情符号。我现在的想法是为每个可能的答案给机器人写一条消息,其中包含一个表情符号和答案(“:white_check_mark:是”)。经过数小时的尝试和搜索,我没有找到任何方法来检查消息的第一部分是否是表情符号。我发现了很多关于搜索 ":"、"<:" 或 " 编辑:
我基本上只需要一种检查消息是否包含表情符号的方法。但是,我被要求附上我的代码,这几乎可以让您了解我的工作方式。我需要检查消息是否以表情符号开头,因为它必须如此,以便机器人知道他需要用哪个表情符号对消息做出反应,而他显然无法对不是表情符号的东西做出反应。 谢谢
诺亚
答案 0 :(得分:1)
我建议执行以下操作:首先,我将为您的命令创建基本的消息处理。如果您还没有完成,请查看 discord.js 指南。
client.on("message", (message) => {
if (!message.content.startsWith("!poll")) return;
});
请注意,出于上述简单原因,我并没有担心机器人消息或 DM 之类的事情。
现在关于表情符号识别。一般而言,discord.js 或 Discord 实际上确实为您提供了 Unicode 格式的表情符号,并且 NOT 标记在两个冒号之间,就像在 Discord 用户应用程序中一样。这意味着您必须以不同的方式拆分 message.content
。我在下面的代码片段中的做法可能不适用于动画表情符号。不幸的是,我无法测试,因为我没有 Discord Nitro。但是,您可以自己扩展 match
If 条件。 This 相关问题对您正在尝试做的事情非常有用。
根据我自己的经验,编写一个 RegEx 来匹配所有数以千计的表情符号变得非常困难。因此我建议使用一个名为 emoji-regex
的 NPM 包请注意,我创建了一个示例消息对象,以便您可以查看我们正在使用的内容。
<块引用>npm i emoji-regex
const emojiRegex = require('emoji-regex/RGI_Emoji.js');
const message = {
content: "!poll ? ?",
};
const re = emojiRegex();
let match;
let emojis = [];
while ((match = re.exec(message.content)) != null) {
emojis.push(match[0]);
}
console.log(emojis);
最后让我们把它们放在一起:
const Discord = require("discord.js");
const client = new Discord.Client();
const emojiRegex = require("emoji-regex/RGI_Emoji.js");
client.on("message", async (message) => {
if (!message.content.startsWith("!poll")) return;
console.log(message.content);
const re = emojiRegex();
let match;
let emojis = [];
while ((match = re.exec(message.content)) != null) {
emojis.push(match[0]);
}
const sent = await message.channel.send("This is my poll!");
emojis.forEach(async (e) => {
await sent.react(e);
});
});
client.login("your-awesome-token-goes-here-:D");
不要忘记使您的 client.on("message", async () => ...
-callback 和 .forEach(...
-callback 异步,因为我在上面的示例中使用了 Asynchronous JavaScript。
现在,如果您想创建您的反应收集器,我再次建议您遵循 discord.js Collectors 指南。