如何实现Discord机器人支持用户自主选择本地设备图片发送?
解决Discord机器人让用户发送本地图片的问题
你的代码核心问题是easygui是在机器人运行的机器上打开文件选择器——不管谁调用命令,弹出窗口的都是机器人所在的PC,这完全不符合你要让用户从自己设备选图的需求。
正确解决方案:使用Slash命令的附件参数
Disnake原生支持在斜杠命令中添加文件上传选项,直接让用户调用命令时从自己设备选择图片上传,不需要依赖本地GUI工具。
修改后的代码如下:
import disnake from disnake.ext import commands bot = commands.Bot(command_prefix='!', intents=disnake.Intents.all()) @bot.slash_command(name="send", description="发送文本搭配自定义图片") async def send( ctx: disnake.ApplicationCommandInteraction, txt: str, img: disnake.Attachment # 定义为附件参数,自动生成上传按钮 ): # 将用户上传的附件转换为可发送的文件对象 file = await img.to_file() await ctx.channel.send(txt, file=file) # 给用户发送私密反馈,避免频道冗余信息 await ctx.response.send_message("内容已成功发送", ephemeral=True) bot.run("你的机器人令牌")
关键说明
- 把
img参数类型设为disnake.Attachment后,Discord会在命令界面自动添加文件上传按钮,用户调用命令时可直接选择自己设备上的图片。 - 原代码中的
easygui调用完全不需要,它是本地GUI工具,只适合机器人运行端的本地操作,不适合多用户场景。 - 原代码里的
channel = get(ctx.guild.channels)既未导入get函数,也没有实际用途,直接删除即可。
内容的提问来源于stack exchange,提问作者St1X
相关产品推荐
相关产品推荐

