在我的不和谐服务器中显示所有表情的列表会返回错误

时间:2020-10-09 08:12:55

标签: javascript node.js string discord discord.js

我正在运行服务器,并且有一个命令通过机器人列出了服务器中的所有表情,但是却给我一个错误,提示已达到字符限制。 我知道为什么会发生此问题,我只是没有办法解决它。

    //lists all emotes of the current server
let emojiRegex = new RegExp('^' + prefix + '((emoji)|(emotes))$', 'gi');
if (emojiRegex.exec(msg)) {
    // if (msg.startsWith(prefix + "emotes" || msg.startsWith(prefix + "emoji"))) {
    const emojiList = message.guild.emojis.map(e => e.toString()).join(" ");
    message.channel.send(emojiList);
}

由于出现了不和谐的表情,以emotename:emoteID或类似的形式出现,这似乎导致消息超过2000个字符

2 个答案:

答案 0 :(得分:2)

如果您的消息只是文本(因此不是嵌入消息),则可以使用split option in MessageOptions将文本拆分为可接受的块。默认情况下,它将在任何换行符(\ n)上分割文本,但是由于您没有该字符,因此我们需要提供自己的分割符。将您的代码更改为以下代码,它应该可以正常工作:

//lists all emotes of the current server
let emojiRegex = new RegExp('^' + prefix + '((emoji)|(emotes))$', 'gi');
if (emojiRegex.exec(msg)) {
    // if (msg.startsWith(prefix + "emotes" || msg.startsWith(prefix + "emoji"))) {
    const emojiList = message.guild.emojis.map(e => e.toString()).join(" ");

    // Split the message on a space since we know those are in the message
    // because of the .join function
    message.channel.send(emojiList, {split: {char: ' '}});
}

答案 1 :(得分:0)

有一个非常简单的方法可以避免2000个字符的限制,您要做的就是在发送消息时添加split参数,就像这样:

let emojiRegex = new RegExp('^' + prefix + '((emoji)|(emotes))$', 'gi');
if (emojiRegex.exec(msg)) {
    const emojiList = message.guild.emojis.map(e => e.toString()).join(" ");
    message.channel.send(emojiList, { split: true }); // as you can see, we have added the split parameter here so every time it hits the character limit, it send's the first message then follow's it up with another message.
}

希望这对您有所帮助!