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

Discord.js v14如何实现嵌入消息发送递增计数功能?

Discord机器人消息转嵌入并添加递增序号+@用户实现方案

核心需求回顾

  • 监听指定频道的用户消息
  • 删除原消息,以Embed形式重发
  • 重发时@消息发送者
  • 为每条Embed添加递增序号(#1、#2...)

关键修改点

  1. 序号持久化存储:避免机器人重启后序号重置,用本地JSON文件存储当前序号,每次发送后自增
  2. 添加用户@提及:发送Embed时同时附带@用户的文本
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:36:20