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 hashes)

Uploaded Python 3

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