commit 21c7d1cefed0b4738259595b86b53b126639ec3c Author: Zevaryx Date: Thu Jun 24 10:37:16 2021 -0600 Initial build diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..14ca96a --- /dev/null +++ b/.gitignore @@ -0,0 +1,141 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# Config file +config.yaml diff --git a/config.example.yaml b/config.example.yaml new file mode 100644 index 0000000..fcbb2f4 --- /dev/null +++ b/config.example.yaml @@ -0,0 +1,3 @@ +--- + token: api key here + client_id: 123456789012345678 diff --git a/jarvis.png b/jarvis.png new file mode 100644 index 0000000..d2414a8 Binary files /dev/null and b/jarvis.png differ diff --git a/src/jarvis.py b/src/jarvis.py new file mode 100644 index 0000000..ddcaf88 --- /dev/null +++ b/src/jarvis.py @@ -0,0 +1,76 @@ +from discord import Embed, Color, Intents +from discord.ext import commands, tasks +from dataclasses import dataclass +from yaml import load +from psutil import Process + +try: + from yaml import CLoader as Loader +except ImportError: + from yaml import Loader + +intents = Intents.default() +intents.members = True + +jarvis = commands.Bot(command_prefix=">", intents=intents) +jarvis_self = Process() + + +@dataclass +class Config: + token: str + client_id: str + + @classmethod + def from_yaml(cls, y): + instance = cls(token=y["token"], client_id=y["client_id"]) + return instance + + +def get_config(path: str = "config.yaml") -> Config: + with open(path) as f: + raw = f.read() + y = load(raw, Loader=Loader) + return Config.from_yaml(y) + + +def convert_bytesize(bytes: int) -> str: + bytes = float(bytes) + sizes = ["B", "KB", "MB", "GB"] + size = 0 + while bytes >= 1024 and size < len(sizes) - 1: + bytes = bytes / 1024 + size += 1 + return f"{bytes:0.2f}{sizes[size]}" + + +@jarvis.event +async def on_ready(): + print("Logged in as {0.user}".format(jarvis)) + print("Connected to {} guild(s)".format(len(jarvis.guilds))) + + +@jarvis.command(name="status", help="Retrieve J.A.R.V.I.S. status") +async def _status(ctx): + title = "J.A.R.V.I.S. Status" + description = "All systems online" + color = Color.from_rgb(152, 204, 218) + embed = Embed(title=title, description=description, color=color) + with jarvis_self.oneshot(): + embed.add_field(name="CPU Usage", value=jarvis_self.cpu_percent()) + embed.add_field( + name="RAM Usage", + value=convert_bytesize(jarvis_self.memory_info().rss), + ) + embed.add_field(name="PID", value=jarvis_self.pid) + await ctx.send(embed=embed) + + +if __name__ == "__main__": + config = get_config() + print( + "https://discord.com/api/oauth2/authorize?client_id={}&permissions=8&scope=bot".format( + config.client_id + ) + ) + jarvis.run(config.token)