Please note the naff package is now deprecated. Please migrate to interactions.py, where future development will continue. https://github.com/interactions-py/interactions.py Interactions.py V5 is a combined release between interactions.py and naff. Migration is easy, and should only take an hour at most.
This is NAFF
, a python API wrapper for Discord.
NAFF is intended to be fast, easy to use, and easily modified to suit your needs.
- ✅ 100% coverage of the application commands API
- ✅ Dynamic cache with TTL support
- ✅ Modern and Pythonic API
- ✅ Proper rate-limit handling
- ✅ Feature parity with most other Discord API wrappers
While this library shares features and some stylistic choices with discord.py
, it is completely separate from them. We think discord.py
is a fantastic library, but we disagree with the direction and design decisions that were made by it.
Here is a basic example:
from naff import Client, Button, ButtonStyles, CommandTypes, context_menu, prefixed_command, listen
bot = Client(sync_interactions=True)
@listen()
async def on_startup():
print("Ready")
print(f"This bot is owned by {bot.owner}")
@prefixed_command()
async def test_button(ctx):
await ctx.send("Blurple button example!", components=Button(ButtonStyles.BLURPLE, "Click me"))
@context_menu(name="User menu", context_type=CommandTypes.USER, scopes=[931832853770149918])
async def user_context(ctx):
await ctx.send("Context menu example!", ephemeral=True)
bot.start("TOKEN")
For more examples check out our examples repo or the docs. You also can explore projects with the NAFF
topic or older dis-snek
topic.
If you get stuck join our Discord server.
Of course, we welcome all contributions to this library. Just ensure you follow our requirements. If youre stuck for things to contribute, check out our GitHub Projects for inspiration.
- Support Server: https://discord.gg/hpfNhH8BsY
- Documentation: https://naff-docs.readthedocs.io/en/latest/