brainboxdotcc / DPP

C++ Discord API Bot Library - D++ is Lightweight and scalable for small and huge bots!
https://dpp.dev/
Apache License 2.0
1.06k stars 163 forks source link

Coroutines Hiding Errors Within on_ready Event #1222

Closed Ashthetik closed 1 week ago

Ashthetik commented 2 months ago

Git Commit Reference

ced36fd7652ed24ec3784cbc150722a1e5f6456a

Describe the bug:

When utilising coroutines within the on_ready function, it's possible for D++ to ignore HTTP error codes and skip on printing any errors. This specifically happens when a user creates a malformed Slash Command (see below) and proceeds to send it to Discord.

To Reproduce:

Utilising the basic layout of the example bot provided in the Using Slash Commands and Interactions wiki:

  1. Convert the on_ready to a coroutine utilisng -> dpp::task<void>.
  2. Malform the command data either by leaving a field empty, or overpopulating (>100 characters) -- see Additional Context.
  3. Resume building the bot as usual.
  4. Observe as it fails to output the error.

Expected Behaviour:

As expected with a synchronous command creation, it would also be expected that any error codes would also mirror through with a coroutine setup.

Screenshots:

DPP_Bug_Report_Ev1

System Details:

Additional Context:

Example Minimal Code:

#include <dpp/dpp.h>

int main() {
    dpp::cluster bot("...");

    bot.on_ready([&bot, logs](const dpp::ready_t &) -> dpp::task<void> {
        if (dpp::run_once<struct bulk_register>()) {
            const dpp::slashcommand bancmd(
                "", // Empty Field
                // Overpopulated Field
               "...............................................................................................................................................................................................................................................   ", 
                bot.me.id
            );

            co_await bot.co_global_command_create(bancmd);
        }

        co_return;
    });

    bot.start(dpp::st_wait);

    return 0;
}   
Mishura4 commented 2 months ago

Not a bug - you need to print the error yourself with coroutines The non-coroutine version passes a default callback that prints errors, this wouldn't be feasible with coroutines

With that said we could document this better

Ashthetik commented 2 months ago

Noted. Treating it respectively with confirmation_callback_t and is_error() mimics it enough.

Never knew coroutines would break the logic flow I had. The more you know :+1:

Ashthetik commented 2 months ago

Is it all good to close this, or should I keep it open for tracking purposes for a docs update? I'd love to PR it, but I suck at formal documentation, lol

Jaskowicz1 commented 2 months ago

Is it all good to close this, or should I keep it open for tracking purposes for a docs update? I'd love to PR it, but I suck at formal documentation, lol

Feel free to PR it! We can always say if something needs to be described more. Besides, some pages in our docs aren't too formal anyways (look at this page for example).

Jaskowicz1 commented 2 months ago

Updated the labels to reflect @Mishura4 's comment as this isn't a bug but rather a lack of documentation.

Jaskowicz1 commented 1 week ago

Any news on this?

braindigitalis commented 1 week ago

is there actually anything to do here? not sure anything needs to be added?

Mishura4 commented 1 week ago

Documentation

Ashthetik commented 1 week ago

Yeah I was supposed to make a PR for the docs on this but forgot

Ashthetik commented 1 week ago

All good to close this now with the doc update being merged? Or are we keeping it up for visibility?

Jaskowicz1 commented 1 week ago

Closed as of #1288