An independent, simple to use, powerful framework for creating interaction-based Discord bots. Powered by FastAPI
Project description
dispike
⚙️ A simple to use, powerful framework for creating stateless, independent bots using Discord Slash Commands.⚡ Powered by FastAPI.
📦 Installation
Latest stable-version
pip install dispike
📚 Learn more
🧑💻 Quick Start Examples
Basic
from dispike import Dispike, DiscordCommand, DiscordResponse
from dispike import IncomingDiscordSlashInteraction
from dispike.helper import Embed
bot = Dispike(...)
command = DiscordCommand(
name="stock", description="Get the latest active stocks in the market!"
)
@bot.on("stock")
async def handle_stock_request(stockticker: str, ctx: IncomingDiscordSlashInteraction) -> DiscordResponse:
get_price = function(stockticker...)
embed=Embed()
embed.add_field(name="Stock Price for {stockticker}.", value="Current price is {get_price}", inline=True)
embed.set_footer(text="Request received by {ctx.member.user.username}")
return DiscordResponse(embed=embed)
if __name__ == "__main__":
bot.register(command)
bot.run()
Advanced
import dispike
from dispike import interactions, DiscordCommand, DiscordResponse
from dispike import IncomingDiscordSlashInteraction
from dispike.helper import Embed
class SampleGroupCollection(interactions.EventCollection):
def __init__(self):
self._api_key = "..."
def command_schemas(self):
return [
DiscordCommand(
name="lateststocks", description="Get the highest performing stocks in the market currently!"
),
interactions.PerCommandRegistrationSettings(
schema=DiscordCommand(
name="price",
description="return ticker price for server",
options=[],
),
guild_id=11111111,
)
]
def get_stock_information(self, stock_ticker):
return ...
def get_portfolio_stats(self, user_id):
return ...
@interactions.on("lateststocks")
async def latest_stocks(self, ctx: IncomingDiscordSlashInteraction) -> DiscordResponse:
embed = Embed()
# check user's porfolio by looking in the database by their discord ID
portfolio_stats = self.get_portfolio_stats(
ctx.member.user.id
)
embed.add_field(name="Stocks are doing good!", value=f"Current portfolio is {portfolio_stats}", inline=True)
embed.set_footer(text="Request received by {ctx.member.user.username}")
return DiscordResponse(embeds=[embed])
@interactions.on("price")
async def get_stock_price(self, ctx: IncomingDiscordSlashInteraction, ticker: str) -> DiscordResponse:
embed = Embed()
embed.add_field(name=f"Stock Price for 1.",
value=f"Current price is {self.get_stock_information(ticker)}", inline=True)
embed.set_footer(text="Request received by {ctx.member.user.username}")
return DiscordResponse(embeds=[embed])
## Inside seperate file
from dispike import Dispike, DiscordCommand
bot = Dispike(...)
bot.register_collection(SampleGroupCollection(), register_command_with_discord=True)
if __name__ == "__main__":
bot.run(port=5000)
Discord API Coverage
View Coverage
| API Endpoint | Implementation |
|---|---|
| Get Global Application Commands | ✅ Implemented |
| Create Global Application Command | ✅ Implemented |
| Edit Global Application Command | ✅ Implemented |
| Delete Global Application Command | ✅ Implemented |
| Create Guild Application Command | ✅ Implemented |
| Edit Guild Application Command | ✅ Implemented |
| Delete Guild Application Command | ✅ Implemented |
| Create Interaction Response | ✅ Implemented |
| Edit Original Interaction Response | ✅ Implemented |
| Delete Original Interaction Response | ✅ Implemented |
| Create Followup Message | ✅ Implemented |
| Edit Followup Message | ✅ Implemented |
| Delete Followup Message | ✅ Implemented |
| Data Models and Types | ✅ Implemented |
| ApplicationCommand | ✅ Implemented |
| ApplicationCommandOption | ✅ Implemented |
| ApplicationCommandOptionType | ✅ Implemented |
| ApplicationCommandOptionChoice | ✅ Implemented |
| Interaction | ✅ Implemented |
| Interaction Response | ✅ Implemented |
| Message Components | ✅ Implemented |
| Buttons (Message Components) | ✅ Implemented |
| Action Rows (Message Components) | ✅ Implemented |
| Message Select (Message Components) | ✅ Implemented |
ℹ️ Notice
- Python 3.6+
- Does not speak over the discord gateway. discord-py-slash-command is what you are looking for..
- You will need a server to accept connections directly from discord!
🧑💻 Development
Help is wanted in mantaining this library. Please try to direct PRs to the dev branch, and use black formatting (if possible).
🎉 Special Thanks
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
dispike-1.0.1b0.tar.gz
(39.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
dispike-1.0.1b0-py3-none-any.whl
(50.5 kB
view details)
File details
Details for the file dispike-1.0.1b0.tar.gz.
File metadata
- Download URL: dispike-1.0.1b0.tar.gz
- Upload date:
- Size: 39.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.6 CPython/3.9.6 Darwin/20.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76e35cd778d8a85fd21ec34f6a088dfe457a379126376ace7262d5a73942459b
|
|
| MD5 |
ab4d6070c271b0b22d44ade3d20191ae
|
|
| BLAKE2b-256 |
8d0259402415f6c5a72d41e50a3c462746592a34eb46762bb34b1a7e09abae49
|
File details
Details for the file dispike-1.0.1b0-py3-none-any.whl.
File metadata
- Download URL: dispike-1.0.1b0-py3-none-any.whl
- Upload date:
- Size: 50.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.6 CPython/3.9.6 Darwin/20.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b2e4ab983580cb736cf64b281470163b51b86fb319b9055fbcb5ea75e3f4343
|
|
| MD5 |
ac7b6da0a0bf7ef36976e8f6760c80d4
|
|
| BLAKE2b-256 |
ce36945ad69fd302530d44fa78e2309c9d171c5f6a77fe0b5dec79d5434878cd
|