首页 > 解决方案 > 在我的不和谐服务器中显示所有表情的列表会返回错误

问题描述

我正在运行一个服务器,并且有一个命令通过机器人列出服务器中的所有表情,但它给了我一个错误,即字符限制被击中。我知道为什么会发生这个问题,但我真的没有办法解决它。

    //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 个字符的消息

标签: javascriptnode.jsstringdiscorddiscord.js

解决方案


如果您的消息只是文本(因此不是嵌入),您可以使用MessageOptions中的 split 选项将文本拆分为可接受的块。默认情况下,这将在任何换行符 (\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: ' '}});
}

推荐阅读