You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用discord.js一次性向Discord服务器批量添加多个表情

Discord.js 批量添加服务器自定义表情实现方法

核心改造逻辑

原有单表情添加逻辑只覆盖了单个表情的解析、校验、创建流程,要实现批量添加,仅需做几处针对性调整:

  • 从指令参数中提取所有传入的表情字符串,而非固定读取单个表情值
  • 遍历每个表情依次执行合法性校验、服务器内重复校验
  • 给表情创建接口加await等待执行结果,同时控制请求频率避免触发Discord速率限制
  • 统一统计添加成功、重复跳过、添加失败的表情条目,最终一次性汇总返回结果

注意:Discord对单服务器自定义表情数量有上限限制,无boost的普通服务器最多可添加50个自定义表情,服务器boost等级提升后额度会对应上涨,批量添加前请确认服务器剩余可用表情额度。

改造后可直接使用的代码

// 指令使用示例:!addbulkemoji <自定义表情1> <自定义表情2> <自定义表情3> ...
// 切割消息内容拿到所有传入的表情参数,prefix替换为你自己机器人设置的指令前缀即可
const emojiArgs = message.content.slice(prefix.length).trim().split(/\s+/).slice(1);
if (!emojiArgs.length) return message.channel.send('请输入至少一个要添加的自定义表情!');

// 初始化结果统计数组
const successList = [];
const existList = [];
const failedList = [];

// 逐个处理传入的表情
for (const emojiStr of emojiArgs) {
  const emoticon = require('discord.js').Util.parseEmoji(emojiStr);
  // 过滤非有效自定义表情
  if (!emoticon?.id) {
    failedList.push(`${emojiStr}(不是有效的自定义表情)`);
    continue;
  }
  // 过滤服务器内已存在的表情
  if (message.guild.emojis.cache.has(emoticon.id)) {
    existList.push(emoticon.name);
    continue;
  }
  // 自动识别表情格式拼接CDN地址
  const emojiUrl = `https://cdn.discordapp.com/emojis/${emoticon.id}.${emoticon.animated ? 'gif' : 'png'}`;
  try {
    // 等待表情创建完成后再进入下一个循环
    const newEmoji = await message.guild.emojis.create(emojiUrl, emoticon.name || 'Emoji');
    successList.push(newEmoji.name);
    // 加300ms间隔避免触发速率限制
    await new Promise(resolve => setTimeout(resolve, 300));
  } catch (error) {
    failedList.push(`${emoticon.name}(错误原因:${error.message})`);
  }
}

// 汇总结果回复用户
let replyContent = '批量添加表情执行完成:\n';
if (successList.length) replyContent += `✅ 添加成功:${successList.join('、')}\n`;
if (existList.length) replyContent += `⚠️ 已存在跳过:${existList.join('、')}\n`;
if (failedList.length) replyContent += `❌ 添加失败:${failedList.join('、')}`;
await message.reply(replyContent);

关键细节说明

  • 原单表情示例代码中message.guild.emojis.create是异步方法,未加await会出现接口还没返回结果就提前发送成功提示的问题,改造后已补全异步等待逻辑
  • 遍历过程中增加了300ms的请求间隔,避免短时间发起大量接口调用触发Discord的速率限制
  • 代码自动识别传入表情是静态还是动态类型,自动匹配png/gif后缀的资源地址,无需手动区分表情格式

内容的提问来源于stack exchange,提问作者WOLF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:42:24