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

Discord bot点击按钮后复制字符串到剪贴板失败如何解决?

问题根因

1. 剪贴板操作的作用范围完全错误

clipboard 库操作的是bot程序运行所在主机的系统剪贴板,和点击按钮的用户设备没有任何关系。你看到没有报错是因为字符串已经成功复制到了bot所在机器的剪贴板,只是你在自己的设备上当然粘贴不到这个内容。

2. 代码存在未定义变量错误

on_button_click 事件的回调参数只有interaction,你直接使用未定义的ctx变量调用send方法,属于语法错误,你没有看到报错大概率是异常被上层逻辑吞掉了。

3. 依赖库已过时

你用的discord-components是多年前Discord原生不支持消息组件时的第三方扩展,目前已经停止维护,新版discord.py v2.0+已经原生支持所有消息组件功能,包括专门的剪贴板复制按钮。


正确实现方案

Discord官方已经提供了用户端剪贴板复制的原生能力,不需要服务端操作任何剪贴板,用户点击按钮时Discord客户端会自动完成复制逻辑。

步骤1:安装最新版discord.py

pip install discord.py

步骤2:示例代码

import discord
from discord import ui

# 定义带复制按钮的视图
class CopyView(ui.View):
    def __init__(self, target_text: str):
        super().__init__(timeout=None)
        # 直接通过copy_text参数指定要复制的内容
        self.add_item(ui.Button(
            label="复制到剪贴板",
            style=discord.ButtonStyle.secondary,
            custom_id="copy_btn",
            copy_text=target_text
        ))

@client.command()
async def command(ctx, *args):
    # 传入需要复制的字符串
    view = CopyView(target_text="my string")
    await ctx.send("点击下方按钮复制内容", view=view)

# 可选:添加点击后的回调提示
@client.event
async def on_interaction(interaction: discord.Interaction):
    if interaction.type == discord.InteractionType.component and interaction.data.get("custom_id") == "copy_btn":
        # ephemeral=True表示提示仅当前点击用户可见
        await interaction.response.send_message("字符串已成功复制到剪贴板", ephemeral=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:04