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

如何用Discord.js非斜杠命令实现频道固定消息自动重发功能?

Discord.js 非斜杠命令实现固定消息自动重发功能

核心逻辑

通过存储目标频道ID、固定消息内容以及机器人发送的固定消息ID,监听频道新消息事件,当非机器人用户发送消息时,删除原固定消息并重新发送,同时更新存储的消息ID。

实现步骤及代码示例

1. 初始化存储结构

在代码顶部定义一个对象,用来保存各个频道的固定消息配置:

// 存储固定消息配置:key为频道ID,value为{ content: 消息内容, messageId: 机器人发送的消息ID }
const stickyMessages = {};

2. 编写设置固定消息的命令

实现一个非斜杠命令(比如!setsticky),让管理员指定目标频道和消息内容:

client.on('messageCreate', async (message) => {
  // 忽略机器人消息
  if (message.author.bot) return;

  // 仅允许管理员执行设置命令
  if (!message.member.permissions.has('ADMINISTRATOR')) return;

  // 解析命令:!setsticky #频道 消息内容(支持换行)
  const args = message.content.split(/\s+/);
  if (args[0] !== '!setsticky') return;

  // 获取目标频道
  const targetChannel = message.mentions.channels.first() || client.channels.cache.get(args[1]);
  if (!targetChannel || targetChannel.type !== 'GUILD_TEXT') {
    return message.reply('请指定有效的文本频道');
  }

  // 获取消息内容(保留换行格式)
  const content = message.content.slice(args[0].length + (targetChannel.id.length + 2));

  // 在目标频道发送固定消息并保存ID
  const sentMessage = await targetChannel.send(content);
  stickyMessages[targetChannel.id] = {
    content: content,
    messageId: sentMessage.id
  };

  message.reply(`已在${targetChannel}设置固定消息`);
});

3. 监听频道消息实现自动重发

添加消息监听逻辑,当目标频道有新消息时触发重发:

client.on('messageCreate', async (message) => {
  // 忽略机器人消息(避免死循环)
  if (message.author.bot) return;

  // 检查当前频道是否有配置的固定消息
  const stickyConfig = stickyMessages[message.channel.id];
  if (!stickyConfig) return;

  try {
    // 删除原固定消息
    const oldMessage = await message.channel.messages.fetch(stickyConfig.messageId);
    await oldMessage.delete();

    // 重新发送固定消息并更新存储的消息ID
    const newMessage = await message.channel.send(stickyConfig.content);
    stickyMessages[message.channel.id].messageId = newMessage.id;
  } catch (err) {
    // 处理原消息已被删除的情况,直接重新发送
    const newMessage = await message.channel.send(stickyConfig.content);
    stickyMessages[message.channel.id].messageId = newMessage.id;
  }
});

注意事项

  • 权限控制:确保只有管理员能执行!setsticky命令,避免普通用户随意修改固定消息。
  • 消息格式:如果需要发送带Markdown格式的消息(比如示例中的加粗、换行),直接在命令中输入对应格式即可,Discord.js会自动解析。
  • 持久化:如果机器人重启后需要保留配置,需要将stickyMessages数据写入本地文件或数据库(比如JSON文件、SQLite),重启时读取加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:15:38