A sane Discord API for Python 3 built on asyncio and good intentions
An opinionated, static typed Discord microframework for Python3 and asyncio.
Built on good intentions and the hope that it will be extendable and reusable, rather than an obstacle for future development.
import hikari bot = hikari.Bot(token="...") @bot.listen() async def ping(event: hikari.MessageCreateEvent) -> None: # If a non-bot user sends a message "hk.ping", respond with "Pong!" if not event.message.author.is_bot and event.message.content.startswith("hk.ping"): await event.message.reply("Pong!") bot.run()
Events are determined by the type annotation on the event parameter, or
alternatively as a type passed to the
@bot.listen() decorator, if you do not
want to use type hints.
@bot.listen(hikari.MessageCreateEvent) async def ping(event): ...
Install hikari from PyPI with the following command:
python -m pip install hikari -U --pre # Windows users may need to run this instead... py -3 -m pip install hikari -U --pre
You may wish to use a command framework on top of Hikari so that you can start writing a bot quickly without implementing your own command handler.
Hikari does not include a command framework by default, so you will want to pick a third party library to do it.
lightbulb- a simple and easy to use command framework for Hikari.
Making your application more efficient
As your application scales, you may need to adjust some things to keep it performing nicely.
Python optimisation flags
CPython and Stackless Python provide two optimisation flags that remove internal safety checks that are useful for development, and change other internal settings in the interpreter.
python bot.py- no optimisation - this is the default.
python -O bot.py- first level optimisation - features such as internal assertions will be disabled.
python -OO bot.py- second level optimisation - more features (including all docstrings) will be removed from the loaded code at runtime.
If you have a C compiler (Microsoft VC++ Redis 14.0 or newer, or a modern copy
of GCC/G++, Clang, etc), you can install hikari using
pip install -U hikari[speedups]. This will install
ciso8601, which will provide you with a small performance boost.
If you use Linux, you will get additional performance benefits from using
a library called
uvloop. This replaces the default
asyncio event loop with
one that uses
libuv internally. You can run
pip install uvloop and then
amend your script to be something similar to the following example to utilise it
in your application:
import os import hikari if os.name != "nt": import uvloop uvloop.install() bot = hikari.Bot(...) ...
Eventually, we will start providing the option to use compiled components of this library over pure Python ones if it suits your use case. This should also enable further scalability of your application, should PEP 554 -- Multiple Interpreters in the Stdlib be accepted.
Currently, this functionality does not yet exist.
If you wish to contribute something, you should first start by cloning the repository.
In the repository, make a virtual environment (
python -m venv .venv) and enter
source .venv/bin/activate on Linux, or for Windows use one of
The first thing you should run is
pip install nox to install nox. This handles
running predefined tasks and pipelines.
You can install any dependencies with
pip install -r requirements.txt -r dev-requirements.txt.
Once this is complete, you can run
nox without any arguments to ensure
everything builds and is correct.
Where can I start?
Check out the issues tab on GitHub. If you are nervous, look for issues marked as for something easy to start with!
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size hikari-2.0.0.dev82-py3-none-any.whl (359.5 kB)||File type Wheel||Python version py3||Upload date||Hashes View|
|Filename, size hikari-2.0.0.dev82.tar.gz (278.4 kB)||File type Source||Python version None||Upload date||Hashes View|
Hashes for hikari-2.0.0.dev82-py3-none-any.whl