[Core] Added separate dev cog

This is enabled with the cli flag --dev
This commit is contained in:
Twentysix 2017-05-14 03:20:54 +02:00
parent cf2925978b
commit 311339240f
5 changed files with 74 additions and 69 deletions

View File

@ -1,5 +0,0 @@
from .owner import Owner
def setup(bot):
bot.add_cog(Owner())

View File

@ -1,8 +1,6 @@
from discord.ext import commands from discord.ext import commands
from core import checks from core import checks
from core.utils.chat_formatting import box
import logging import logging
import asyncio
import importlib import importlib
import os import os
import discord import discord
@ -10,8 +8,8 @@ import discord
log = logging.getLogger("red") log = logging.getLogger("red")
class Owner: class Core:
"""All owner-only commands that relate to debug bot operations.""" """Commands related to core functions"""
@commands.command() @commands.command()
@checks.is_owner() @checks.is_owner()
@ -75,59 +73,3 @@ class Owner:
print("Reloading " + path) print("Reloading " + path)
m = importlib.import_module(path) m = importlib.import_module(path)
importlib.reload(m) importlib.reload(m)
@commands.command(hidden=True)
@checks.is_owner()
async def debug(self, ctx, *, code):
"""Evaluates code"""
author = ctx.message.author
channel = ctx.message.channel
code = code.strip('` ')
result = None
global_vars = globals().copy()
global_vars['bot'] = ctx.bot
global_vars['ctx'] = ctx
global_vars['message'] = ctx.message
global_vars['author'] = ctx.message.author
global_vars['channel'] = ctx.message.channel
global_vars['guild'] = ctx.message.guild
try:
result = eval(code, global_vars, locals())
except Exception as e:
await ctx.send('```py\n{}: {}```'.format(type(e).__name__, str(e)),)
return
if asyncio.iscoroutine(result):
result = await result
result = str(result)
if ctx.message.guild is not None:
token = ctx.bot.http.token
r = "[EXPUNGED]"
result = result.replace(token, r)
result = result.replace(token.lower(), r)
result = result.replace(token.upper(), r)
await ctx.send(box(result, lang="py"))
@commands.command(hidden=True)
@checks.is_owner()
async def mock(self, ctx, user: discord.Member, *, command):
"""Runs a command as if it was issued by a different user
The prefix must not be entered"""
# Since we have stateful objects now this might be pretty bad
# Sorry Danny
old_author = ctx.author
old_content = ctx.message.content
ctx.message.author = user
ctx.message.content = ctx.prefix + command
await ctx.bot.process_commands(ctx.message)
ctx.message.author = old_author
ctx.message.content = old_content

65
core/dev_commands.py Normal file
View File

@ -0,0 +1,65 @@
from discord.ext import commands
from core.utils.chat_formatting import box
from core import checks
import asyncio
import discord
class Dev:
"""Various development focused utilities"""
@commands.command()
@checks.is_owner()
async def debug(self, ctx, *, code):
"""Evaluates code"""
author = ctx.author
channel = ctx.channel
code = code.strip('` ')
result = None
global_vars = globals().copy()
global_vars['bot'] = ctx.bot
global_vars['ctx'] = ctx
global_vars['message'] = ctx.message
global_vars['author'] = ctx.author
global_vars['channel'] = ctx.channel
global_vars['guild'] = ctx.guild
try:
result = eval(code, global_vars, locals())
except Exception as e:
await ctx.send('```py\n{}: {}```'.format(type(e).__name__, str(e)),)
return
if asyncio.iscoroutine(result):
result = await result
result = str(result)
if ctx.guild is not None:
token = ctx.bot.http.token
r = "[EXPUNGED]"
result = result.replace(token, r)
result = result.replace(token.lower(), r)
result = result.replace(token.upper(), r)
await ctx.send(box(result, lang="py"))
@commands.command()
@checks.is_owner()
async def mock(self, ctx, user: discord.Member, *, command):
"""Runs a command as if it was issued by a different user
The prefix must not be entered"""
# Since we have stateful objects now this might be pretty bad
# Sorry Danny
old_author = ctx.author
old_content = ctx.message.content
ctx.message.author = user
ctx.message.content = ctx.prefix + command
await ctx.bot.process_commands(ctx.message)
ctx.message.author = old_author
ctx.message.content = old_content

View File

@ -44,14 +44,14 @@ def pagify(text, delims=["\n"], *, escape=True, shorten_by=8,
for d in delims]) for d in delims])
closest_delim = closest_delim if closest_delim != -1 else page_length closest_delim = closest_delim if closest_delim != -1 else page_length
if escape: if escape:
to_send = escape_mass_mentions(in_text[:closest_delim]) to_send = escape(in_text[:closest_delim], mass_mentions=True)
else: else:
to_send = in_text[:closest_delim] to_send = in_text[:closest_delim]
yield to_send yield to_send
in_text = in_text[closest_delim:] in_text = in_text[closest_delim:]
if escape: if escape:
yield escape_mass_mentions(in_text) yield escape(in_text, mass_mentions=True)
else: else:
yield in_text yield in_text

View File

@ -3,6 +3,8 @@ from core.global_checks import init_global_checks
from core.events import init_events from core.events import init_events
from core.settings import parse_cli_flags from core.settings import parse_cli_flags
from core.cli import interactive_config, confirm from core.cli import interactive_config, confirm
from core.core_commands import Core
from core.dev_commands import Dev
import asyncio import asyncio
import discord import discord
import logging.handlers import logging.handlers
@ -58,9 +60,10 @@ if __name__ == '__main__':
red = Red(cli_flags, description=description, pm_help=None) red = Red(cli_flags, description=description, pm_help=None)
init_global_checks(red) init_global_checks(red)
init_events(red, cli_flags) init_events(red, cli_flags)
red.load_extension('core') red.add_cog(Core())
if cli_flags.dev: if cli_flags.dev:
pass # load dev cog here? red.add_cog(Dev())
token = os.environ.get("RED_TOKEN", red.db.get_global("token", None)) token = os.environ.get("RED_TOKEN", red.db.get_global("token", None))
prefix = cli_flags.prefix or red.db.get_global("prefix", []) prefix = cli_flags.prefix or red.db.get_global("prefix", [])