Skip to main content

A sane Discord API for Python 3 built on asyncio and good intentions

Project description

hikarivers traviscomstats pyvers codecov prs issues black mypy docs

Discord

hikari

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):
    ...

Installation

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

Additional resources

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.

hikari[speedups]

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 aiodns, cchardet, and ciso8601, which will provide you with a small performance boost.

uvloop

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(...)
...

Compiled extensions

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.


Developing Hikari

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 it (source .venv/bin/activate on Linux, or for Windows use one of .venv\Scripts\activate.ps1, .venv\Scripts\activate.bat, source .venv/Scripts/activate).

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 good-first-issue-badge for something easy to start with!

good-first-issues

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hikari-2.0.0.dev82.tar.gz (278.4 kB view details)

Uploaded Source

Built Distribution

hikari-2.0.0.dev82-py3-none-any.whl (359.5 kB view details)

Uploaded Python 3

File details

Details for the file hikari-2.0.0.dev82.tar.gz.

File metadata

  • Download URL: hikari-2.0.0.dev82.tar.gz
  • Upload date:
  • Size: 278.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for hikari-2.0.0.dev82.tar.gz
Algorithm Hash digest
SHA256 f5e5a2f735f7a901875b7831c945e08db6aa42681f6e04249ff34a75ceaeee76
MD5 86c614989e7391968f7d5a8b81f4807e
BLAKE2b-256 9355e690b78185fa6c115736413947846c2cec57316fa36fd262bfbee4062a83

See more details on using hashes here.

File details

Details for the file hikari-2.0.0.dev82-py3-none-any.whl.

File metadata

  • Download URL: hikari-2.0.0.dev82-py3-none-any.whl
  • Upload date:
  • Size: 359.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for hikari-2.0.0.dev82-py3-none-any.whl
Algorithm Hash digest
SHA256 3ff503324b0b28c837376b0775f13bdf8687706dc97d61711ae24d10bab3c3d1
MD5 3e8b8cb79acc750ac0acee4f849e29b7
BLAKE2b-256 a9a796cedadb556e2c5342e7dfb63076437420bd7dd422fb3c21e1d3e624ed7c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page