Пример #1
0
async def custom_command(ev: SigmaEvent, message: discord.Message):
    if message.guild:
        prefix = await ev.db.get_prefix(message)
        if message.content.startswith(prefix):
            if message.content != prefix and not message.content.startswith(
                    prefix + ' '):
                cmd = message.content[len(prefix):].lower().split()[0]
                if cmd not in ev.bot.modules.commands and cmd not in ev.bot.modules.alts:
                    perms = ServerCommandPermissions(ev, message)
                    await perms.check_perms()
                    if perms.permitted:
                        custom_commands = await ev.db.get_guild_settings(
                            message.guild.id, 'CustomCommands')
                        if custom_commands is None:
                            custom_commands = {}
                        if cmd in custom_commands:
                            cmd_text = custom_commands[cmd]
                            img = False
                            if cmd_text.startswith('http'):
                                img_endings = ['.gif', '.png', '.jpg', '.jpeg']
                                for ending in img_endings:
                                    if cmd_text.endswith(ending):
                                        img = True
                                        break
                            if img:
                                response = discord.Embed().set_image(
                                    url=cmd_text)
                                await message.channel.send(embed=response)
                            else:
                                response = command_message_parser(
                                    message, cmd_text)
                                await message.channel.send(response)
                            log_command_usage(ev.log, message, cmd)
Пример #2
0
async def commands(cmd: SigmaCommand, message: discord.Message, args: list):
    if args:
        lookup = ' '.join(args).lower()
        command_items = cmd.bot.modules.commands
        command_list = []
        for command in command_items:
            command = command_items[command]
            category = command.category.lower()
            if category == lookup:
                if message.guild:
                    permission = ServerCommandPermissions(command, message)
                    await permission.check_perms()
                else:
                    permission = None
                command_list.append([command, permission])
        if command_list:
            module_list = sorted(command_list, key=lambda x: x[0].name)
            output = ''
            for module_item, module_perm in module_list:
                if module_perm:
                    if module_perm.permitted:
                        output += f'\n- {module_item.name}'
                    else:
                        output += f'\n- ⛔ {module_item.name}'
                else:
                    output += f'\n- {module_item.name}'
                if module_item.alts:
                    output += f' [{", ".join(module_item.alts)}]'
            title_text = f'```py\nThere are {len(module_list)} commands.\n```'
            response = discord.Embed(color=0x1B6F5F)
            response.add_field(name=f'{lookup.upper()} Commands', value=title_text, inline=False)
            response.add_field(name='Commands List', value=f'```yml\n{output}\n```', inline=False)
        else:
            response = discord.Embed(color=0x696969, title='🔍 Nothing was found...')
    else:
        pfx = await cmd.db.get_prefix(message)
        command_list = cmd.bot.modules.commands
        module_list = []
        for command in command_list:
            command = command_list[command]
            category = command.category.upper()
            if category not in module_list:
                module_list.append(category)
        module_list = sorted(module_list)
        output = ''
        for module_item in module_list:
            output += f'\n- {module_item}'
        module_list_out = f'```py\nThere are {len(module_list)} modules.\n```'
        response = discord.Embed(color=0x1B6F5F)
        response.add_field(name='Sigma Modules', value=module_list_out, inline=False)
        response.add_field(name='Module List', value=f'```yml\n{output}\n```', inline=False)
        response.set_footer(text=f'Type {pfx}{cmd.name} [module] to see commands in that module.')
    await message.channel.send(embed=response)
Пример #3
0
 async def check_permissions(self, payload):
     """
     Runs all permission checks and initializers.
     :type payload: sigma.core.mechanics.payload.CommandPayload
     :rtype: GlobalCommandPermissions, ServerCommandPermissions
     """
     perms = GlobalCommandPermissions(self, payload)
     await perms.check_black_usr()
     await perms.check_black_srv()
     perms.generate_response()
     perms.check_final()
     guild_perms = ServerCommandPermissions(self, payload.msg)
     await guild_perms.check_perms()
     return perms, guild_perms
Пример #4
0
async def custom_command(ev, pld):
    """
    :param ev: The event object referenced in the event.
    :type ev: sigma.core.mechanics.event.SigmaEvent
    :param pld: The event payload data to process.
    :type pld: sigma.core.mechanics.payload.MessagePayload
    """
    if pld.msg.guild:
        prefix = ev.db.get_prefix(pld.settings)
        if pld.msg.content.startswith(prefix):
            if pld.msg.content != prefix and not pld.msg.content.startswith(
                    prefix + ' '):
                cmd = pld.msg.content[len(prefix):].lower().split()[0]
                if cmd not in ev.bot.modules.commands and cmd not in ev.bot.modules.alts:
                    perms = ServerCommandPermissions(ev, pld.msg)
                    await perms.check_perms()
                    if perms.permitted:
                        custom_commands = pld.settings.get('custom_commands')
                        if custom_commands is None:
                            custom_commands = {}
                        if cmd in custom_commands:
                            delcmd = pld.settings.get('delete_commands')
                            if delcmd:
                                try:
                                    await pld.msg.delete()
                                except (discord.NotFound, discord.Forbidden):
                                    pass
                            cmd_text = custom_commands[cmd]
                            img = False
                            if cmd_text.startswith('http'):
                                img_endings = ['.gif', '.png', '.jpg', '.jpeg']
                                for ending in img_endings:
                                    if cmd_text.endswith(ending):
                                        img = True
                                        break
                            if img:
                                response = discord.Embed().set_image(
                                    url=cmd_text)
                                await pld.msg.channel.send(embed=response)
                            else:
                                response = command_message_parser(
                                    pld.msg, cmd_text)
                                await pld.msg.channel.send(
                                    escape_mentions(response, pld.msg.guild))
                            log_command_usage(ev.log, pld.msg, cmd)
Пример #5
0
 async def execute(self, message, args):
     if self.bot.ready:
         if message.guild:
             delete_command_message = self.db.get_guild_settings(message.guild.id, 'DeleteCommands')
             if delete_command_message:
                 try:
                     await message.delete()
                 except discord.Forbidden:
                     pass
                 except discord.NotFound:
                     pass
         if not self.bot.cfg.dsc.bot and message.author.id != self.bot.user.id:
             self.log.warning(f'{message.author.name} tried using me.')
             return
         perms = GlobalCommandPermissions(self, message)
         guild_allowed = ServerCommandPermissions(self, message)
         self.log_command_usage(message, args)
         if perms.permitted:
             if guild_allowed.permitted:
                 requirements = CommandRequirements(self, message)
                 if requirements.reqs_met:
                     try:
                         await getattr(self.command, self.name)(self, message, args)
                         await add_cmd_stat(self.db, self, message, args)
                     except self.get_exception() as e:
                         await self.respond_with_icon(message, '❗')
                         err_token = secrets.token_hex(16)
                         self.log_error(message, args, e, err_token)
                         title = '❗ An Error Occurred!'
                         err_text = 'Something seems to have gone wrong.'
                         err_text += '\nPlease send this token to our support server.'
                         err_text += f'\nThe invite link is in the **{self.bot.get_prefix(message)}help** command.'
                         err_text += f'\nToken: **{err_token}**'
                         error_embed = discord.Embed(color=0xBE1931)
                         error_embed.add_field(name=title, value=err_text)
                         try:
                             await message.author.send(embed=error_embed)
                         except discord.Forbidden:
                             pass
                 else:
                     await self.respond_with_icon(message, '❗')
                     reqs_embed = discord.Embed(color=0xBE1931)
                     reqs_error_title = f'❗ I am missing permissions!'
                     reqs_error_list = ''
                     for req in requirements.missing_list:
                         req = req.replace('_', ' ').title()
                         reqs_error_list += f'\n- {req}'
                     reqs_embed.add_field(name=reqs_error_title, value=f'```\n{reqs_error_list}\n```')
                     reqs_embed.set_footer(text=f'{self.bot.get_prefix(message)}{self.name}')
                     try:
                         await message.author.send(embed=reqs_embed)
                     except discord.Forbidden:
                         pass
             else:
                 self.log.warning('ACCESS DENIED: This module or command is not allowed on this server.')
                 await self.respond_with_icon(message, '⛔')
         else:
             self.log_unpermitted(perms)
             await self.respond_with_icon(message, '⛔')
             if perms.response:
                 try:
                     await message.author.send(embed=perms.response)
                 except discord.Forbidden:
                     pass
Пример #6
0
 async def execute(self, message: discord.Message, args: list):
     if self.bot.ready:
         if message.guild:
             delete_command_message = await self.db.get_guild_settings(
                 message.guild.id, 'delete_commands')
             if delete_command_message:
                 try:
                     await message.delete()
                 except (discord.Forbidden, discord.NotFound):
                     pass
             if await self.check_black_args(message.guild, args):
                 await self.respond_with_icon(message, '🛡')
                 return
         if not self.bot.cfg.dsc.bot and message.author.id != self.bot.user.id:
             self.log.warning(f'{message.author.name} tried using me.')
             return
         if not self.cd.is_cooling(message):
             if not await self.bot.cool_down.on_cooldown(
                     f'{self.name}_core', message.author):
                 await self.update_cooldown(message.author)
                 perms = GlobalCommandPermissions(self, message)
                 await perms.check_black_usr()
                 await perms.check_black_srv()
                 await perms.generate_response()
                 perms.check_final()
                 guild_allowed = ServerCommandPermissions(self, message)
                 await guild_allowed.check_perms()
                 self.log_command_usage(message, args,
                                        arrow.utcnow().float_timestamp)
                 self.cd.set_cooling(message)
                 if perms.permitted:
                     if guild_allowed.permitted:
                         requirements = CommandRequirements(self, message)
                         if requirements.reqs_met:
                             try:
                                 await getattr(self.command,
                                               self.name)(self, message,
                                                          args)
                                 await add_cmd_stat(self)
                                 # await self.add_usage_exp(message)
                                 self.bot.command_count += 1
                                 event_task = self.bot.queue.event_runner(
                                     'command', self, message, args)
                                 self.bot.loop.create_task(event_task)
                             except self.get_exception() as e:
                                 error = SigmaError(self, e)
                                 await error.error_handler(message, args)
                         else:
                             await self.respond_with_icon(message, '📝')
                             reqs_embed = discord.Embed(color=0xBE1931)
                             reqs_error_title = f'❗ {self.bot.user.name} is missing permissions!'
                             reqs_error_list = ''
                             for req in requirements.missing_list:
                                 req = req.replace('_', ' ').title()
                                 reqs_error_list += f'\n- {req}'
                             prefix = await self.db.get_prefix(message)
                             reqs_embed.add_field(
                                 name=reqs_error_title,
                                 value=f'```\n{reqs_error_list}\n```')
                             reqs_embed.set_footer(
                                 text=
                                 f'{prefix}{self.name} could not execute.')
                             try:
                                 await message.channel.send(embed=reqs_embed
                                                            )
                             except (discord.Forbidden, discord.NotFound):
                                 pass
                     else:
                         self.log.warning(
                             'ACCESS DENIED: This module or command is not allowed in this location.'
                         )
                         await self.respond_with_icon(message, '🔒')
                 else:
                     perms.log_unpermitted()
                     await self.respond_with_icon(message, '⛔')
                     if perms.response:
                         try:
                             await message.channel.send(embed=perms.response
                                                        )
                         except (discord.Forbidden, discord.NotFound):
                             pass
             else:
                 await self.respond_with_icon(message, '❄')
         else:
             await self.respond_with_icon(message, '🕙')
Пример #7
0
 async def execute(self, message: discord.Message, args: list):
     if self.bot.ready:
         if message.guild:
             delete_command_message = await self.db.get_guild_settings(message.guild.id, 'DeleteCommands')
             if delete_command_message:
                 try:
                     await message.delete()
                 except discord.Forbidden:
                     pass
                 except discord.NotFound:
                     pass
         if not self.bot.cfg.dsc.bot and message.author.id != self.bot.user.id:
             self.log.warning(f'{message.author.name} tried using me.')
             return
         if not self.cd.is_cooling(message):
             perms = GlobalCommandPermissions(self, message)
             await perms.check_black_usr()
             await perms.check_black_srv()
             await perms.generate_response()
             perms.check_final()
             guild_allowed = ServerCommandPermissions(self, message)
             await guild_allowed.check_perms()
             self.log_command_usage(message, args)
             self.cd.set_cooling(message)
             if perms.permitted:
                 if guild_allowed.permitted:
                     requirements = CommandRequirements(self, message)
                     if requirements.reqs_met:
                         try:
                             await getattr(self.command, self.name)(self, message, args)
                             await add_cmd_stat(self)
                             if self.stats:
                                 await self.add_elastic_stats(message, args)
                             await self.add_usage_exp(message)
                             self.bot.command_count += 1
                             self.bot.loop.create_task(self.bot.queue.event_runner('command', self, message, args))
                         except self.get_exception() as e:
                             await self.respond_with_icon(message, '❗')
                             err_token = secrets.token_hex(16)
                             await self.log_error(message, args, e, err_token)
                             prefix = await self.db.get_prefix(message)
                             title = '❗ An Error Occurred!'
                             err_text = 'Something seems to have gone wrong.'
                             err_text += '\nPlease send this token to our support server.'
                             err_text += f'\nThe invite link is in the **{prefix}help** command.'
                             err_text += f'\nToken: **{err_token}**'
                             error_embed = discord.Embed(color=0xBE1931)
                             error_embed.add_field(name=title, value=err_text)
                             try:
                                 await message.channel.send(embed=error_embed)
                             except discord.Forbidden:
                                 pass
                     else:
                         await self.respond_with_icon(message, '❗')
                         reqs_embed = discord.Embed(color=0xBE1931)
                         reqs_error_title = f'❗ Sigma is missing permissions!'
                         reqs_error_list = ''
                         for req in requirements.missing_list:
                             req = req.replace('_', ' ').title()
                             reqs_error_list += f'\n- {req}'
                         prefix = await self.db.get_prefix(message)
                         reqs_embed.add_field(name=reqs_error_title, value=f'```\n{reqs_error_list}\n```')
                         reqs_embed.set_footer(text=f'{prefix}{self.name} could not execute.')
                         try:
                             await message.channel.send(embed=reqs_embed)
                         except discord.Forbidden:
                             pass
                 else:
                     self.log.warning('ACCESS DENIED: This module or command is not allowed in this location.')
                     await self.respond_with_icon(message, '⛔')
             else:
                 perms.log_unpermitted()
                 await self.respond_with_icon(message, '⛔')
                 if perms.response:
                     try:
                         await message.channel.send(embed=perms.response)
                     except discord.Forbidden:
                         pass
         else:
             await self.respond_with_icon(message, '🕙')
Пример #8
0
async def commands(cmd, pld):
    """
    :param cmd: The command object referenced in the command.
    :type cmd: sigma.core.mechanics.command.SigmaCommand
    :param pld: The payload with execution data and details.
    :type pld: sigma.core.mechanics.payload.CommandPayload
    """
    if pld.args:
        lookup = pld.args[0].lower()
        command_items = cmd.bot.modules.commands
        command_list = []
        for command in command_items:
            command = command_items[command]
            category = command.category.lower()
            if category == lookup:
                if pld.msg.guild:
                    permission = ServerCommandPermissions(command, pld.msg)
                    await permission.check_perms()
                else:
                    permission = None
                command_list.append([command, permission])
        if command_list:
            module_list = sorted(command_list, key=lambda x: x[0].name)
            module_count = len(module_list)
            page = pld.args[1] if len(pld.args) > 1 else 1
            module_list, page = PaginatorCore.paginate(module_list, page, 30)
            output = ''
            for module_item, module_perm in module_list:
                if module_perm:
                    if module_perm.permitted:
                        output += f'\n- {module_item.name}'
                    else:
                        output += f'\n- ⛔ {module_item.name}'
                else:
                    output += f'\n- {module_item.name}'
                if module_item.alts:
                    output += f' [{", ".join(module_item.alts)}]'
            if output:
                title_text = f'```py\nThere are {module_count} commands.\n```'
                response = discord.Embed(color=0x1B6F5F)
                response.add_field(name=f'{lookup.upper()} Commands',
                                   value=title_text,
                                   inline=False)
                response.add_field(name=f'Commands List | Page {page}',
                                   value=f'```yml\n{output}\n```',
                                   inline=False)
            else:
                response = not_found(f'No commands on page {page}.')
        else:
            response = not_found('Module not found.')
    else:
        pfx = cmd.db.get_prefix(pld.settings)
        command_list = cmd.bot.modules.commands
        module_list = []
        for command in command_list:
            command = command_list[command]
            category = command.category.upper()
            if category not in module_list:
                module_list.append(category)
        module_list = sorted(module_list)
        output = ''
        for module_item in module_list:
            output += f'\n- {module_item}'
        module_list_out = f'```py\nThere are {len(module_list)} modules.\n```'
        response = discord.Embed(color=0x1B6F5F)
        response.add_field(name='Modules', value=module_list_out, inline=False)
        response.add_field(name='Module List',
                           value=f'```yml\n{output}\n```',
                           inline=False)
        response.set_footer(
            text=
            f'Type {pfx}{cmd.name} [module] to see commands in that module.')
    await pld.msg.channel.send(embed=response)