<div align="center">
<img alt="" src="docs/_static/logo.svg" width="160px"/>
# Nextcore
<sub>A low level Discord API wrapper.</sub>
</div>
### ✨ Features
- #### Speed
We try to make the library as fast as possible, without compromising on readability of the code or features.
- #### Modularity
All the components can easily be swapped out with your own.
- #### Control
Nextcore offers fine-grained control over things most libraries don't support.
This currently includes:
- Setting priority for individual requests
- Swapping out components
<br>
<div align="center">
# Examples
</div>
### 🏓 Ping pong
A simple "ping pong" example in nextcore.
This will respond with "pong" each time someone sends "ping" in the chat.
```py
import asyncio
from os import environ
from typing import cast
from discord_typings import MessageData
from nextcore.gateway import ShardManager
from nextcore.http import BotAuthentication, HTTPClient, Route
# Constants
AUTHENTICATION = BotAuthentication(environ["TOKEN"])
# Intents are a way to select what intents Discord should send to you.
# For a list of intents see https://discord.dev/topics/gateway#gateway-intents
GUILD_MESSAGES_INTENT = 1 << 9
MESSAGE_CONTENT_INTENT = 1 << 15
INTENTS = GUILD_MESSAGES_INTENT | MESSAGE_CONTENT_INTENT # Guild messages and message content intents.
# Create a HTTPClient and a ShardManager.
# A ShardManager is just a neat wrapper around Shard objects.
http_client = HTTPClient()
shard_manager = ShardManager(AUTHENTICATION, INTENTS, http_client)
@shard_manager.event_dispatcher.listen("MESSAGE_CREATE")
async def on_message(message: MessageData):
# This function will be called every time a message is sent.
if message["content"] == "ping":
# Send a pong message to respond.
route = Route("POST", "/channels/{channel_id}/messages", channel_id=message["channel_id"])
await http_client.request(
route,
rate_limit_key=AUTHENTICATION.rate_limit_key,
json={"content": "pong"},
headers=AUTHENTICATION.headers,
)
async def main():
await http_client.setup()
# This should return once all shards have started to connect.
# This does not mean they are connected.
await shard_manager.connect()
# Raise a error and exit whenever a critical error occurs
(error,) = await shard_manager.dispatcher.wait_for(lambda: True, "critical")
raise cast(Exception, error)
asyncio.run(main())
```
> More examples can be seen in the [examples](examples/) directory.
<br>
## Contributing
Want to help us out? Please read our [contributing](https://nextcore.readthedocs.io/en/latest/contributing/getting_started.html) docs.
Raw data
{
"_id": null,
"home_page": "https://github.com/nextsnake/nextcore",
"name": "nextcore",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8,<4.0",
"maintainer_email": "",
"keywords": "discord,bot,wrapper,api",
"author": "tag-epic",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/1c/88/cad19673063056cea838cab695370c54d48e645760d312b8938510c67d33/nextcore-2.0.1.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n\n <img alt=\"\" src=\"docs/_static/logo.svg\" width=\"160px\"/>\n \n # Nextcore\n <sub>A low level Discord API wrapper.</sub>\n \n</div>\n\n### \u2728 Features\n\n- #### Speed\n\n We try to make the library as fast as possible, without compromising on readability of the code or features.\n \n- #### Modularity\n\n All the components can easily be swapped out with your own.\n\n- #### Control\n\n Nextcore offers fine-grained control over things most libraries don't support. \n \n This currently includes: \n - Setting priority for individual requests\n - Swapping out components\n\n<br>\n\n<div align=\"center\">\n\n # Examples\n \n</div>\n\n### \ud83c\udfd3 Ping pong\nA simple \"ping pong\" example in nextcore.\nThis will respond with \"pong\" each time someone sends \"ping\" in the chat.\n```py\nimport asyncio\nfrom os import environ\nfrom typing import cast\n\nfrom discord_typings import MessageData\n\nfrom nextcore.gateway import ShardManager\nfrom nextcore.http import BotAuthentication, HTTPClient, Route\n\n# Constants\nAUTHENTICATION = BotAuthentication(environ[\"TOKEN\"])\n\n# Intents are a way to select what intents Discord should send to you.\n# For a list of intents see https://discord.dev/topics/gateway#gateway-intents\nGUILD_MESSAGES_INTENT = 1 << 9\nMESSAGE_CONTENT_INTENT = 1 << 15\n\nINTENTS = GUILD_MESSAGES_INTENT | MESSAGE_CONTENT_INTENT # Guild messages and message content intents.\n\n\n# Create a HTTPClient and a ShardManager.\n# A ShardManager is just a neat wrapper around Shard objects.\nhttp_client = HTTPClient()\nshard_manager = ShardManager(AUTHENTICATION, INTENTS, http_client)\n\n\n@shard_manager.event_dispatcher.listen(\"MESSAGE_CREATE\")\nasync def on_message(message: MessageData):\n # This function will be called every time a message is sent.\n if message[\"content\"] == \"ping\":\n # Send a pong message to respond.\n route = Route(\"POST\", \"/channels/{channel_id}/messages\", channel_id=message[\"channel_id\"])\n\n await http_client.request(\n route,\n rate_limit_key=AUTHENTICATION.rate_limit_key,\n json={\"content\": \"pong\"},\n headers=AUTHENTICATION.headers,\n )\n\n\nasync def main():\n await http_client.setup()\n\n # This should return once all shards have started to connect.\n # This does not mean they are connected.\n await shard_manager.connect()\n\n # Raise a error and exit whenever a critical error occurs\n (error,) = await shard_manager.dispatcher.wait_for(lambda: True, \"critical\")\n\n raise cast(Exception, error)\n\n\nasyncio.run(main())\n```\n\n> More examples can be seen in the [examples](examples/) directory.\n\n<br>\n\n## Contributing\nWant to help us out? Please read our [contributing](https://nextcore.readthedocs.io/en/latest/contributing/getting_started.html) docs.\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A low level Discord API wrapper",
"version": "2.0.1",
"project_urls": {
"Bug Tracker": "https://github.com/nextsnake/nextcore/issues",
"Discord": "https://discord.gg/3RFUm3eP5c",
"Documentation": "https://nextcore.readthedocs.io",
"Homepage": "https://github.com/nextsnake/nextcore",
"Repository": "https://github.com/nextsnake/nextcore"
},
"split_keywords": [
"discord",
"bot",
"wrapper",
"api"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6d9845364378c41a4ec82b3ecb9a0ac119d36f327fe2692b77eae337075b98b4",
"md5": "ac56ffa69dd0f2b3e4897c7e3dc121a7",
"sha256": "3c84b0366bc2736bf36b226c07119a783a0b756184db1391bef3873cac40acc2"
},
"downloads": -1,
"filename": "nextcore-2.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ac56ffa69dd0f2b3e4897c7e3dc121a7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4.0",
"size": 74203,
"upload_time": "2023-07-09T22:43:19",
"upload_time_iso_8601": "2023-07-09T22:43:19.045118Z",
"url": "https://files.pythonhosted.org/packages/6d/98/45364378c41a4ec82b3ecb9a0ac119d36f327fe2692b77eae337075b98b4/nextcore-2.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1c88cad19673063056cea838cab695370c54d48e645760d312b8938510c67d33",
"md5": "7350940dfdf71b5f180dd801710113a1",
"sha256": "b199ed3c5a1c2dd8d32be0f6e72049fd4505812a7bab30c726d8c5a343223354"
},
"downloads": -1,
"filename": "nextcore-2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "7350940dfdf71b5f180dd801710113a1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4.0",
"size": 37286,
"upload_time": "2023-07-09T22:43:20",
"upload_time_iso_8601": "2023-07-09T22:43:20.753333Z",
"url": "https://files.pythonhosted.org/packages/1c/88/cad19673063056cea838cab695370c54d48e645760d312b8938510c67d33/nextcore-2.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-09 22:43:20",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "nextsnake",
"github_project": "nextcore",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "nextcore"
}