forked from cswimr/SeaCogs
Update backup/backup.py
This commit is contained in:
parent
0e2e8e4216
commit
e94f640712
1 changed files with 48 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
# _____ _
|
||||||
|
# / ____| (_)
|
||||||
|
# | (___ ___ __ _ _____ ___ _ __ ___ _ __ ___ ___ _ __
|
||||||
|
# \___ \ / _ \/ _` / __\ \ /\ / / | '_ ` _ \| '_ ` _ \ / _ \ '__|
|
||||||
|
# ____) | __/ (_| \__ \\ V V /| | | | | | | | | | | | __/ |
|
||||||
|
# |_____/ \___|\__,_|___/ \_/\_/ |_|_| |_| |_|_| |_| |_|\___|_|
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
@ -9,6 +16,8 @@ from redbot.core import commands
|
||||||
from redbot.core.bot import Red
|
from redbot.core.bot import Red
|
||||||
from redbot.core.utils.chat_formatting import error, humanize_list, text_to_file
|
from redbot.core.utils.chat_formatting import error, humanize_list, text_to_file
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=protected-access
|
||||||
class Backup(commands.Cog):
|
class Backup(commands.Cog):
|
||||||
"""A utility to make reinstalling repositories and cogs after migrating the bot far easier."""
|
"""A utility to make reinstalling repositories and cogs after migrating the bot far easier."""
|
||||||
|
|
||||||
|
@ -68,6 +77,9 @@ class Backup(commands.Cog):
|
||||||
if cog.repo_name == repo.name:
|
if cog.repo_name == repo.name:
|
||||||
cog_dict = {
|
cog_dict = {
|
||||||
"name": cog.name,
|
"name": cog.name,
|
||||||
|
# "loaded": cog.name in ctx.bot.extensions.keys(),
|
||||||
|
# this functionality was planned but never implemented due to Red limitations
|
||||||
|
# and the possibility of restoration functionality being added to Core
|
||||||
"pinned": cog.pinned,
|
"pinned": cog.pinned,
|
||||||
"commit": cog.commit,
|
"commit": cog.commit,
|
||||||
}
|
}
|
||||||
|
@ -92,4 +104,39 @@ class Backup(commands.Cog):
|
||||||
elif ctx.message.reference and hasattr(ctx.message.reference, 'resolved'):
|
elif ctx.message.reference and hasattr(ctx.message.reference, 'resolved'):
|
||||||
if ctx.message.reference.resolved.attachments:
|
if ctx.message.reference.resolved.attachments:
|
||||||
try:
|
try:
|
||||||
export
|
export = json.loads(await ctx.message.reference.resolved.attachments[0].read())
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
await ctx.send(error("Invalid JSON in referenced message attachments."))
|
||||||
|
if export is None:
|
||||||
|
await ctx.send(error("Please provide a valid JSON export file."))
|
||||||
|
return
|
||||||
|
|
||||||
|
downloader = ctx.bot.get_cog("Downloader")
|
||||||
|
if downloader is None:
|
||||||
|
await ctx.send(
|
||||||
|
error(
|
||||||
|
f"You do not have the `Downloader` cog loaded. Please run `{ctx.prefix}load downloader` and try again."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
all_repos = list(downloader._repo_manager.repos)
|
||||||
|
|
||||||
|
for repo in export:
|
||||||
|
if repo["name"] not in [r.name for r in all_repos]:
|
||||||
|
try:
|
||||||
|
await downloader._repo_manager.add_repo(
|
||||||
|
repo["url"], repo["name"], repo["branch"]
|
||||||
|
)
|
||||||
|
except errors.ExistingGitRepo:
|
||||||
|
pass
|
||||||
|
|
||||||
|
for cog in repo["cogs"]:
|
||||||
|
try:
|
||||||
|
await downloader._cog_install_interface.install_cog(
|
||||||
|
cog["name"], cog["commit"]
|
||||||
|
)
|
||||||
|
except errors.CogNotFoundError:
|
||||||
|
pass
|
||||||
|
except errors.DownloaderError:
|
||||||
|
pass
|
Loading…
Reference in a new issue