70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
|
from common import *
|
||
|
from commands import COMMAND_LIST
|
||
|
|
||
|
import io
|
||
|
import os
|
||
|
import sys
|
||
|
import json
|
||
|
|
||
|
from pathlib import Path
|
||
|
from urllib import request
|
||
|
from urllib.error import URLError
|
||
|
|
||
|
DISCORD_API_BASE = "https://discord.com/api/v10"
|
||
|
|
||
|
def get_config():
|
||
|
data = {}
|
||
|
|
||
|
# prefer token from environment if present
|
||
|
envbase = ["PluralKit", "Bot"]
|
||
|
for var in ["Token", "ClientId"]:
|
||
|
for sep in [':', '__']:
|
||
|
envvar = sep.join(envbase + [var])
|
||
|
if envvar in os.environ:
|
||
|
data[var] = os.environ[envvar]
|
||
|
|
||
|
if "Token" in data and "ClientId" in data:
|
||
|
return data
|
||
|
|
||
|
# else fall back to config
|
||
|
cfg_path = Path(os.getcwd()) / "pluralkit.conf"
|
||
|
if cfg_path.exists():
|
||
|
cfg = {}
|
||
|
with open(str(cfg_path), 'r') as fh:
|
||
|
cfg = json.load(fh)
|
||
|
|
||
|
if 'PluralKit' in cfg and 'Bot' in cfg['PluralKit']:
|
||
|
return cfg['PluralKit']['Bot']
|
||
|
|
||
|
return None
|
||
|
|
||
|
def main():
|
||
|
config = get_config()
|
||
|
if config is None:
|
||
|
raise ArgumentError("config was not loaded")
|
||
|
if 'Token' not in config or 'ClientId' not in config:
|
||
|
raise ArgumentError("config is missing 'Token' or 'ClientId'")
|
||
|
|
||
|
data = json.dumps(COMMAND_LIST)
|
||
|
url = DISCORD_API_BASE + f"/applications/{config['ClientId']}/commands"
|
||
|
req = request.Request(url, method='PUT', data=data.encode('utf-8'))
|
||
|
req.add_header("Content-Type", "application/json")
|
||
|
req.add_header("Authorization", f"Bot {config['Token']}")
|
||
|
req.add_header("User-Agent", "PluralKit (app-commands updater; https://pluralkit.me)")
|
||
|
|
||
|
try:
|
||
|
with request.urlopen(req) as resp:
|
||
|
if resp.status == 200:
|
||
|
print("Update successful!")
|
||
|
return 0
|
||
|
|
||
|
except URLError as resp:
|
||
|
print(f"[!!!] Update not successful: status {resp.status}", file=sys.stderr)
|
||
|
print(f"[!!!] Response body below:\n", file=sys.stderr)
|
||
|
print(resp.read(), file=sys.stderr)
|
||
|
sys.stderr.flush()
|
||
|
|
||
|
return 1
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
sys.exit(main())
|