Metadata-Version: 2.1
Name: channels-discord
Version: 0.3.1
Summary: Interface server connecting Django's channels and Discord
Home-page: https://github.com/AdvocatesInc/django-channels-discord
Author: Advocates Inc
Author-email: admin@adv.gg
License: MIT
Project-URL: Bug Tracker, https://github.com/AdvocatesInc/django-channels-discord/issues
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE.txt

# Channels-Discord

**Django Channels Discord** is a bridge between Discord (specifically, the [discord.py](https://github.com/Rapptz/discord.py) Python library) and Django's [channels](https://github.com/django/channels)).  It contains both a new interface server for connecting to Discord and Channels consumers -- everything you need to turn your Django app into an Discord chatbot, chat monitoring/moderating service, or whatever else you might use a real-time Discord client to do.

This project is more of a stub right now, and will be more further fleshed out as new features are wired up from discord.py.

## Requirements

Most of the requirements can be found in setup.py, but the most important note is that this requires library requires [Django Channels 3+](https://channels.readthedocs.io/en/latest/) -- Channels 1.x and 2.x are not supported.

## Installation

Install the package from github:

```bash
pip install channels-discord
```

## Basic Usage

1. Add the library to `INSTALLED_APPS`:

    ```
    INSTALLED_APPS = (
        ...
        'channels_discord',
    )
    ```

2. Create a Consumer

    Create a new consumer by inheriting from `DiscordConsumer`:

    ```python
    from channels_discord import DiscordConsumer

    class MyDiscordConsumer(DiscordConsumer):
        def ready(self):
            """
            Optional hook for actions on connection to Discord
            """
            print('You are now connected to discord!')

        def my_custom_message(self):
            """
            Use built-in functions to send basic discord actions
            """
            self.send_action('dm', user_id='SOME_DISCORD_USER_ID', text='your message')
            self.send_action(
                'send_to_channel',
                channel_id='SOME_DISCORD_CHANNEL_ID',
                text='your message'
            )
    ```

3. Add your consumer(s) to your router

    You can use the `discord` type in channels `ProtocolTypeRouter` to connect your new consumer to the interface server, and ensure your `discord` messages are delivered to the right place:

    ```python
    from channels.routing import ProtocolTypeRouter
    from myapp.consumers import MyDiscordConsumer

    application = ProtocolTypeRouter({
        'discord': MyDiscordConsumer,
    })
    ```

4. Start the interface server

    The interface server can be started by simply running this in the command line:

    ```bash
    channels-discord
    ```

    The server requires that the `token` and `application` properties be set:

    - `token`: Either a bot auth token or a user access token from user OAuth access. For information on how to acquire these tokens, please see Discord's [developer documentation](https://discordapp.com/developers/docs/topics/oauth2).

    - `application`: An import string pointing to the location of your app's ASGI application. Hence, if your app was named `myapp`, contained an ASGI filed called `asgi.py`, and your ASGI application is named `my_application`, you could start the server by running:

    ```
    channels-discord -t 'MY_LONG_BOT_TOKEN' -a 'myapp.asgi:my_application'
    ```

    You can also set these values using the env variables `CHANNELS_DISCORD_APPLICATION` and `DISCORD_BOT_TOKEN`.


