Discord.js v14如何实现嵌入消息发送递增计数功能?
Discord机器人消息转嵌入并添加递增序号+@用户实现方案
核心需求回顾
- 监听指定频道的用户消息
- 删除原消息,以Embed形式重发
- 重发时@消息发送者
- 为每条Embed添加递增序号(#1、#2...)
关键修改点
- 序号持久化存储:避免机器人重启后序号重置,用本地JSON文件存储当前序号,每次发送后自增
- 添加用户@提及:发送Embed时同时附带@用户的文本
- Embed中插入序号:将递增序号整合到Embed标题中,直观展示编号
完整修改代码
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const v10_1 = require("discord-api-types/v10"); const discord_js_1 = require("discord.js"); const Events_1 = require("../../structures/Events"); const fs = require("fs"); const path = require("path"); // 定义存储序号的文件路径 const sequencePath = path.join(__dirname, "review-sequence.json"); // 读取当前序号,不存在则初始化为1 const getCurrentSequence = () => { try { const data = fs.readFileSync(sequencePath, "utf8"); return JSON.parse(data).sequence || 1; } catch (err) { fs.writeFileSync(sequencePath, JSON.stringify({ sequence: 1 })); return 1; } }; // 更新序号 const updateSequence = (newSequence) => { try { fs.writeFileSync(sequencePath, JSON.stringify({ sequence: newSequence })); } catch (err) { console.error("更新序号失败:", err); } }; exports.default = new Events_1.Event("messageCreate", async (message) => { try { if (message.author.bot) return; if (message.channelId !== process.env.reviewsChannelId) return; if (message.channel.type !== v10_1.ChannelType.GuildNewsThread && message.channel.type !== v10_1.ChannelType.GuildText) return; const content = message?.content; if (!content) return await message.delete(); // 获取并生成序号文本 const currentSeq = getCurrentSequence(); const seqText = `#${currentSeq}`; const reviews = new discord_js_1.EmbedBuilder() .setTitle(`[ <:review:1005784096120782888> ] - Review ${seqText} - [ <:review:1005784096120782888> ]`) .setColor(`#fdaf17`) .setDescription(`**${content}**`) .setTimestamp() .setFooter({ text: `提交者: ${message.author.tag}` }); // 发送@用户消息+嵌入内容 await message.channel.send({ content: `<@${message.author.id}>`, embeds: [reviews] }); // 自增并保存序号 updateSequence(currentSeq + 1); await message.delete(); } catch (error) { console.log(error); } });
代码说明
- 序号持久化:通过读写本地JSON文件保存序号,解决重启后序号重置问题
- 用户提及:利用Discord的用户ID格式
<@用户ID>实现精准@发送者 - 序号展示:将递增序号直接嵌入Embed标题,让每条消息的编号清晰可见
- 额外优化:添加Footer显示提交者标签,增强消息的辨识度
内容的提问来源于stack exchange,提问作者tanaallen
相关产品推荐
相关产品推荐

