mirror of
				https://github.com/miaowware/qrm2.git
				synced 2025-11-04 04:00:21 -05:00 
			
		
		
		
	add support for plugins
This commit is contained in:
		
							parent
							
								
									3a5ce9f1c0
								
							
						
					
					
						commit
						79545403d8
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -6,6 +6,7 @@ cty.zip
 | 
			
		||||
/botenv/
 | 
			
		||||
/devenv/
 | 
			
		||||
/data/
 | 
			
		||||
/data/plugins/
 | 
			
		||||
 | 
			
		||||
/docker-compose.yml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								Makefile
									
									
									
									
									
								
							@ -32,7 +32,7 @@ help:
 | 
			
		||||
 | 
			
		||||
# Main install target
 | 
			
		||||
.PHONY: install
 | 
			
		||||
install: $(BOTENV)/req_done data/options.py data/keys.py
 | 
			
		||||
install: $(BOTENV)/req_done data/options.py data/keys.py data/plugins
 | 
			
		||||
 | 
			
		||||
# Virual environment setup
 | 
			
		||||
$(BOTENV)/success:
 | 
			
		||||
@ -55,6 +55,11 @@ data:
 | 
			
		||||
	@echo "\033[34;1m--> Creating ./data ...\033[0m"
 | 
			
		||||
	@mkdir -p data
 | 
			
		||||
 | 
			
		||||
# Creating the ./data/plugins subdirectory
 | 
			
		||||
data/plugins: ./data
 | 
			
		||||
	@echo "\033[34;1m--> Creating ./data/plugins ...\033[0m"
 | 
			
		||||
	@mkdir -p data/plugins
 | 
			
		||||
 | 
			
		||||
# Copying templates
 | 
			
		||||
data/options.py data/keys.py: ./data
 | 
			
		||||
	@echo "\033[34;1m--> Copying template for ./$@ ...\033[0m"
 | 
			
		||||
@ -72,7 +77,7 @@ clean:
 | 
			
		||||
 | 
			
		||||
### Dev targets ###
 | 
			
		||||
.PHONY: dev-install
 | 
			
		||||
dev-install: $(BOTENV)/dev_req_done data/options.py data/keys.py
 | 
			
		||||
dev-install: $(BOTENV)/dev_req_done data/options.py data/keys.py data/plugins
 | 
			
		||||
 | 
			
		||||
# Installing dev requirements
 | 
			
		||||
$(BOTENV)/dev_req_done: dev-requirements.txt $(BOTENV)/success
 | 
			
		||||
 | 
			
		||||
@ -215,7 +215,7 @@ class BaseCog(commands.Cog):
 | 
			
		||||
                            [miaowware/qrm-resources](https://github.com/miaowware/qrm-resources/issues)."""
 | 
			
		||||
        await ctx.send(embed=embed)
 | 
			
		||||
 | 
			
		||||
    @commands.command(name="donate")
 | 
			
		||||
    @commands.command(name="donate", aliases=["tip"])
 | 
			
		||||
    async def _donate(self, ctx: commands.Context):
 | 
			
		||||
        """Shows ways to help support development of the bot via donations."""
 | 
			
		||||
        embed = cmn.embed_factory(ctx)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								main.py
									
									
									
									
									
								
							@ -15,6 +15,7 @@ import sys
 | 
			
		||||
import traceback
 | 
			
		||||
from datetime import datetime, time
 | 
			
		||||
from types import SimpleNamespace
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
 | 
			
		||||
import pytz
 | 
			
		||||
 | 
			
		||||
@ -34,6 +35,7 @@ import data.options as opt
 | 
			
		||||
exit_code = 1  # The default exit code. ?shutdown and ?restart will change it accordingly (fail-safe)
 | 
			
		||||
 | 
			
		||||
ext_dir = "exts"  # The name of the directory where extensions are located.
 | 
			
		||||
plugin_dir = "data.plugins"  # The name of the directory where plugins are located.
 | 
			
		||||
 | 
			
		||||
debug_mode = opt.debug  # Separate assignement in-case we define an override (ternary operator goes here)
 | 
			
		||||
 | 
			
		||||
@ -108,14 +110,24 @@ async def _extctl_list(ctx: commands.Context):
 | 
			
		||||
    """Lists loaded extensions."""
 | 
			
		||||
    embed = cmn.embed_factory(ctx)
 | 
			
		||||
    embed.title = "Loaded Extensions"
 | 
			
		||||
    embed.description = "\n".join(["‣ " + x.split(".")[1] for x in bot.extensions.keys()])
 | 
			
		||||
    embed.description = "\n".join(
 | 
			
		||||
                            ["‣ " + x.split(".")[-1] for x in bot.extensions.keys() if not x.startswith(plugin_dir)]
 | 
			
		||||
                        )
 | 
			
		||||
    if plugins := ["‣ " + x.split(".")[-1] for x in bot.extensions.keys() if x.startswith(plugin_dir)]:
 | 
			
		||||
        embed.add_field(name="Loaded Plugins", value="\n".join(plugins))
 | 
			
		||||
    await ctx.send(embed=embed)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@_extctl.command(name="load", aliases=["ld"])
 | 
			
		||||
async def _extctl_load(ctx: commands.Context, extension: str):
 | 
			
		||||
    """Loads an extension."""
 | 
			
		||||
    try:
 | 
			
		||||
        bot.load_extension(ext_dir + "." + extension)
 | 
			
		||||
    except commands.ExtensionNotFound as e:
 | 
			
		||||
        try:
 | 
			
		||||
            bot.load_extension(plugin_dir + "." + extension)
 | 
			
		||||
        except commands.ExtensionNotFound:
 | 
			
		||||
            raise e
 | 
			
		||||
    await cmn.add_react(ctx.message, cmn.emojis.check_mark)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -126,14 +138,26 @@ async def _extctl_reload(ctx: commands.Context, extension: str):
 | 
			
		||||
        pika = bot.get_emoji(opt.pika)
 | 
			
		||||
        if pika:
 | 
			
		||||
            await cmn.add_react(ctx.message, pika)
 | 
			
		||||
    try:
 | 
			
		||||
        bot.reload_extension(ext_dir + "." + extension)
 | 
			
		||||
    except commands.ExtensionNotLoaded as e:
 | 
			
		||||
        try:
 | 
			
		||||
            bot.reload_extension(plugin_dir + "." + extension)
 | 
			
		||||
        except commands.ExtensionNotLoaded:
 | 
			
		||||
            raise e
 | 
			
		||||
    await cmn.add_react(ctx.message, cmn.emojis.check_mark)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@_extctl.command(name="unload", aliases=["ul"])
 | 
			
		||||
async def _extctl_unload(ctx: commands.Context, extension: str):
 | 
			
		||||
    """Unloads an extension."""
 | 
			
		||||
    try:
 | 
			
		||||
        bot.unload_extension(ext_dir + "." + extension)
 | 
			
		||||
    except commands.ExtensionNotLoaded as e:
 | 
			
		||||
        try:
 | 
			
		||||
            bot.unload_extension(plugin_dir + "." + extension)
 | 
			
		||||
        except commands.ExtensionNotLoaded:
 | 
			
		||||
            raise e
 | 
			
		||||
    await cmn.add_react(ctx.message, cmn.emojis.check_mark)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -246,6 +270,10 @@ async def _ensure_activity_fixed():
 | 
			
		||||
for ext in opt.exts:
 | 
			
		||||
    bot.load_extension(ext_dir + "." + ext)
 | 
			
		||||
 | 
			
		||||
# load all py files in plugin_dir
 | 
			
		||||
for plugin in (f.stem for f in Path(plugin_dir.replace(".", "/")).glob("*.py")):
 | 
			
		||||
    bot.load_extension(plugin_dir + "." + plugin)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
    bot.run(keys.discord_token)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user