Level Up Coding

Coding tutorials and news. The developer homepage gitconnected.com && skilled.dev && levelup.dev

Follow publication

I released vaporware.

SwitchUpCB, PhD
Level Up Coding
Published in
8 min readNov 21, 2022

Image by freepik

Vaporware is software or hardware that has been advertised, but is not yet available to use. Obviously, releasing vaporware is not something to be proud of. Yet I managed to do so by accident. You can learn from my errors so as to not make the same mistake. So here’s how it happened and how I fixed it.

On March 1st, 2022, I set out to create Disgo, a Discord API Wrapper designed to be flexible, performant, secure, and thread-safe. Disgo aims to provide every feature in the Discord API along with optional rate limiting, structured logging, shard management, and caching… However, at that time, there was one issue: I had yet to commit a single line of code. Instead, I created a README outlining my vision for Disgo. What did I come up with?

The Design Documentation

Requests

In order to use most API Wrappers, you must learn three things.

  1. The Programming Language
  2. The API of the Consumer (Library)
  3. The API of the Producer (Discord)

This is because most programmers start creating libraries by using functions: Such that the function to send a message is ChannelMessage(…), while the function to respond to an interaction is InteractionRespond(…). Each function merits its own parameters, which requires you to read the documentation of the library to figure out how to do each task.

This is a huge waste of time and needlessly complex.

Disgo uses a single function to send HTTP requests (without type assertion or generics).

Send(*Client)

That’s it. Easy to remember and even easier to use. This function always maintains a single parameter: The client that the request is being sent by. However, you still need a way to specify what data is actually being sent. If you don’t use functions to do this, what’s the alternative? Structs.

// Create a Create Global Application Command request.
request := disgo.CreateGlobalApplicationCommand{
Name: "main",
Description: "A basic command.",
...
}

// Send the request.
command, err := request.Send(bot)

Each struct maintains all the data a person would need to send a valid request. That includes URL Query String…

No responses yet

Write a response