guava/code/cogs/owner/sync.py
2024-07-12 03:08:27 -05:00

60 lines
2.6 KiB
Python

import discord
from discord.ext import commands
class TreeSync(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.group(invoke_without_command=True)
@commands.dm_only()
@commands.is_owner()
async def tree(self, ctx):
await ctx.author.send(f"This is a group command. Use either `{self.bot.command_prefix}tree sync` or `{self.bot.command_prefix}tree clear` followed by an optional guild ID.")
@commands.dm_only()
@commands.is_owner()
@tree.command()
async def sync(self, ctx: commands.Context, *, guild: discord.Object = None):
"""Sync the command tree to a guild or globally."""
if guild:
self.bot.tree.copy_global_to(guild=guild)
await self.bot.tree.sync(guild=guild)
return await ctx.author.send(f"Synced the command tree to `{self.bot.get_guild(guild.id).name}`")
else:
await self.bot.tree.sync()
return await ctx.author.send("Synced the command tree globally.")
@sync.error
async def tree_sync_error(self, ctx, error):
if isinstance(error, commands.ObjectNotFound):
return await ctx.author.send("The guild you provided does not exist.")
if isinstance(error, commands.CommandInvokeError):
return await ctx.author.send("Guild ID provided is not a guild that the bot is in.")
else:
return await ctx.author.send("An unknown error occurred. Perhaps you've been rate limited.")
@commands.dm_only()
@commands.is_owner()
@tree.command()
async def clear(self, ctx: commands.Context, *, guild: discord.Object):
"""Clear the command tree from a guild."""
self.bot.tree.clear_commands(guild=guild)
await self.bot.tree.sync(guild=guild)
return await ctx.author.send(f"Cleared the command tree from `{self.bot.get_guild(guild.id).name}`")
@clear.error
async def tree_sync_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
return await ctx.author.send("You need to provide a guild ID to clear the command tree from.")
if isinstance(error, commands.ObjectNotFound):
return await ctx.author.send("The guild you provided does not exist.")
if isinstance(error, commands.CommandInvokeError):
return await ctx.author.send("Guild ID provided is not a guild that the bot is in.")
else:
return await ctx.author.send("An unknown error occurred. Perhaps you've been rate limited.")
async def setup(bot):
await bot.add_cog(TreeSync(bot))