Skip to main content

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

  • Read documentation here
  • See an example bot here
  • Join our Discord Server here

🧑‍💻 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

🧑‍💻 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


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

Uploaded Source

Built Distribution

dispike-1.0.1b0-py3-none-any.whl (50.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