Schedule Discord Events Straight From Your Commands
Create Discord events instantly from your commands — voice channels, stage talks, or external meetups, all in one line of code.
Md Shahriyar Alam
21 days ago
Custom Commands can now create and manage Discord Scheduled Events for you. Announce a community night, spin up a stage talk, drop an external meetup link — then edit it, start it, end it, or cancel it, all from inside a command or event handler.
Meet the event functions: create_event, edit_event, start_event,
end_event, and cancel_event.
Create an event
event = await create_event(
"Community Game Night",
"tomorrow 8pm",
type="voice",
channel="General",
)That's it. The bot creates the scheduled event on your server and hands you back the event, so you can use it right away:
await send_message("announcements", f"New event: {event.name} — see you there!")Every event function must be awaited — always write
await ....
Three kinds of events
Pick the type that fits with type=:
External — a physical place or an off-Discord link. Needs location and
end_time.
await create_event(
"Downtown Meetup",
"next saturday 3pm",
type="external",
location="Central Park, Main Gate",
end_time="next saturday 6pm",
)Voice — happens in a voice channel. Needs channel.
await create_event("Movie Night", "friday 9pm", type="voice", channel="Cinema")Stage — happens in a stage channel. Needs channel.
await create_event(
"AMA with the Team",
"in 2 days",
type="stage",
channel="Main Stage",
description="Bring your questions!",
)Create options
| Option | What it does |
|---|---|
name | Event title (required) |
start_time | When it starts — a date/time string like "tomorrow 5pm", "in 3 hours", or an exact datetime (required) |
type | "external", "voice" or "stage" (default "external") |
end_time | When it ends — required for external, optional for voice/stage |
location | Physical place / link — for external events |
channel | The voice or stage channel — for voice/stage events |
description | Longer details shown on the event |
image | A cover image URL |
What you get back
create_event returns the event object. Handy fields:
| Field | What |
|---|---|
event.id | The event id — pass this to edit/start/end/cancel |
event.name | Title |
event.start_time / event.end_time | Scheduled times |
event.status | SCHEDULED, ACTIVE, COMPLETED or CANCELED |
event.channel_id | Channel (voice/stage) |
event.location | Location (external) |
event.user_count | How many are interested |
You can even build a share link:
await send_message(
"announcements",
f"📅 {event.name}\nhttps://discord.com/events/{event.guild_id}/{event.id}",
)Edit an event
Change any field with edit_event. Pass the event (or its id) and only the
things you want to change:
await edit_event(event, name="Game Night Deluxe", start_time="tomorrow 9pm")
await edit_event(event, description="Now with prizes!")
await edit_event(event, channel="VIP Lounge")Start, end, or cancel
await start_event(event) # mark it live now
await end_event(event) # mark it finished
await cancel_event(event) # remove itstart_event flips the event to active, end_event to completed, and
cancel_event deletes it. Each takes the event object or its id.
Friendly times
You don't need exact timestamps — natural phrases work:
"tomorrow 8pm""next friday 7:30pm""in 2 hours""august 5 6pm"
Times are read in UTC. The start time must be in the future, and an end time must come after the start — otherwise the bot tells you exactly what's wrong.
When something's off
Instead of failing silently, you get a clear message:
- "External events need a location"
- "External events need an end_time"
- "Channel not found with query ..."
- "Event start_time must be in the future"
- "Nothing to edit — pass at least one field"
- "Missing permission to manage events in this server. Please fix permissions."
Make sure the bot has the Manage Events permission on your server.
Put it all together
Create a weekly hangout, announce it, and cancel the previous week's:
event = await create_event(
"Weekly Hangout",
"next monday 7pm",
type="voice",
channel="Lounge",
description="Our usual catch-up. Everyone welcome!",
)
await send_message(
"announcements",
f"🗓️ **{event.name}** is scheduled! Tap *Interested* to get a reminder.\n"
f"https://discord.com/events/{event.guild_id}/{event.id}",
)
# later, from another command that stored last week's id:
# await cancel_event(old_event_id)Create, edit, run, and clean up your events — all from Custom Commands, in plain and simple lines.
Loading comments…
Need help?
Have a question, a suggestion, or stuck on something? Reach out — we're happy to help.