Skip to content
/ dispike Public

An independent, simple to use, powerful framework for creating interaction-based Discord bots. Powered by FastAPI

License

Notifications You must be signed in to change notification settings

ms7m/dispike

Repository files navigation


dispike

⚙️ A simple to use, powerful framework for creating stateless, independent bots using Discord Slash Commands.

⚡ Powered by FastAPI.


Notice


As of 2022, I simply don't have the time to maintain this library. This library should function normally until Discord disables the v8 API. I hope I can resurrect this project in the future. If you would like to maintain or take over, I'm happy to help in the discord server, or sending me a quick email. :)


📦 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
Message Attachments ⚠️ Not 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

About

An independent, simple to use, powerful framework for creating interaction-based Discord bots. Powered by FastAPI

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published