diff --git a/cogs/admin.py b/cogs/admin.py new file mode 100644 index 0000000..d84498b --- /dev/null +++ b/cogs/admin.py @@ -0,0 +1,57 @@ +import logging + +from discord.ext import commands + + +class Admin(commands.Cog): + def __init__(self, bot): + self.bot = bot + + # every commands needs owner permissions + async def cog_check(self, ctx): + return self.bot.owner == ctx.author + + async def cog_command_error(self, ctx, error): + if isinstance(error, commands.CheckFailure): + await ctx.send("Only the owner can use this module. Join the support discord server if you are having " + "any problems. This usage has been logged.") + logger.warning(f'User {ctx.author} ({ctx.author.id}) has tried to access a restricted ' + f'command via {ctx.message.content}.') + elif isinstance(error, commands.MissingRequiredArgument): + await ctx.send("Missing a required argument for this command.") + else: + logger.warning(error) + + @commands.command(aliases=['r']) + async def reload(self, ctx, *, cog): + logger.info(f'Trying to reload cog: cogs.{cog}.') + + reply = '' + try: + self.bot.reload_extension('cogs.'+cog) + reply = f'Extension "cogs.{cog}" successfully reloaded.' + except commands.ExtensionNotFound: + reply = f'Extension "cogs.{cog}" not found.' + except commands.NoEntryPointError: + reply = f'Extension "cogs.{cog}" is missing a setup function.' + except commands.ExtensionFailed: + reply = f'Extension "cogs.{cog}" failed to start.' + except commands.ExtensionNotLoaded: + reply = f'Extension "cogs.{cog}" is not loaded... trying to load it. ' + try: + self.bot.load_extension('cogs.'+cog) + except commands.ExtensionAlreadyLoaded: + reply += f'Could not load or reload extension since it is already loaded...' + except commands.ExtensionNotFound: + reply += f'Extension "cogs.{cog}" not found.' + except commands.ExtensionFailed: + reply = f'Extension "cogs.{cog}" failed to start.' + finally: + logger.info(reply) + await ctx.send(reply) + + +def setup(bot): + global logger + logger = logging.getLogger('bot') + bot.add_cog(Admin(bot)) \ No newline at end of file diff --git a/cogs/db_api.py b/cogs/db_api.py index 9a6426f..f0d0a0d 100644 --- a/cogs/db_api.py +++ b/cogs/db_api.py @@ -25,6 +25,10 @@ class DiscordBotsOrgAPI(commands.Cog): if SETTINGS.mode == 'production': await self.dblpy.post_server_count() logger.info('posted server count ({})'.format(len(self.bot.guilds))) + sum_users = 0 + for guild in self.bot.guilds: + sum_users += len(guild.members) + logger.info(f'total users served by the bot: {sum_users}') except Exception as e: logger.exception('Failed to post server count\n{}: {}'.format(type(e).__name__, e)) await asyncio.sleep(1800) diff --git a/cogs/help.py b/cogs/help.py index 4b25dad..c083d22 100644 --- a/cogs/help.py +++ b/cogs/help.py @@ -12,11 +12,10 @@ class Help(commands.Cog): def __init__(self, bot): self.bot = bot - self.pages = ['šŸ ', 'šŸ†•', 'šŸ”', 'šŸ•¹', 'šŸ› ', 'šŸ’–'] + self.pages = ['šŸ ', 'šŸ†•', 'šŸ”', 'šŸ•¹', 'šŸ› ', 'ā”', 'šŸ’–'] async def embed_list_reaction_handler(self, ctx, page, pre, msg=None): embed = self.get_help_embed(page, pre) - if msg is None: msg = await ctx.send(embed=embed) # add reactions @@ -39,8 +38,6 @@ class Help(commands.Cog): await reaction.message.remove_reaction(reaction.emoji, user) return reaction - - def get_help_embed(self, page, pre): title = f' Pollmaster Help - React with an emoji to learn more about a topic!' @@ -49,9 +46,10 @@ class Help(commands.Cog): embed.set_footer(text='Use reactions to navigate the help. This message will self-destruct in 3 minutes.') if page == 'šŸ ': - ## POLL CREATION SHORT + # POLL CREATION SHORT embed.add_field(name='šŸ†• Making New Polls', - value=f'`{pre}quick` | `{pre}new` | `{pre}advanced` | `{pre}prepare` | `{pre}cmd `', inline=False) + value=f'`{pre}quick` | `{pre}new` | `{pre}advanced` | `{pre}prepare` | `{pre}cmd `', + inline=False) # embed.add_field(name='Commands', value=f'`{pre}quick` | `{pre}new` | `{pre}prepared`', inline=False) # embed.add_field(name='Arguments', value=f'Arguments: `` (optional)', inline=False) # embed.add_field(name='Examples', value=f'Examples: `{pre}new` | `{pre}quick What is the greenest color?`', @@ -59,63 +57,72 @@ class Help(commands.Cog): ## POLL CONTROLS embed.add_field(name='šŸ” Show Polls', - value=f'`{pre}show (label)`', inline=False) + value=f'`{pre}show` | `{pre}show