beymax


Namebeymax JSON
Version 1.3.0 PyPI version JSON
download
home_pagehttps://gitlab.graubert.com/agraubert/beymax
SummaryA high-level, functional programming wrapper to discord.py
upload_time2024-10-11 18:19:03
maintainerNone
docs_urlNone
authorAaron Graubert
requires_pythonNone
licenseMIT
keywords discord async asyncio sql sqlalchemy utilities
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Beymax API

A high-level, functional-focused wrapper to [discord.py](https://discordpy.readthedocs.io/en/stable/)

## About

This package started off as a personal discord bot, but as it grew in scope, I found the need to add my own utilities
on top of the wonderful [discord.py](https://discordpy.readthedocs.io/en/stable/) by GitHub user Rapptz.
Beymax aims to reduce the amount of boilerplate needed to create a functioning Discord bot, while also exposing
an API which is familiar to those used to writing event-driven code.

## Differences from discord.py

* Essentially _everything_ runs as an event listener. This includes tasks, commands, and context menus
	* Events now have 3 phases: For an event called `event`, subscribers to `before:event` are run first, then `event`, and finally `after:event`.
	* Events can be cancelled: Any listener to an event can call `event.cancel()` which will prevent any listeners in subsequent phases from being invoked.
	It does abort any listeners which have already ben called, such as other listeners to the current phase
* Client differences:
	* Events can be scheduled in the future with `Client.dispatch_future()`. This adds an entry to the database, so the scheduled event will persist through restarts.
	`.dispatch_future()` guarantees precision within at least 30s of the scheduled time.
	* Key-value storage: Reduces boilerplate for storing/retreiving arbitrary small data points. `Client.set_value()` and `Client.get_value()` can be used to
	store & retreive small strings from the database
	* Database migrations: `Client.migration()` allows schema migrations to be added in code. Migrations are called only the first time the bot starts up after
	a new migration is added.
	* Special message handlers: A small convenience layer over `Client.wait_for()`, `Client.add_special()` allows a coroutine to be invoked any time a message
	is received which meets user-defined criteria
	* Native database integration: Beymax natively supports [SQLAlchemy](https://www.sqlalchemy.org/) for interacting with databases in your bot.
* Cogs -> Suites: discord.py's concept of a `cog` is essentially the same as a Beymax `suite`. Suites group together a set of commands, context menus, event listeners, database tables, etc which logically relate to each other. Suites can define their own interdependencies, ensuring that if a suite is loaded by your bot, all of its dependencies are also loaded.
* UI Differences: discord.py's ui library follows an imperative style, where UI elements are defined in advance via subclassing. Beymax overrides this interface to provide a functionally-oriented style where UI elements are defined dynamically at runtime using function decorators.
* Argument parsing and command definition: Beymax mostly follows discord.py's style of defining command/context arguments via function annotations. Beymax extends this
by allowing all argument metadata to be set in the annotations, including parameter descriptions.


            

Raw data

            {
    "_id": null,
    "home_page": "https://gitlab.graubert.com/agraubert/beymax",
    "name": "beymax",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "discord async asyncio sql sqlalchemy utilities",
    "author": "Aaron Graubert",
    "author_email": "aaron@graubert.com",
    "download_url": "https://files.pythonhosted.org/packages/b5/22/095ca63ca213dd6d928d8a725f12bfc26b0bf8dd30620fc5a50719ec4337/beymax-1.3.0.tar.gz",
    "platform": null,
    "description": "# Beymax API\n\nA high-level, functional-focused wrapper to [discord.py](https://discordpy.readthedocs.io/en/stable/)\n\n## About\n\nThis package started off as a personal discord bot, but as it grew in scope, I found the need to add my own utilities\non top of the wonderful [discord.py](https://discordpy.readthedocs.io/en/stable/) by GitHub user Rapptz.\nBeymax aims to reduce the amount of boilerplate needed to create a functioning Discord bot, while also exposing\nan API which is familiar to those used to writing event-driven code.\n\n## Differences from discord.py\n\n* Essentially _everything_ runs as an event listener. This includes tasks, commands, and context menus\n\t* Events now have 3 phases: For an event called `event`, subscribers to `before:event` are run first, then `event`, and finally `after:event`.\n\t* Events can be cancelled: Any listener to an event can call `event.cancel()` which will prevent any listeners in subsequent phases from being invoked.\n\tIt does abort any listeners which have already ben called, such as other listeners to the current phase\n* Client differences:\n\t* Events can be scheduled in the future with `Client.dispatch_future()`. This adds an entry to the database, so the scheduled event will persist through restarts.\n\t`.dispatch_future()` guarantees precision within at least 30s of the scheduled time.\n\t* Key-value storage: Reduces boilerplate for storing/retreiving arbitrary small data points. `Client.set_value()` and `Client.get_value()` can be used to\n\tstore & retreive small strings from the database\n\t* Database migrations: `Client.migration()` allows schema migrations to be added in code. Migrations are called only the first time the bot starts up after\n\ta new migration is added.\n\t* Special message handlers: A small convenience layer over `Client.wait_for()`, `Client.add_special()` allows a coroutine to be invoked any time a message\n\tis received which meets user-defined criteria\n\t* Native database integration: Beymax natively supports [SQLAlchemy](https://www.sqlalchemy.org/) for interacting with databases in your bot.\n* Cogs -> Suites: discord.py's concept of a `cog` is essentially the same as a Beymax `suite`. Suites group together a set of commands, context menus, event listeners, database tables, etc which logically relate to each other. Suites can define their own interdependencies, ensuring that if a suite is loaded by your bot, all of its dependencies are also loaded.\n* UI Differences: discord.py's ui library follows an imperative style, where UI elements are defined in advance via subclassing. Beymax overrides this interface to provide a functionally-oriented style where UI elements are defined dynamically at runtime using function decorators.\n* Argument parsing and command definition: Beymax mostly follows discord.py's style of defining command/context arguments via function annotations. Beymax extends this\nby allowing all argument metadata to be set in the annotations, including parameter descriptions.\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A high-level, functional programming wrapper to discord.py",
    "version": "1.3.0",
    "project_urls": {
        "Homepage": "https://gitlab.graubert.com/agraubert/beymax"
    },
    "split_keywords": [
        "discord",
        "async",
        "asyncio",
        "sql",
        "sqlalchemy",
        "utilities"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "753e0c854af2f9a55f3c8324200951a920931aab2dd83d876d1e025c3b481ee3",
                "md5": "900dcfc11be717886e6d55c9d614bdfb",
                "sha256": "9fb656d3a40be31028942b78fff11ab3818b02ccfe5c074850209f2430ef9342"
            },
            "downloads": -1,
            "filename": "beymax-1.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "900dcfc11be717886e6d55c9d614bdfb",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 41111,
            "upload_time": "2024-10-11T18:19:02",
            "upload_time_iso_8601": "2024-10-11T18:19:02.338948Z",
            "url": "https://files.pythonhosted.org/packages/75/3e/0c854af2f9a55f3c8324200951a920931aab2dd83d876d1e025c3b481ee3/beymax-1.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b522095ca63ca213dd6d928d8a725f12bfc26b0bf8dd30620fc5a50719ec4337",
                "md5": "f66d88a72a042a6cb2377c9326f5cce3",
                "sha256": "f727db526b3c57a83ff59a8abfbed1c16ba58dd71b2b7982f968f95c91f7b9e0"
            },
            "downloads": -1,
            "filename": "beymax-1.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f66d88a72a042a6cb2377c9326f5cce3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 38454,
            "upload_time": "2024-10-11T18:19:03",
            "upload_time_iso_8601": "2024-10-11T18:19:03.877375Z",
            "url": "https://files.pythonhosted.org/packages/b5/22/095ca63ca213dd6d928d8a725f12bfc26b0bf8dd30620fc5a50719ec4337/beymax-1.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-11 18:19:03",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "beymax"
}
        
Elapsed time: 0.35458s