A Python Discord Interaction bot API wrapper.
Project description
httpcord
A Python Discord Interaction bot API wrapper.
pip install --update httpcord
From examples/*.py
import asyncio
from enum import StrEnum
import random
from httpcord import HTTPBot, CommandResponse, Interaction
from httpcord.embed import Embed
from httpcord.enums import InteractionResponseType
from httpcord.types import AutocompleteChoice
CLIENT_ID = 0000000000000000000000
CLIENT_PUBLIC_KEY = "..."
CLIENT_TOKEN = "..."
bot = HTTPBot(
client_id=CLIENT_ID,
client_public_key=CLIENT_PUBLIC_KEY,
register_commands_on_startup=True,
)
@bot.command("hello-world")
async def hello_world(interaction: Interaction) -> CommandResponse:
return CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
content=f"hello, {interaction.user.mention}! You joined this server at <t:{int(interaction.user.joined_at.timestamp())}:F>.",
)
@bot.command("ephemeral")
async def ephemeral(interaction: Interaction) -> CommandResponse:
return CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
content="Hello!",
ephemeral=True,
)
@bot.command("guess-number")
async def guess_number(interaction: Interaction, *, guess: int, max_value: int = 10) -> CommandResponse:
winning_number = random.randint(0, max_value)
if guess == winning_number:
return CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
content="Yay! You guessed the number correctly :)",
)
return CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
content="Aww, you got the number wrong. Better luck next time :)",
)
@bot.command("embed")
async def embed(interaction: Interaction) -> CommandResponse:
embed = Embed(title="Embed title")
embed.add_field(name="Embed field title 1", value="Embed field value 1", inline=False)
embed.add_field(name="Embed field title 2", value="Embed field value 2", inline=False)
embed.add_field(name="Embed field title 3", value="Embed field value 3", inline=True)
embed.add_field(name="Embed field title 4", value="Embed field value 4", inline=True)
return CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
embeds=[embed],
)
ANIMALS: list[str] = [
"dog",
"cat",
"giraffe",
"wolf",
"parrot",
"axolotl",
]
async def string_autocomplete(interaction: Interaction, current: str) -> list[AutocompleteChoice]:
return [
AutocompleteChoice(name=animal, value=animal)
for animal in ANIMALS if current.lower() in animal
]
@bot.command(
name="autocomplete",
description="command with autocomplete",
autocompletes={
"string": string_autocomplete,
},
)
async def autocomplete_command(interaction: Interaction, *, string: str) -> CommandResponse:
return CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
embeds=[Embed(title=string)],
)
@bot.command("defer-me")
async def defer_me(interaction: Interaction) -> CommandResponse:
await interaction.defer()
await asyncio.sleep(3)
await interaction.followup(CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
content=f"Deferred message.",
))
await interaction.followup(CommandResponse(
type=InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
content=f"Second follow up message.",
))
# You can return another followup message, or just a PONG if you want to do nothing else.
return CommandResponse(InteractionResponseType.PONG)
@bot.command("hello-world-deferred", auto_defer=True)
async def hello_world_long(interaction: Interaction) -> CommandResponse:
await asyncio.sleep(3)
await interaction.followup(CommandResponse(
type=InteractionResponseType.DEFERRED_UPDATE_MESSAGE,
content=f"Hello, {interaction.user.mention}!",
))
return CommandResponse(InteractionResponseType.PONG)
class Fruits(StrEnum):
apples = "apples"
cherries = "cherries"
kiwis = "kiwis"
oranges = "oranges"
@bot.command("pick")
async def pick(interaction: Interaction, *, fruit: Fruits) -> CommandResponse:
return CommandResponse(
InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
content=f"You picked: {fruit.value}!",
)
bot.start(CLIENT_TOKEN)
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
httpcord-0.1.2.tar.gz
(9.2 kB
view details)
Built Distribution
httpcord-0.1.2-py3-none-any.whl
(17.5 kB
view details)
File details
Details for the file httpcord-0.1.2.tar.gz
.
File metadata
- Download URL: httpcord-0.1.2.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7c1550aaad8e6146258607fd0cb99db6583abcd1c3b2a2fb46a38cbf74e45df |
|
MD5 | 50644311cdb596011596f70d403fb930 |
|
BLAKE2b-256 | bb0f5bceaf82a886b7d47ac73b052b69f971827e6858492f77ee619e0b5dc94b |
File details
Details for the file httpcord-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: httpcord-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee3f2dfe1578d284c4ea0a4f78722bb6a8d5ccf098b6f1be040ebf6492cc48d8 |
|
MD5 | 81fee03718e0e3f7467e520eff334ddf |
|
BLAKE2b-256 | f31de074a0db3c744c7c2c121a4ea6b36bdb46ee5585d0db3883a6c3e8e0634a |