✨ Hot reload extension and dev cog
This commit is contained in:
parent
3cf27d82df
commit
3a231eda10
|
@ -0,0 +1,64 @@
|
||||||
|
import code
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
from discord.ext.commands import command, has_role, Bot
|
||||||
|
from discord.ext.commands import Cog
|
||||||
|
|
||||||
|
from src.constants import *
|
||||||
|
|
||||||
|
|
||||||
|
class DevCog(Cog, name="Dev tools"):
|
||||||
|
def __init__(self, bot: Bot):
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@command(name="interrupt")
|
||||||
|
@has_role(Role.DEV)
|
||||||
|
async def interrupt_cmd(self, ctx):
|
||||||
|
"""
|
||||||
|
(dev) Ouvre une console là où un @dev m'a lancé. :warning:
|
||||||
|
|
||||||
|
A utiliser en dernier recours:
|
||||||
|
- le bot sera inactif pendant ce temps.
|
||||||
|
- toutes les commandes seront executées à sa reprise.
|
||||||
|
"""
|
||||||
|
|
||||||
|
await ctx.send(
|
||||||
|
"J'ai été arrêté et une console interactive a été ouverte là où je tourne. "
|
||||||
|
"Toutes les commandes rateront tant que cette console est ouverte.\n"
|
||||||
|
"Soyez rapides, je déteste les opérations à coeur ouvert... :confounded:"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Utility functions
|
||||||
|
|
||||||
|
local = {
|
||||||
|
**globals(),
|
||||||
|
**locals(),
|
||||||
|
"pprint": pprint,
|
||||||
|
"_show": lambda o: print(*dir(o), sep="\n"),
|
||||||
|
"__name__": "__console__",
|
||||||
|
"__doc__": None,
|
||||||
|
}
|
||||||
|
|
||||||
|
code.interact(
|
||||||
|
banner="Ne SURTOUT PAS FAIRE Ctrl+C !\n(TFJM² debugger)", local=local
|
||||||
|
)
|
||||||
|
await ctx.send("Tout va mieux !")
|
||||||
|
|
||||||
|
@command(name="reload")
|
||||||
|
@has_role(Role.DEV)
|
||||||
|
async def reload_cmd(self, ctx, name):
|
||||||
|
|
||||||
|
if name in ("dev", "teams", "tirages"):
|
||||||
|
name = f"src.cogs.{name}"
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.bot.reload_extension(name)
|
||||||
|
except:
|
||||||
|
await ctx.send(f":grimacing: **{name}** n'a pas pu être rechargée.")
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
await ctx.send(f":tada: L'extension **{name}** a bien été rechargée.")
|
||||||
|
|
||||||
|
|
||||||
|
def setup(bot: Bot):
|
||||||
|
bot.add_cog(DevCog(bot))
|
|
@ -58,7 +58,7 @@ class TirageCog(Cog, name="Tirages"):
|
||||||
await ctx.send(f"Le problème tiré est... **{problem}**")
|
await ctx.send(f"Le problème tiré est... **{problem}**")
|
||||||
|
|
||||||
@commands.command(
|
@commands.command(
|
||||||
name="oui", aliases=["accept", "yes", "o", "accepte", "ouiiiiiii"],
|
name="oui", aliases=["accept", "yes", "o", "oh-yeaaah", "accepte", "ouiiiiiii"],
|
||||||
)
|
)
|
||||||
async def accept_cmd(self, ctx):
|
async def accept_cmd(self, ctx):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -43,38 +43,6 @@ async def choose(ctx: Context, *args):
|
||||||
await ctx.send(f"J'ai choisi... **{choice}**")
|
await ctx.send(f"J'ai choisi... **{choice}**")
|
||||||
|
|
||||||
|
|
||||||
@bot.command(name="interrupt")
|
|
||||||
@commands.has_role(Role.DEV)
|
|
||||||
async def interrupt_cmd(ctx):
|
|
||||||
"""
|
|
||||||
:warning: Ouvre une console là où un @dev m'a lancé. :warning:
|
|
||||||
|
|
||||||
A utiliser en dernier recours:
|
|
||||||
- le bot sera inactif pendant ce temps.
|
|
||||||
- toutes les commandes seront executées à sa reprise.
|
|
||||||
"""
|
|
||||||
|
|
||||||
await ctx.send(
|
|
||||||
"J'ai été arrêté et une console interactive a été ouverte là où je tourne. "
|
|
||||||
"Toutes les commandes rateront tant que cette console est ouverte.\n"
|
|
||||||
"Soyez rapides, je déteste les opérations à coeur ouvert... :confounded:"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Utility function
|
|
||||||
|
|
||||||
local = {
|
|
||||||
**globals(),
|
|
||||||
**locals(),
|
|
||||||
"pprint": pprint,
|
|
||||||
"_show": lambda o: print(*dir(o), sep="\n"),
|
|
||||||
"__name__": "__console__",
|
|
||||||
"__doc__": None,
|
|
||||||
}
|
|
||||||
|
|
||||||
code.interact(banner="Ne SURTOUT PAS FAIRE Ctrl+C !\n(TFJM² debugger)", local=local)
|
|
||||||
await ctx.send("Tout va mieux !")
|
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_command_error(ctx: Context, error, *args, **kwargs):
|
async def on_command_error(ctx: Context, error, *args, **kwargs):
|
||||||
if isinstance(error, commands.CommandInvokeError):
|
if isinstance(error, commands.CommandInvokeError):
|
||||||
|
@ -90,7 +58,11 @@ async def on_command_error(ctx: Context, error, *args, **kwargs):
|
||||||
await ctx.author.send("Raison: " + error.original.msg)
|
await ctx.author.send("Raison: " + error.original.msg)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
msg = str(error.original) or str(error)
|
msg = (
|
||||||
|
error.original.__class__.__name__
|
||||||
|
+ ": "
|
||||||
|
+ (str(error.original) or str(error))
|
||||||
|
)
|
||||||
traceback.print_tb(error.original.__traceback__, file=sys.stderr)
|
traceback.print_tb(error.original.__traceback__, file=sys.stderr)
|
||||||
elif isinstance(error, commands.CommandNotFound):
|
elif isinstance(error, commands.CommandNotFound):
|
||||||
# Here we just take adventage that the error is formatted this way:
|
# Here we just take adventage that the error is formatted this way:
|
||||||
|
@ -98,7 +70,7 @@ async def on_command_error(ctx: Context, error, *args, **kwargs):
|
||||||
name = str(error).partition('"')[2].rpartition('"')[0]
|
name = str(error).partition('"')[2].rpartition('"')[0]
|
||||||
msg = f"La commande {name} n'éxiste pas. Pour un liste des commandes, envoie `!help`."
|
msg = f"La commande {name} n'éxiste pas. Pour un liste des commandes, envoie `!help`."
|
||||||
else:
|
else:
|
||||||
msg = str(error)
|
msg = repr(error)
|
||||||
|
|
||||||
print(repr(error), dir(error), file=sys.stderr)
|
print(repr(error), dir(error), file=sys.stderr)
|
||||||
await ctx.send(msg)
|
await ctx.send(msg)
|
||||||
|
@ -106,6 +78,7 @@ async def on_command_error(ctx: Context, error, *args, **kwargs):
|
||||||
|
|
||||||
bot.load_extension("src.cogs.tirages")
|
bot.load_extension("src.cogs.tirages")
|
||||||
bot.load_extension("src.cogs.teams")
|
bot.load_extension("src.cogs.teams")
|
||||||
|
bot.load_extension("src.cogs.dev")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in New Issue