我正在运行服务器,并且有一个命令通过机器人列出了服务器中的所有表情,但是却给我一个错误,提示已达到字符限制。 我知道为什么会发生此问题,我只是没有办法解决它。
//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个字符
答案 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.
}
希望这对您有所帮助!