@@ -363,13 +363,39 @@ void DiscordCPP::Discord::handle_raw_event(const std::string &event_name, const
363
363
guild->_update_emojis (emojis);
364
364
} else if (event_name == " GUILD_ROLE_CREATE" ) {
365
365
Guild *guild = get_guild (data.at (" guild_id" ).get <std::string>());
366
+ Role role = Role (data.at (" role" ), guild->get_id (), get_token ());
366
367
guild->_add_role (Role (data.at (" role" ), guild->get_id (), get_token ()));
368
+
369
+ try {
370
+ on_role_create (role);
371
+ } catch (const std::exception &e) {
372
+ log .error (" ignoring exception in on_role_create: " + std::string (e.what ()));
373
+ }
367
374
} else if (event_name == " GUILD_ROLE_UPDATE" ) {
368
375
Guild *guild = get_guild (data.at (" guild_id" ).get <std::string>());
369
- guild->_update_role (Role (data.at (" role" ), guild->get_id (), get_token ()));
376
+ Role role = Role (data.at (" role" ), guild->get_id (), get_token ());
377
+ guild->_update_role (role);
378
+
379
+ try {
380
+ on_role_update (role);
381
+ } catch (const std::exception &e) {
382
+ log .error (" ignoring exception in on_role_update: " + std::string (e.what ()));
383
+ }
370
384
} else if (event_name == " GUILD_ROLE_DELETE" ) {
385
+ std::string role_id = data.at (" role_id" ).get <std::string>();
371
386
Guild *guild = get_guild (data.at (" guild_id" ).get <std::string>());
372
- guild->_remove_role (data.at (" role_id" ).get <std::string>());
387
+
388
+ for (Role role : guild->get_roles ()) {
389
+ if (role.get_id () == role_id) {
390
+ guild->_remove_role (role_id);
391
+ try {
392
+ on_role_delete (role);
393
+ } catch (const std::exception &e) {
394
+ log .error (" ignoring exception in on_role_delete: " + std::string (e.what ()));
395
+ }
396
+ break ;
397
+ }
398
+ }
373
399
} else if (event_name == " MESSAGE_CREATE" ) {
374
400
if (has_value (data, (" guild_id" ))) {
375
401
std::string guild_id = data.at (" guild_id" ).get <std::string>();
0 commit comments