Added Updater
This commit is contained in:
parent
667b7b48cb
commit
80d4e0e7f0
4
akuma.py
4
akuma.py
@ -16,7 +16,7 @@ class Akuma(commands.Bot):
|
|||||||
|
|
||||||
#configuration objects for internal use
|
#configuration objects for internal use
|
||||||
self.cfg = self.loadJSON("settings.json", {"token": "", "prefix": ">>", "description": "A Discord Bot written b"
|
self.cfg = self.loadJSON("settings.json", {"token": "", "prefix": ">>", "description": "A Discord Bot written b"
|
||||||
"y Akuma#7346", "game": "", "extensions": ["core", "server", "fun", "user"]})
|
"y Akuma#7346", "game": "", "extensions": ["core", "server", "fun", "user", "updater"]})
|
||||||
if self.cfg["token"] == "":
|
if self.cfg["token"] == "":
|
||||||
self.cfg["token"] = input("Please insert the Bot Token: ")
|
self.cfg["token"] = input("Please insert the Bot Token: ")
|
||||||
self.writeJSON("settings.json", self.cfg)
|
self.writeJSON("settings.json", self.cfg)
|
||||||
@ -36,7 +36,7 @@ class Akuma(commands.Bot):
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
super().run(self.cfg["token"])
|
super().run(self.cfg["token"])
|
||||||
print("Bot running")
|
print("Bot stopped")
|
||||||
|
|
||||||
def loadJSON(self, s : str, default : dict = None):
|
def loadJSON(self, s : str, default : dict = None):
|
||||||
if not os.path.isfile(os.path.join(self.cfgPath, s)):
|
if not os.path.isfile(os.path.join(self.cfgPath, s)):
|
||||||
|
@ -4,6 +4,11 @@ import discord, io
|
|||||||
class Core(commands.Cog):
|
class Core(commands.Cog):
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
self.update = {
|
||||||
|
"allowUpdate": True,
|
||||||
|
"url": "https://raw.github.com/Akumatic/Akuma-Matata/master/extensions/core.py",
|
||||||
|
"private": False
|
||||||
|
}
|
||||||
|
|
||||||
def detectSetGame(self):
|
def detectSetGame(self):
|
||||||
return f" | {self.bot.cfg['game']}" if self.bot.cfg["game"] != "" else ""
|
return f" | {self.bot.cfg['game']}" if self.bot.cfg["game"] != "" else ""
|
||||||
@ -52,6 +57,9 @@ class Core(commands.Cog):
|
|||||||
@commands.command()
|
@commands.command()
|
||||||
@commands.is_owner()
|
@commands.is_owner()
|
||||||
async def stop(self, ctx):
|
async def stop(self, ctx):
|
||||||
|
ext = self.bot.extensions
|
||||||
|
while len(ext) > 0:
|
||||||
|
self.bot.unload_extension(list(ext.keys())[0])
|
||||||
await self.bot.close()
|
await self.bot.close()
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
|
@ -4,6 +4,11 @@ from discord.ext import commands
|
|||||||
class Fun(commands.Cog):
|
class Fun(commands.Cog):
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
self.update = {
|
||||||
|
"allowUpdate": True,
|
||||||
|
"url": "https://raw.github.com/Akumatic/Akuma-Matata/master/extensions/fun.py",
|
||||||
|
"private": False
|
||||||
|
}
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def ping(self, ctx):
|
async def ping(self, ctx):
|
||||||
|
@ -5,6 +5,11 @@ from datetime import datetime
|
|||||||
class Server(commands.Cog):
|
class Server(commands.Cog):
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
self.update = {
|
||||||
|
"allowUpdate": True,
|
||||||
|
"url": "https://raw.github.com/Akumatic/Akuma-Matata/master/extensions/server.py",
|
||||||
|
"private": False
|
||||||
|
}
|
||||||
|
|
||||||
def serverCfgCheck(self, id : int, key : str, default):
|
def serverCfgCheck(self, id : int, key : str, default):
|
||||||
if str(id) not in self.bot.serverCfg:
|
if str(id) not in self.bot.serverCfg:
|
||||||
|
79
extensions/updater.py
Normal file
79
extensions/updater.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
from discord.ext import commands
|
||||||
|
import urllib.request, urllib.error, json, os, discord, sys
|
||||||
|
|
||||||
|
class Updater(commands.Cog):
|
||||||
|
def __init__(self, bot):
|
||||||
|
self.bot = bot
|
||||||
|
self.update = {
|
||||||
|
"allowUpdate": True,
|
||||||
|
"url": "https://raw.github.com/Akumatic/Akuma-Matata/master/extensions/updater.py",
|
||||||
|
"private": False
|
||||||
|
}
|
||||||
|
self.cfg = self.bot.loadJSON("updater.json", {"token":""})
|
||||||
|
|
||||||
|
def updaterCfgCheck(self, key : str, default):
|
||||||
|
if key not in self.cfg[key]:
|
||||||
|
self.bot.serverCfg[key] = default
|
||||||
|
self.bot.writeJSON("updater.json", self.serverCfg)
|
||||||
|
|
||||||
|
@commands.command()
|
||||||
|
async def setPrivateToken(self, ctx, token: str = None):
|
||||||
|
self.updaterCfgCheck("token", "")
|
||||||
|
e = discord.Embed(title="<< Set Private Token >>")
|
||||||
|
if token == None:
|
||||||
|
e.color = discord.Color.red()
|
||||||
|
e.add_field(name="No Token given", value="Please spcify the token.")
|
||||||
|
return await ctx.send(embed=e)
|
||||||
|
await ctx.message.delete()
|
||||||
|
e.color = discord.Color.green()
|
||||||
|
self.cfg["token"] = token
|
||||||
|
self.bot.writeJSON("updater.json", self.serverCfg)
|
||||||
|
e.add_field(name="Token set", value="The given token was stored successfully.")
|
||||||
|
await ctx.send(embed=e)
|
||||||
|
|
||||||
|
def getRequest(self, update: dict):
|
||||||
|
r = urllib.request.Request(update["url"])
|
||||||
|
if update["private"]:
|
||||||
|
r.add_header("Authorization", f"token {self.cfg['token']}")
|
||||||
|
return r
|
||||||
|
|
||||||
|
@commands.command()
|
||||||
|
async def update(self, ctx):
|
||||||
|
e = discord.Embed(title="<< Updating Modules >>")
|
||||||
|
cog = None
|
||||||
|
extensions = self.bot.extensions
|
||||||
|
botRootDir = os.path.sep.join(os.path.abspath(sys.argv[0]).split(os.path.sep)[:-1])
|
||||||
|
for ext in extensions:
|
||||||
|
temp = ext.split(".")
|
||||||
|
cog = self.bot.get_cog(temp[-1].capitalize())
|
||||||
|
if cog is not None and hasattr(cog, "update"):
|
||||||
|
if cog.update["allowUpdate"]:
|
||||||
|
path = f"{os.path.join(botRootDir, *temp)}.py"
|
||||||
|
#print(f"Comparing {path} with {cog.update['url']}")
|
||||||
|
try:
|
||||||
|
local = urllib.request.urlopen(f"file://{path}").read().decode("utf-8")
|
||||||
|
remote = urllib.request.urlopen(self.getRequest(cog.update)).read().decode("utf-8")
|
||||||
|
if local != remote:
|
||||||
|
self.unload(temp[-1])
|
||||||
|
with open(path, "w") as f:
|
||||||
|
f.write(remote)
|
||||||
|
self.load(temp[-1])
|
||||||
|
e.add_field(name=f"{temp[-1]}", value="Updated")
|
||||||
|
else:
|
||||||
|
e.add_field(name=f"{temp[-1]}", value="No update found")
|
||||||
|
except urllib.error.HTTPError as ex:
|
||||||
|
e.add_field(name=f"{temp[-1]}", value=f"Error {ex.code}: {ex.msg}")
|
||||||
|
else:
|
||||||
|
e.add_field(name=f"{temp[-1]}", value="Update not allowed.")
|
||||||
|
await ctx.send(embed=e)
|
||||||
|
|
||||||
|
|
||||||
|
def load(self, ext : str):
|
||||||
|
self.bot.load_extension("extensions." + ext)
|
||||||
|
|
||||||
|
def unload(self, ext : str):
|
||||||
|
self.bot.unload_extension("extensions." + ext)
|
||||||
|
|
||||||
|
#Setup
|
||||||
|
def setup(bot):
|
||||||
|
bot.add_cog(Updater(bot))
|
@ -4,6 +4,11 @@ import discord, io
|
|||||||
class User(commands.Cog):
|
class User(commands.Cog):
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
self.update = {
|
||||||
|
"allowUpdate": True,
|
||||||
|
"url": "https://raw.github.com/Akumatic/Akuma-Matata/master/extensions/user.py",
|
||||||
|
"private": False
|
||||||
|
}
|
||||||
|
|
||||||
@commands.Cog.listener()
|
@commands.Cog.listener()
|
||||||
async def on_message(self, message):
|
async def on_message(self, message):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user