1
0
Fork 0

Switch utils to slash commands

This commit is contained in:
Ethanell 2021-01-06 17:02:15 +01:00
parent 404cf8b97a
commit d349a398c5
3 changed files with 46 additions and 45 deletions

View file

@ -1,10 +1,12 @@
from discord import Intents from discord import Intents
from discord_slash import SlashCommand
from administrator.config import config from administrator.config import config
import db import db
from discord.ext import commands from discord.ext import commands
bot = commands.Bot(command_prefix=config.get("prefix"), intents=Intents.all()) bot = commands.Bot(command_prefix=config.get("prefix"), intents=Intents.all())
slash = SlashCommand(bot, auto_register=True)
import extensions import extensions

View file

@ -2,6 +2,7 @@ from discord import Embed
from discord.ext import commands from discord.ext import commands
from discord.ext.commands import CommandNotFound, MissingRequiredArgument, BadArgument, MissingPermissions, \ from discord.ext.commands import CommandNotFound, MissingRequiredArgument, BadArgument, MissingPermissions, \
NoPrivateMessage, CommandError, NotOwner NoPrivateMessage, CommandError, NotOwner
from discord_slash import SlashContext
from administrator import config from administrator import config
from administrator.check import ExtensionDisabled from administrator.check import ExtensionDisabled
@ -38,19 +39,26 @@ class Help(commands.Cog):
@commands.Cog.listener() @commands.Cog.listener()
async def on_command_error(self, ctx: commands.Context, error): async def on_command_error(self, ctx: commands.Context, error):
await self.error_handler(ctx, error)
@commands.Cog.listener()
async def on_slash_command_error(self, ctx: SlashContext, error: Exception):
await self.error_handler(ctx, error)
@staticmethod
async def error_handler(ctx, error: Exception):
if isinstance(error, CommandNotFound): if isinstance(error, CommandNotFound):
await ctx.message.add_reaction("\u2753") await ctx.send(content="\u2753")
elif isinstance(error, MissingRequiredArgument) or isinstance(error, BadArgument): elif isinstance(error, MissingRequiredArgument) or isinstance(error, BadArgument):
await ctx.message.add_reaction("\u274C") await ctx.send(content="\u274C")
elif isinstance(error, NotOwner) or isinstance(error, MissingPermissions)\ elif isinstance(error, NotOwner) or isinstance(error, MissingPermissions) \
or isinstance(error, NoPrivateMessage): or isinstance(error, NoPrivateMessage):
await ctx.message.add_reaction("\U000026D4") await ctx.send(content="\U000026D4")
elif isinstance(error, ExtensionDisabled): elif isinstance(error, ExtensionDisabled):
await ctx.message.add_reaction("\U0001F6AB") await ctx.send(content="\U0001F6AB")
else: else:
await ctx.send("An error occurred !") await ctx.send(content="An error occurred !")
raise error raise error
await ctx.message.delete(delay=30)
def setup(bot): def setup(bot):

View file

@ -1,9 +1,11 @@
from datetime import datetime from datetime import datetime
from discord import Embed, Member, Guild from discord import Embed, Guild
from discord.ext import commands from discord.ext import commands
from discord.ext.commands import BadArgument, CommandError from discord_slash import cog_ext, SlashContext, SlashCommandOptionType
from discord_slash.utils import manage_commands
from administrator import slash
from administrator.check import is_enabled from administrator.check import is_enabled
from administrator.logger import logger from administrator.logger import logger
@ -15,34 +17,17 @@ logger = logger.getChild(extension_name)
class Utils(commands.Cog): class Utils(commands.Cog):
def __init__(self, bot: commands.Bot): def __init__(self, bot: commands.Bot):
self.bot = bot self.bot = bot
slash.get_cog_commands(self)
def description(self): def description(self):
return "Some tools" return "Some tools"
@commands.group("utils", pass_context=True)
@is_enabled()
async def utils(self, ctx: commands.Context):
if ctx.invoked_subcommand is None:
await ctx.invoke(self.utils_help)
@utils.group("help", pass_context=True)
async def utils_help(self, ctx: commands.Context):
embed = Embed(title="Utils help")
try:
if await self.eval.can_run(ctx):
embed.add_field(name="eval \`\`\`code\`\`\`", value="Execute some code", inline=False)
except CommandError:
pass
embed.add_field(name="ping", value="Return the ping with the discord API", inline=False)
embed.add_field(name="info [@user]", value="Show information on guild or user specified", inline=False)
await ctx.send(embed=embed)
@commands.group("eval", pass_context=True) @commands.group("eval", pass_context=True)
@commands.is_owner() @commands.is_owner()
async def eval(self, ctx: commands.Context): async def eval(self, ctx: commands.Context):
start = ctx.message.content.find("```") start = ctx.message.content.find("```python")
end = ctx.message.content.find("```", start+3) end = ctx.message.content.find("```", start+9)
command = ctx.message.content[start+3:end] command = ctx.message.content[start+9:end]
try: try:
exec("async def __ex(self, ctx):\n" + command.replace("\n", "\n ")) exec("async def __ex(self, ctx):\n" + command.replace("\n", "\n "))
out = str(await locals()["__ex"](self, ctx)) out = str(await locals()["__ex"](self, ctx))
@ -55,20 +40,20 @@ class Utils(commands.Cog):
except Exception as e: except Exception as e:
await ctx.send(f"```{e.__class__.__name__}: {e}```") await ctx.send(f"```{e.__class__.__name__}: {e}```")
@commands.group("ping", pass_context=True) @cog_ext.cog_slash(name="ping", description="Return the ping with the discord API")
@is_enabled() @is_enabled()
async def ping(self, ctx: commands.Context): async def ping(self, ctx: SlashContext):
start = datetime.now() start = datetime.now()
msg = await ctx.send(f"Discord WebSocket latency: `{round(self.bot.latency*1000)}ms`") content = f"Discord WebSocket latency: `{round(self.bot.latency*1000)}ms`"
await msg.edit(content=msg.content+"\n"+f"Bot latency: `{round((msg.created_at - start).microseconds/1000)}ms`") await ctx.send(content=content)
await ctx.edit(content=content+"\n"+f"Bot latency: `{round((datetime.now() - start).microseconds/1000)}ms`")
@commands.group("info", pass_context=True) @cog_ext.cog_slash(name="info",
description="Show information on guild or user specified",
options=[manage_commands.create_option("user", "A user", SlashCommandOptionType.USER, False)])
@is_enabled() @is_enabled()
async def info(self, ctx: commands.Context): async def info(self, ctx: SlashContext, user: SlashCommandOptionType.USER = None):
if len(ctx.message.mentions) > 1: if user:
raise BadArgument()
elif ctx.message.mentions:
user: Member = ctx.message.mentions[0]
embed = Embed(title=str(user)) embed = Embed(title=str(user))
embed.set_author(name="User infos", icon_url=user.avatar_url) embed.set_author(name="User infos", icon_url=user.avatar_url)
embed.add_field(name="Display name", value=user.display_name) embed.add_field(name="Display name", value=user.display_name)
@ -129,11 +114,11 @@ class Utils(commands.Cog):
embed.add_field(name="Shard ID", value=guild.shard_id) embed.add_field(name="Shard ID", value=guild.shard_id)
embed.add_field(name="Created at", value=guild.created_at) embed.add_field(name="Created at", value=guild.created_at)
await ctx.send(embed=embed) await ctx.send(embeds=[embed])
@commands.group("about", pass_context=True) @cog_ext.cog_slash(name="about", description="Show information about the bot")
@is_enabled() @is_enabled()
async def about(self, ctx: commands.Context): async def about(self, ctx: SlashContext):
embed = Embed(title=self.bot.user.display_name, description=self.bot.description) embed = Embed(title=self.bot.user.display_name, description=self.bot.description)
embed.set_author(name="Administrator", icon_url=self.bot.user.avatar_url, url="https://github.com/flifloo") embed.set_author(name="Administrator", icon_url=self.bot.user.avatar_url, url="https://github.com/flifloo")
flifloo = self.bot.get_user(177393521051959306) flifloo = self.bot.get_user(177393521051959306)
@ -142,9 +127,12 @@ class Utils(commands.Cog):
value=(await self.bot.application_info()).owner.display_name) value=(await self.bot.application_info()).owner.display_name)
embed.add_field(name="Guilds", value=str(len(self.bot.guilds))) embed.add_field(name="Guilds", value=str(len(self.bot.guilds)))
embed.add_field(name="Extensions", value=str(len(self.bot.extensions))) embed.add_field(name="Extensions", value=str(len(self.bot.extensions)))
embed.add_field(name="Commands", value=str(len(self.bot.all_commands))) embed.add_field(name="Commands", value=str(len(self.bot.all_commands)+len(slash.commands)))
embed.add_field(name="Latency", value=f"{round(self.bot.latency*1000)} ms") embed.add_field(name="Latency", value=f"{round(self.bot.latency*1000)} ms")
await ctx.send(embed=embed) await ctx.send(embeds=[embed])
def cog_unload(self):
slash.remove_cog_commands(self)
def setup(bot): def setup(bot):
@ -165,3 +153,6 @@ def teardown(bot):
logger.error(f"Error unloading: {e}") logger.error(f"Error unloading: {e}")
else: else:
logger.info(f"Unload successful") logger.info(f"Unload successful")