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
相关产品推荐
相关产品推荐

