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

Uploaded Source

Built Distribution

dispike-1.0.1b0-py3-none-any.whl (50.5 kB view details)

Uploaded Python 3

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

Hashes for dispike-1.0.1b0.tar.gz
Algorithm Hash digest
SHA256 76e35cd778d8a85fd21ec34f6a088dfe457a379126376ace7262d5a73942459b
MD5 ab4d6070c271b0b22d44ade3d20191ae
BLAKE2b-256 8d0259402415f6c5a72d41e50a3c462746592a34eb46762bb34b1a7e09abae49

See more details on using hashes here.

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

Hashes for dispike-1.0.1b0-py3-none-any.whl
Algorithm Hash digest
SHA256 9b2e4ab983580cb736cf64b281470163b51b86fb319b9055fbcb5ea75e3f4343
MD5 ac7b6da0a0bf7ef36976e8f6760c80d4
BLAKE2b-256 ce36945ad69fd302530d44fa78e2309c9d171c5f6a77fe0b5dec79d5434878cd

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