95 lines
No EOL
3.4 KiB
Python
95 lines
No EOL
3.4 KiB
Python
#Adds administrative commands to the bot
|
|
import os
|
|
import sys
|
|
import logging
|
|
import subprocess
|
|
from discord.ext import commands
|
|
|
|
class Admin(commands.Cog):
|
|
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
self.admin_ids = [242018983241318410]
|
|
self.log_file = "logs/info.log"
|
|
self.logger = logging.getLogger("bot")
|
|
|
|
@commands.command(
|
|
description="Kill",
|
|
help="Kills the bot in event of an emergency. Only special users can do this! Usage: !kill",
|
|
brief="Kill the bot",
|
|
hidden=True
|
|
)
|
|
async def kill(self, ctx):
|
|
"Kills the bot"
|
|
if ctx.author.id in self.admin_ids:
|
|
self.logger.info(f"Kill command ran by {ctx.author.id}")
|
|
exit()
|
|
else:
|
|
await ctx.channel.send("You don't have permission to do that.")
|
|
self.logger.info(f"Kill command attempted by {ctx.author.id}")
|
|
|
|
@commands.command(
|
|
description="Reset",
|
|
help="Resets the bot in event of an emergency. Only special users can do this! Usage: !reset",
|
|
brief="Reset the bot",
|
|
hidden=True
|
|
)
|
|
async def reset(self, ctx):
|
|
if ctx.author.id in self.admin_ids:
|
|
self.logger.info(f"Reset command ran by {ctx.author.id}")
|
|
python = sys.executable
|
|
os.execl(python, python, *sys.argv)
|
|
else:
|
|
await ctx.channel.send("You don't have permission to do that.")
|
|
self.logger.info(f"Reset command attempted by {ctx.author.id}")
|
|
|
|
@commands.command(
|
|
description="Update",
|
|
help="This will update sparkytron to the most recent version on github. Only privileged users can run this command! Usage: !update",
|
|
brief="Runs git pull",
|
|
hidden=True
|
|
)
|
|
async def update(self, ctx):
|
|
if ctx.author.id in self.admin_ids:
|
|
self.logger.info(f"Update command ran by {ctx.author.id}")
|
|
output = subprocess.run(["git","pull"],capture_output=True)
|
|
if output.stderr:
|
|
await ctx.send("Update Attempted")
|
|
await ctx.send(output.stderr.decode('utf-8'))
|
|
else:
|
|
await ctx.send(output.stdout.decode('utf-8'))
|
|
else:
|
|
await ctx.send("You don't have permission to do this.")
|
|
self.logger.info(f"Update command attempted by {ctx.author.id}")
|
|
|
|
def is_error(self, log_line):
|
|
if "ERROR" in log_line:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
@commands.command(
|
|
description="Errors",
|
|
help="This will display the last X errors",
|
|
brief="Displays errors",
|
|
hidden=True
|
|
)
|
|
async def errors(self, ctx, amount=5):
|
|
if ctx.author.id in self.admin_ids:
|
|
self.logger.info(f"Errors command ran by {ctx.author.id}")
|
|
with open(self.log_file, 'r', encoding="utf-8") as log:
|
|
data = log.readlines()
|
|
log.close()
|
|
errors = []
|
|
for line in data[::-1]:
|
|
if self.is_error(line):
|
|
errors.append(line)
|
|
if len(errors) >= amount:
|
|
break
|
|
await ctx.send("```\n" + "\n".join(errors[::-1]) + "```")
|
|
else:
|
|
await ctx.send("You don't have permission to do this.")
|
|
self.logger.info(f"Update command attempted by {ctx.author.id}")
|
|
|
|
async def setup(bot):
|
|
await bot.add_cog(Admin(bot)) |