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.
Install with pip: pip install discord_sls
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | e0875ccec9303a89c6db16abba423dc5487169a4cf495162a1163c35092462c4 |
|
MD5 | aeb72d1e9286dd03b98888eda4a15807 |
|
BLAKE2b-256 | 523565ba0a688c3ce4ecf2e18f1f6f0a771c406b4855b095d97375d1ddcee7a4 |