mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-16 14:34:17 +02:00
Limoka 1.4.0
This commit is contained in:
74
backup.py
Normal file
74
backup.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import argparse
|
||||
import subprocess
|
||||
import os
|
||||
import glob
|
||||
|
||||
parser = argparse.ArgumentParser(description="Backup Script")
|
||||
parser.add_argument(
|
||||
"--token",
|
||||
type=str,
|
||||
required=True,
|
||||
help="Token of Telegram bot",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--api_url",
|
||||
type=str,
|
||||
default="https://api.telegram.org",
|
||||
help="API URL of Telegram API",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--chat_id",
|
||||
type=str,
|
||||
required=True,
|
||||
help="Chat ID to send backup message to",
|
||||
)
|
||||
|
||||
arguments = parser.parse_args()
|
||||
|
||||
async def send_file(session, file_path, caption=None):
|
||||
url = f"{arguments.api_url}/bot{arguments.token}/sendDocument"
|
||||
with open(file_path, 'rb') as f:
|
||||
data = aiohttp.FormData()
|
||||
data.add_field('chat_id', arguments.chat_id)
|
||||
data.add_field('document', f, filename=os.path.basename(file_path))
|
||||
if caption:
|
||||
data.add_field('caption', caption)
|
||||
data.add_field('parse_mode', 'Markdown')
|
||||
async with session.post(url, data=data) as response:
|
||||
return await response.json()
|
||||
|
||||
async def main():
|
||||
# Get commit info
|
||||
commit_message = subprocess.check_output(['git', 'log', '-1', '--pretty=%B']).decode().strip()
|
||||
commit_date = subprocess.check_output(['git', 'log', '-1', '--pretty=%ci']).decode().strip()
|
||||
commit_hash = subprocess.check_output(['git', 'rev-parse', '--short=6', 'HEAD']).decode().strip()
|
||||
commit_url = f"https://github.com/MuRuLOSE/limoka/commit/{subprocess.check_output(['git', 'rev-parse', 'HEAD']).decode().strip()}"
|
||||
message = f"Commit Date: {commit_date}, Commit Message: {commit_message}, Commit Hash: [`{commit_hash}`]({commit_url})"
|
||||
|
||||
# Create zip
|
||||
subprocess.run(['git', 'archive', '--format=zip', '--output=repository-original.zip', 'HEAD'])
|
||||
subprocess.run(['zip', '-9', 'repository.zip', 'repository-original.zip'])
|
||||
os.remove('repository-original.zip')
|
||||
|
||||
# Split zip
|
||||
subprocess.run(['split', '-b', '49M', 'repository.zip', 'repository-part-'])
|
||||
|
||||
# Send parts
|
||||
async with aiohttp.ClientSession() as session:
|
||||
parts = sorted(glob.glob('repository-part-*'))
|
||||
first = True
|
||||
for part in parts:
|
||||
caption = message if first else None
|
||||
result = await send_file(session, part, caption)
|
||||
print(f"Sent {part}: {result}")
|
||||
first = False
|
||||
|
||||
# Cleanup
|
||||
os.remove('repository.zip')
|
||||
for part in parts:
|
||||
os.remove(part)
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user