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

如何通过Discord.js实现点击按钮复制内容到剪贴板?

Discord.js 实现按钮复制功能及移动端嵌入内容复制方案

核心结论:无法直接访问用户剪贴板

Discord的安全机制禁止第三方应用(包括机器人)直接调用用户设备的剪贴板API——不管是网页端还是移动端,Discord.js机器人都没办法通过点击按钮直接把内容复制到用户剪贴板。

替代解决方案

针对你的需求,推荐以下几种实现思路:

1. 点击按钮发送可复制的代码块

点击按钮后,机器人将需要复制的内容(比如嵌入消息的JSON结构、纯文本内容)用代码块包裹发送,代码块在Discord移动端支持长按一键复制,体验比普通文本好很多。

示例代码:

client.on('interactionCreate', async interaction => {
  if (!interaction.isButton()) return;

  if (interaction.customId === 'copy_embed') {
    // 获取目标嵌入消息的JSON结构
    const targetEmbed = interaction.message.embeds[0];
    const embedJson = JSON.stringify(targetEmbed.toJSON(), null, 2);
    
    // 发送仅当前用户可见的代码块
    await interaction.reply({
      content: `复制嵌入消息的原始代码:\n\`\`\`json\n${embedJson}\`\`\``,
      ephemeral: true
    });
  }
});

2. 点击按钮发送私信

如果内容较长,点击按钮后机器人将内容发送到用户私信,私信页面的文本复制操作在移动端更顺畅,还能避免频道消息刷屏。

示例代码:

client.on('interactionCreate', async interaction => {
  if (!interaction.isButton()) return;

  if (interaction.customId === 'copy_to_dm') {
    const embedContent = interaction.message.embeds[0].description;
    try {
      await interaction.user.send(`你要复制的内容:\n${embedContent}`);
      await interaction.reply({ content: '内容已发送到你的私信!', ephemeral: true });
    } catch (err) {
      await interaction.reply({ content: '无法发送私信,请检查你的隐私设置', ephemeral: true });
    }
  }
});

3. 生成嵌入时同步输出可复制文本

在斜杠命令生成嵌入消息的同时,直接在消息下方附上嵌入内容的纯文本版本或JSON代码块,移动端用户无需点击按钮就能直接长按复制。

移动端复制嵌入内容的优化技巧

  • 优先用代码块包裹需要复制的内容,Discord移动端对代码块的复制支持更友好,长按即可选中全部内容。
  • 避免在嵌入里放过多复杂格式的内容,尽量把关键信息提取成纯文本放在消息正文里,方便移动端用户复制。
  • 利用ephemeral属性发送仅用户可见的消息,避免频道消息混乱,同时提升用户操作的私密性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:10:27