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

如何让discord.py bot上传文件至Dropbox并发送分享链接?

实现Discord Bot上传文件至Dropbox并发送分享链接

准备工作

  • 安装Dropbox Python SDK:执行pip install dropbox
  • 获取Dropbox访问令牌:在Dropbox开发者控制台创建Scoped Access类型的应用,勾选files.content.write和files.content.read权限,生成专属访问令牌。

改造后的代码实现

替换你原来的文件发送逻辑,改成上传至Dropbox并生成分享链接:

import os
import discord
from dropbox import Dropbox, exceptions
from dropbox.files import WriteMode
from dropbox.sharing import RequestedVisibility, SharedLinkSettings

# 替换成你的Dropbox访问令牌
DROPBOX_TOKEN = "你的Dropbox访问令牌"
dir_path = "C:/Users/me/Documents/py/bot/files"

# 初始化Dropbox客户端
dbx = Dropbox(DROPBOX_TOKEN)

# 遍历目标文件夹下的文件
for filename in os.listdir(dir_path):
    file_path = os.path.join(dir_path, filename)
    if not os.path.isfile(file_path):
        continue
    
    try:
        # 上传文件至Dropbox根目录(可修改路径,比如"/bot_files/" + filename)
        with open(file_path, "rb") as f:
            dbx.files_upload(f.read(), f"/{filename}", mode=WriteMode.overwrite)
        
        # 创建公开可访问的共享链接
        link_settings = SharedLinkSettings(
            requested_visibility=RequestedVisibility.public
        )
        shared_link = dbx.sharing_create_shared_link_with_settings(
            f"/{filename}", settings=link_settings
        )
        
        # 发送分享链接到Discord频道
        await ctx.channel.send(f"文件 {filename} 已上传:{shared_link.url}")
    
    except exceptions.ApiError as e:
        await ctx.channel.send(f"上传文件 {filename} 失败:{str(e)}")
    except Exception as e:
        await ctx.channel.send(f"处理文件 {filename} 时出错:{str(e)}")

关键说明

  • 上传路径:代码默认上传到Dropbox根目录,你可以修改f"/{filename}"为自定义路径(比如"/bot_storage/{filename}"),方便分类管理文件。
  • 共享权限:如果不需要公开访问,可将RequestedVisibility.public改为RequestedVisibility.team_only或RequestedVisibility.password(需额外设置密码)。
  • 大文件支持:Dropbox SDK会自动处理大文件的分块上传,无需额外编写分块逻辑,50MB级别的文件完全适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:05:00