Add data export command
This commit is contained in:
		| @@ -1,5 +1,7 @@ | ||||
| from datetime import datetime | ||||
| import io | ||||
| import itertools | ||||
| import json | ||||
| import os | ||||
| import re | ||||
| from urllib.parse import urlparse | ||||
| @@ -627,4 +629,48 @@ async def invite_link(conn, message, args): | ||||
|  | ||||
|     url = oauth_url(client_id, permissions) | ||||
|     logger.debug("Sending invite URL: {}".format(url)) | ||||
|     return True, url | ||||
|     return True, url | ||||
|  | ||||
| @command(cmd="export", description="Exports system data to a machine-readable format.") | ||||
| async def export(conn, message, args): | ||||
|     system = await db.get_system_by_account(conn, message.author.id) | ||||
|  | ||||
|     if system is None: | ||||
|         return False, "No system is registered to this account." | ||||
|  | ||||
|     members = await db.get_all_members(conn, system["id"]) | ||||
|     accounts = await db.get_linked_accounts(conn, system["id"]) | ||||
|     switches = await get_front_history(conn, system["id"], 999999) | ||||
|  | ||||
|     data = { | ||||
|         "name": system["name"], | ||||
|         "hid": system["hid"], | ||||
|         "description": system["description"], | ||||
|         "tag": system["tag"], | ||||
|         "avatar_url": system["avatar_url"], | ||||
|         "created": system["created"].isoformat(), | ||||
|         "members": [ | ||||
|             { | ||||
|                 "name": member["name"], | ||||
|                 "hid": member["hid"], | ||||
|                 "color": member["color"], | ||||
|                 "avatar_url": member["avatar_url"], | ||||
|                 "birthday": member["birthday"].isoformat() if member["birthday"] else None, | ||||
|                 "pronouns": member["pronouns"], | ||||
|                 "description": member["description"], | ||||
|                 "prefix": member["prefix"], | ||||
|                 "suffix": member["suffix"], | ||||
|                 "created": member["created"].isoformat() | ||||
|             } for member in members | ||||
|         ], | ||||
|         "accounts": [str(uid) for uid in accounts], | ||||
|         "switches": [ | ||||
|             { | ||||
|                 "timestamp": timestamp.isoformat(), | ||||
|                 "members": [member["hid"] for member in members] | ||||
|             } for timestamp, members in switches | ||||
|         ] | ||||
|     } | ||||
|  | ||||
|     f = io.BytesIO(json.dumps(data).encode("utf-8")) | ||||
|     await client.send_file(message.channel, f, filename="system.json") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user