Skip to main content

For building serverless discord bots

Project description

Discord SLS

A set of tools for building a discord bot with a serverless architecture in mind. If you are looking for a more complete discord sdk, check out discord.py.

PyPI

Install with pip: pip install discord_sls

Example/Template Repo

Usage

The library provides a decorator @bot_handler which can be used to decorate a lambda handler to respond to discord api requests. It will handle the ping-pong handshake, and will parse the request body into a python object for you to use. The decorator expects you to return Ineraction Callback Data.

Discord expects a quick response to the initial request, if your bot needs longer to handle an interaction you can use the send_command_to_queue function to send the command to a queue for processing in another lambda decorated with @deferred_response_handler. The queue is determined by the LONG_RESPONSE_QUEUE environment variable.

import json
import logging
from discord_sls import Interaction, bot_handler, deferred_response_handler

@bot_handler
def discord_bot(command_body, send_command_to_queue):
    command_name = command_body.get("data", {}).get("name")
    if command_name == "hello":
        return {"content": "Hello Moto"}
    elif command_name == "helloasync":
        send_command_to_queue(command_body)
        return {"content": "Hello..."}
    else:
        logging.warn(f"unhandled command: {command_name}")
        return {"content": "Unknown Command"}


@deferred_response_handler
def long_response_handler(interaction: Interaction):
  interaction.follow_up({"content": "Hello...async"})

Keeping the bot warm

With most serverless architectures you will need to keep your lambdas warm to avoid cold start times. A popular mechanism for doing that is using cloudwatch event rules, the @bot_handler decorator will automatically handle these requests for you.T his is what a SAM template could look like for the rule:

BotKeepWarm:
  Type: AWS::Events::Rule
  Properties:
    Description: Keeps the bot lambda warm
    Name: !Sub 'keep-warm-${Stage}'
    ScheduleExpression: rate(5 minutes)
    Targets:
      - Id: KeepWarmDiscordBot
        Arn: !GetAtt DiscordBotFunction.Arn

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

discord_sls-0.4.0-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file discord_sls-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: discord_sls-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 5.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.9.2 readme-renderer/37.3 requests/2.28.1 requests-toolbelt/0.10.1 urllib3/1.26.13 tqdm/4.64.1 importlib-metadata/5.2.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.6 CPython/3.9.16

File hashes

Hashes for discord_sls-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e0875ccec9303a89c6db16abba423dc5487169a4cf495162a1163c35092462c4
MD5 aeb72d1e9286dd03b98888eda4a15807
BLAKE2b-256 523565ba0a688c3ce4ecf2e18f1f6f0a771c406b4855b095d97375d1ddcee7a4

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 Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page