1
0
Fork 0
mirror of synced 2024-06-22 16:20:23 +12:00
Bonfire/cogs/owner.py

170 lines
6.6 KiB
Python
Raw Normal View History

2016-07-09 13:27:19 +12:00
from discord.ext import commands
from .utils import config
from .utils import checks
import re
import os
import glob
2016-07-09 13:27:19 +12:00
import sys
import discord
import inspect
import aiohttp
2016-07-09 13:27:19 +12:00
getter = re.compile(r'`(?!`)(.*?)`')
multi = re.compile(r'```(.*?)```', re.DOTALL)
class Owner:
"""Commands that can only be used by Phantom, bot management commands"""
2016-07-09 13:27:19 +12:00
def __init__(self, bot):
self.bot = bot
@commands.command(pass_context=True)
@commands.check(checks.is_owner)
async def saferestart(self, ctx):
"""This commands is used to check if there is anything playing in any servers at the moment
If there is, I'll tell you not to restart, if not I'll just go ahead and restart"""
voice_states = self.bot.get_cog('Music').voice_states
for server_id, state in voice_states.items():
if state.is_playing:
server = self.bot.get_server(server_id)
await self.bot.say("Sorry, it's not safe to restart. I am currently playing a song on the {} server".format(server.name))
return
2016-08-16 09:16:01 +12:00
ctx.invoke(self.bot.commands.get('restart'))
2016-07-09 13:27:19 +12:00
@commands.command(pass_context=True)
@commands.check(checks.is_owner)
2016-07-09 13:27:19 +12:00
async def restart(self, ctx):
"""Forces the bot to restart"""
config.save_content('restart_server', ctx.message.channel.id)
2016-07-28 23:45:27 +12:00
await self.bot.say("Restarting; see you in the next life {0}!".format(ctx.message.author.mention))
2016-07-10 01:29:17 +12:00
python = sys.executable
os.execl(python, python, *sys.argv)
2016-07-09 13:27:19 +12:00
@commands.command()
@commands.check(checks.is_owner)
async def adddoggo(self, url: str):
"""Saves a URL as an image to add for the doggo command"""
2016-08-12 14:13:35 +12:00
local_path = 'images/doggo{}.jpg'.format(len(glob.glob('doggo*')))
with aiohttp.ClientSession() as s:
async with s.get(url) as r:
val = await r.read()
with open(local_path, "wb") as f:
f.write(val)
await self.bot.say(
2016-07-28 23:45:27 +12:00
"Just saved a new doggo image! I now have {} doggo images!".format(len(glob.glob('doggo*'))))
2016-08-08 06:04:52 +12:00
@commands.command()
@commands.check(checks.is_owner)
2016-08-08 06:04:52 +12:00
async def addsnek(self, url: str):
"""Saves a URL as an image to add for the snek command"""
2016-08-12 14:13:35 +12:00
local_path = 'images/snek{}.jpg'.format(len(glob.glob('snek*')))
2016-08-08 06:04:52 +12:00
with aiohttp.ClientSession() as s:
async with s.get(url) as r:
val = await r.read()
with open(local_path, "wb") as f:
f.write(val)
await self.bot.say(
"Just saved a new snek image! I now have {} snek images!".format(len(glob.glob('snek*'))))
2016-07-31 10:15:59 +12:00
@commands.command(pass_context=True)
@commands.check(checks.is_owner)
async def debug(self, ctx):
2016-07-09 13:27:19 +12:00
"""Executes code"""
try:
match_single = getter.findall(ctx.message.content)
match_multi = multi.findall(ctx.message.content)
if not match_multi:
result = eval(match_single[0])
if inspect.isawaitable(result):
result = await result
await self.bot.say("```\n{0}```".format(result))
elif match_multi:
def r(v):
self.bot.loop.create_task(self.bot.say("```\n{}```".format(v)))
exec(match_multi[0])
except Exception as error:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await self.bot.say(fmt.format(type(error).__name__, error))
2016-07-09 13:27:19 +12:00
@commands.command(pass_context=True)
@commands.check(checks.is_owner)
2016-07-09 13:27:19 +12:00
async def shutdown(self, ctx):
"""Shuts the bot down"""
fmt = 'Shutting down, I will miss you {0.author.name}'
await self.bot.say(fmt.format(ctx.message))
await self.bot.logout()
await self.bot.close()
2016-07-09 13:27:19 +12:00
@commands.command()
@commands.check(checks.is_owner)
async def avatar(self, content: str):
2016-07-09 13:27:19 +12:00
"""Changes the avatar for the bot to the filename following the command"""
2016-08-12 14:13:35 +12:00
file = 'images/' + content
with open(file, 'rb') as fp:
await self.bot.edit_profile(avatar=fp.read())
2016-07-09 13:27:19 +12:00
@commands.command()
@commands.check(checks.is_owner)
async def name(self, newNick: str):
2016-07-09 13:27:19 +12:00
"""Changes the bot's name"""
await self.bot.edit_profile(username=newNick)
await self.bot.say('Changed username to ' + newNick)
2016-07-09 13:27:19 +12:00
@commands.command()
@commands.check(checks.is_owner)
2016-07-09 13:27:19 +12:00
async def status(self, *stat: str):
"""Changes the bot's 'playing' status"""
newStatus = ' '.join(stat)
game = discord.Game(name=newStatus, type=0)
await self.bot.change_status(game)
await self.bot.say("Just changed my status to '{0}'!".format(newStatus))
2016-07-09 13:27:19 +12:00
@commands.command()
@commands.check(checks.is_owner)
async def load(self, *, module: str):
"""Loads a module"""
2016-07-28 23:45:27 +12:00
module = module.lower()
if not module.startswith("cogs"):
module = "cogs.{}".format(module)
try:
self.bot.load_extension(module)
await self.bot.say("I have just loaded the {} module".format(module))
except Exception as error:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await self.bot.say(fmt.format(type(error).__name__, error))
@commands.command()
@commands.check(checks.is_owner)
async def unload(self, *, module: str):
"""Unloads a module"""
2016-07-28 23:45:27 +12:00
module = module.lower()
if not module.startswith("cogs"):
module = "cogs.{}".format(module)
try:
self.bot.unload_extension(module)
await self.bot.say("I have just unloaded the {} module".format(module))
except Exception as error:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await self.bot.say(fmt.format(type(error).__name__, error))
@commands.command()
@commands.check(checks.is_owner)
async def reload(self, *, module: str):
"""Reloads a module"""
2016-07-28 23:45:27 +12:00
module = module.lower()
if not module.startswith("cogs"):
module = "cogs.{}".format(module)
self.bot.unload_extension(module)
try:
self.bot.load_extension(module)
await self.bot.say("I have just reloaded the {} module".format(module))
except Exception as error:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await self.bot.say(fmt.format(type(error).__name__, error))
2016-07-09 13:27:19 +12:00
def setup(bot):
bot.add_cog(Owner(bot))