用 ChatGPT 写了个备份自部署 bitwarden 数据发送到 tg bot 的脚本

36 天前
 sdyung

代码需修改三处:

  1. 修改为自己本地 bitwarden/vaultwarden 的 Data 文件夹路径
  2. 修改为自己 telegram 帐号 chat id
  3. 修改为自己 telegram bot token 然后添加定时自动执行就可以了。
import os
import shutil
import requests
from datetime import datetime

# 获取当前日期和时间
current_date = datetime.now().strftime("%Y 年%m 月%d 日")
current_time = datetime.now().strftime("%H 点%M 分%S 秒")
backup_date = datetime.now().strftime("%Y%m%d")  # 用于文件名的简洁日期格式

# 文件路径和压缩包名称(使用日期命名)
folder_to_backup = "此处修改路径为自己 bitwarden 的 DATA 文件夹路径"
backup_zip = f"/tmp/Bitwarden_{backup_date}.zip"

print("[1/4] 开始压缩文件夹...")
# 压缩文件夹
shutil.make_archive(backup_zip.replace('.zip', ''), 'zip', folder_to_backup)
print(f"[2/4] 文件夹已成功压缩,生成的备份文件:{backup_zip}")

# 获取备份文件大小(单位:MB ,保留两位小数)
file_size_mb = os.path.getsize(backup_zip) / (1024 * 1024)
file_size_text = f"{file_size_mb:.2f}MB"
print(f"备份文件大小:{file_size_text}")

# Telegram bot 信息
chat_id = "此处修改为自己 telegram 帐号 chat id"
bot_token = "此处修改为自己 telegram bot token"
telegram_api_url = f"https://api.telegram.org/bot{bot_token}/sendDocument"

# 推送文件和文字说明
message_caption = (
    f"今日份 Bitwarden 自动备份成功,以下是本次备份的详细信息:\n"
    f"备份时间:{current_date} {current_time}\n"
    f"备份大小:{file_size_text}"
)

print("[3/4] 开始推送文件到 Telegram...")
with open(backup_zip, 'rb') as file:
    response = requests.post(
        telegram_api_url,
        data={'chat_id': chat_id, 'caption': message_caption},
        files={'document': file}
    )

# 检查请求是否成功
if response.status_code == 200:
    print("[4/4] 备份文件已成功发送到 Telegram !")
    print(f"推送文件名:Bitwarden_{backup_date}.zip")
    # 删除本地的 zip 文件
    os.remove(backup_zip)
    print(f"本地备份文件 {backup_zip} 已删除。")
else:
    print(f"[4/4] 推送失败,错误信息:{response.text}")

1566 次点击
所在节点    Python
5 条回复
azio7
36 天前
服务端没有需要备份的东西吧,客户端你多端使用,有一端炸了可以用另一端的数据恢复
aezx
36 天前
有没有邮箱版本?
sdyung
36 天前
@aezx 如果用宝塔的话,在宝塔直接添加定时任务就有发送到邮箱的选项。
aezx
36 天前
@sdyung #3 没用宝塔
bao3
36 天前
这倒是一个好的解决办法。明天放到我的服务器上

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1093907

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX