@@ -568,107 +568,143 @@ class core
568568 using voice_server_update_t = std::function<void (gateway::events::voice_server_update obj)>;
569569 using webhooks_update_t = std::function<void (gateway::events::webhooks_update obj)>;
570570
571+ using raw_event_t = std::function<void (json obj, shards::shard * _shard)>;
572+
571573 // / TYPING_START callback
572574 void set_on_typing_start (typing_start_t cb) { i_typing_start = cb; }
575+ void set_on_typing_start_raw (raw_event_t cb) { i_typing_start_raw = cb; }
573576
574577 // / MESSAGE_CREATE callback
575578 void set_on_message_create (message_create_t cb) { i_message_create = cb; }
579+ void set_on_message_create_raw (raw_event_t cb) { i_message_create_raw = cb; }
576580
577581 // / MESSAGE_CREATE callback for direct messages
578582 void set_on_message_create_dm (message_create_t cb) { i_message_create_dm = cb; }
583+ void set_on_message_create_dm_raw (raw_event_t cb) { i_message_create_dm_raw = cb; }
579584
580585 // / MESSAGE_UPDATE callback
581586 void set_on_message_update (message_update_t cb) { i_message_update = cb; }
587+ void set_on_message_update_raw (raw_event_t cb) { i_message_update_raw = cb; }
582588
583589 // / MESSAGE_DELETE callback
584590 void set_on_message_delete (message_delete_t cb) { i_message_delete = cb; }
591+ void set_on_message_delete_raw (raw_event_t cb) { i_message_delete_raw = cb; }
585592
586593 // / MESSAGE_DELETE_BULK callback
587594 void set_on_message_delete_bulk (message_delete_bulk_t cb) { i_message_delete_bulk = cb; }
595+ void set_on_message_delete_bulk_raw (raw_event_t cb) { i_message_delete_bulk_raw = cb; }
588596
589597 // / GUILD_CREATE callback
590598 void set_on_guild_create (guild_create_t cb) { i_guild_create = cb; }
599+ void set_on_guild_create_raw (raw_event_t cb) { i_guild_create_raw = cb; }
591600
592601 // / GUILD_UPDATE callback
593602 void set_on_guild_update (guild_update_t cb) { i_guild_update = cb; }
603+ void set_on_guild_update_raw (raw_event_t cb) { i_guild_update_raw = cb; }
594604
595605 // / GUILD_DELETE callback
596606 void set_on_guild_delete (guild_delete_t cb) { i_guild_delete = cb; }
607+ void set_on_guild_delete_raw (raw_event_t cb) { i_guild_delete_raw = cb; }
597608
598609 // / MESSAGE_REACTION_ADD callback
599610 void set_on_message_reaction_add (message_reaction_add_t cb) { i_message_reaction_add = cb; }
611+ void set_on_message_reaction_add_raw (raw_event_t cb) { i_message_reaction_add_raw = cb; }
600612
601613 // / MESSAGE_REACTION_REMOVE callback
602614 void set_on_message_reaction_remove (message_reaction_remove_t cb) { i_message_reaction_remove = cb; }
615+ void set_on_message_reaction_remove_raw (raw_event_t cb) { i_message_reaction_remove_raw = cb; }
603616
604617 // / MESSAGE_REACTION_REMOVE_ALL callback
605618 void set_on_message_reaction_remove_all (message_reaction_remove_all_t cb) { i_message_reaction_remove_all = cb; }
619+ void set_on_message_reaction_remove_all_raw (raw_event_t cb) { i_message_reaction_remove_all_raw = cb; }
606620
607621 // / USER_UPDATE callback
608622 void set_on_user_update (user_update_t cb) { i_user_update = cb; }
623+ void set_on_user_update_raw (raw_event_t cb) { i_user_update_raw = cb; }
609624
610625 // / READY callback
611626 void set_on_ready (ready_t cb) { i_ready = cb; }
627+ void set_on_ready_raw (raw_event_t cb) { i_ready_raw = cb; }
612628
613629 // / RESUME callback
614630 void set_on_resumed (resumed_t cb) { i_resumed = cb; }
631+ void set_on_resumed_raw (raw_event_t cb) { i_resumed_raw = cb; }
615632
616633 // / CHANNEL_CREATE callback
617634 void set_on_channel_create (channel_create_t cb) { i_channel_create = cb; }
635+ void set_on_channel_create_raw (raw_event_t cb) { i_channel_create_raw = cb; }
618636
619637 // / CHANNEL_UPDATE callback
620638 void set_on_channel_update (channel_update_t cb) { i_channel_update = cb; }
639+ void set_on_channel_update_raw (raw_event_t cb) { i_channel_update_raw = cb; }
621640
622641 // / CHANNEL_DELETE callback
623642 void set_on_channel_delete (channel_delete_t cb) { i_channel_delete = cb; }
643+ void set_on_channel_delete_raw (raw_event_t cb) { i_channel_delete_raw = cb; }
624644
625645 // / CHANNEL_PINS_UPDATE callback
626646 void set_on_channel_pins_update (channel_pins_update_t cb) { i_channel_pins_update = cb; }
647+ void set_on_channel_pins_update_raw (raw_event_t cb) { i_channel_pins_update_raw = cb; }
627648
628649 // / GUILD_BAN_ADD callback
629650 void set_on_guild_ban_add (guild_ban_add_t cb) { i_guild_ban_add = cb; }
651+ void set_on_guild_ban_add_raw (raw_event_t cb) { i_guild_ban_add_raw = cb; }
630652
631653 // / GUILD_BAN_REMOVE callback
632654 void set_on_guild_ban_remove (guild_ban_remove_t cb) { i_guild_ban_remove = cb; }
655+ void set_on_guild_ban_remove_raw (raw_event_t cb) { i_guild_ban_remove_raw = cb; }
633656
634657 // / GUILD_EMOJIS_UPDATE callback
635658 void set_on_guild_emojis_update (guild_emojis_update_t cb) { i_guild_emojis_update = cb; }
659+ void set_on_guild_emojis_update_raw (raw_event_t cb) { i_guild_emojis_update_raw = cb; }
636660
637661 // / GUILD_INTEGRATIONS_UPDATE callback
638662 void set_on_guild_integrations_update (guild_integrations_update_t cb) { i_guild_integrations_update = cb; }
663+ void set_on_guild_integrations_update_raw (raw_event_t cb) { i_guild_integrations_update_raw = cb; }
639664
640665 // / GUILD_MEMBER_ADD callback
641666 void set_on_guild_member_add (guild_member_add_t cb) { i_guild_member_add = cb; }
667+ void set_on_guild_member_add_raw (raw_event_t cb) { i_guild_member_add_raw = cb; }
642668
643669 // / GUILD_MEMBER_REMOVE callback
644670 void set_on_guild_member_remove (guild_member_remove_t cb) { i_guild_member_remove = cb; }
671+ void set_on_guild_member_remove_raw (raw_event_t cb) { i_guild_member_remove_raw = cb; }
645672
646673 // / GUILD_MEMBER_UPDATE callback
647674 void set_on_guild_member_update (guild_member_update_t cb) { i_guild_member_update = cb; }
675+ void set_on_guild_member_update_raw (raw_event_t cb) { i_guild_member_update_raw = cb; }
648676
649677 // / GUILD_MEMBERS_CHUNK callback
650678 void set_on_guild_member_chunk (guild_members_chunk_t cb) { i_guild_members_chunk = cb; }
679+ void set_on_guild_member_chunk_raw (raw_event_t cb) { i_guild_members_chunk_raw = cb; }
651680
652681 // / GUILD_ROLE_CREATE callback
653682 void set_on_guild_role_create (guild_role_create_t cb) { i_guild_role_create = cb; }
683+ void set_on_guild_role_create_raw (raw_event_t cb) { i_guild_role_create_raw = cb; }
654684
655685 // / GUILD_ROLE_UPDATE callback
656686 void set_on_guild_role_update (guild_role_update_t cb) { i_guild_role_update = cb; }
687+ void set_on_guild_role_update_raw (raw_event_t cb) { i_guild_role_update_raw = cb; }
657688
658689 // / GUILD_ROLE_DELETE callback
659690 void set_on_guild_role_delete (guild_role_delete_t cb) { i_guild_role_delete = cb; }
691+ void set_on_guild_role_delete_raw (raw_event_t cb) { i_guild_role_delete_raw = cb; }
660692
661693 // / PRESENCE_UPDATE callback
662694 void set_on_presence_update (presence_update_t cb) { i_presence_update = cb; }
695+ void set_on_presence_update_raw (raw_event_t cb) { i_presence_update_raw = cb; }
663696
664697 // / VOICE_STATE_UPDATE callback
665698 void set_on_voice_state_update (voice_state_update_t cb) { i_voice_state_update = cb; }
699+ void set_on_voice_state_update_raw (raw_event_t cb) { i_voice_state_update_raw = cb; }
666700
667701 // / VOICE_SERVER_UPDATE callback
668702 void set_on_voice_server_update (voice_server_update_t cb) { i_voice_server_update = cb; }
703+ void set_on_voice_server_update_raw (raw_event_t cb) { i_voice_server_update_raw = cb; }
669704
670705 // / WEBHOOKS_UPDATE callback
671706 void set_on_webhooks_update (webhooks_update_t cb) { i_webhooks_update = cb; }
707+ void set_on_webhooks_update_raw (raw_event_t cb) { i_webhooks_update_raw = cb; }
672708
673709 // / Shard disconnect callback
674710 void set_on_shard_disconnect (std::function<void (aegis::shards::shard*)> cb)
@@ -882,6 +918,8 @@ class core
882918
883919 AEGIS_DECL void _thread_track (thread_state * t_state);
884920
921+ #pragma region event handlers
922+ // preprocessed object events
885923 typing_start_t i_typing_start;
886924 message_create_t i_message_create;
887925 message_create_t i_message_create_dm;
@@ -917,6 +955,78 @@ class core
917955 voice_server_update_t i_voice_server_update;
918956 webhooks_update_t i_webhooks_update;
919957
958+ // raw json events
959+ raw_event_t i_typing_start_raw;
960+ raw_event_t i_message_create_raw;
961+ raw_event_t i_message_create_dm_raw;
962+ raw_event_t i_message_update_raw;
963+ raw_event_t i_message_delete_raw;
964+ raw_event_t i_message_delete_bulk_raw;
965+ raw_event_t i_guild_create_raw;
966+ raw_event_t i_guild_update_raw;
967+ raw_event_t i_guild_delete_raw;
968+ raw_event_t i_message_reaction_add_raw;
969+ raw_event_t i_message_reaction_remove_raw;
970+ raw_event_t i_message_reaction_remove_all_raw;
971+ raw_event_t i_user_update_raw;
972+ raw_event_t i_ready_raw;
973+ raw_event_t i_resumed_raw;
974+ raw_event_t i_channel_create_raw;
975+ raw_event_t i_channel_update_raw;
976+ raw_event_t i_channel_delete_raw;
977+ raw_event_t i_channel_pins_update_raw;
978+ raw_event_t i_guild_ban_add_raw;
979+ raw_event_t i_guild_ban_remove_raw;
980+ raw_event_t i_guild_emojis_update_raw;
981+ raw_event_t i_guild_integrations_update_raw;
982+ raw_event_t i_guild_member_add_raw;
983+ raw_event_t i_guild_member_remove_raw;
984+ raw_event_t i_guild_member_update_raw;
985+ raw_event_t i_guild_members_chunk_raw;
986+ raw_event_t i_guild_role_create_raw;
987+ raw_event_t i_guild_role_update_raw;
988+ raw_event_t i_guild_role_delete_raw;
989+ raw_event_t i_presence_update_raw;
990+ raw_event_t i_voice_state_update_raw;
991+ raw_event_t i_voice_server_update_raw;
992+ raw_event_t i_webhooks_update_raw;
993+
994+
995+ AEGIS_DECL void ws_presence_update (const json& result, shards::shard* _shard);
996+ AEGIS_DECL void ws_typing_start (const json& result, shards::shard* _shard);
997+ AEGIS_DECL void ws_message_create (const json& result, shards::shard* _shard);
998+ AEGIS_DECL void ws_message_update (const json& result, shards::shard* _shard);
999+ AEGIS_DECL void ws_guild_create (const json& result, shards::shard* _shard);
1000+ AEGIS_DECL void ws_guild_update (const json& result, shards::shard* _shard);
1001+ AEGIS_DECL void ws_guild_delete (const json& result, shards::shard* _shard);
1002+ AEGIS_DECL void ws_message_reaction_add (const json& result, shards::shard* _shard);
1003+ AEGIS_DECL void ws_message_reaction_remove (const json& result, shards::shard* _shard);
1004+ AEGIS_DECL void ws_message_reaction_remove_all (const json& result, shards::shard* _shard);
1005+ AEGIS_DECL void ws_message_delete (const json& result, shards::shard* _shard);
1006+ AEGIS_DECL void ws_message_delete_bulk (const json& result, shards::shard* _shard);
1007+ AEGIS_DECL void ws_user_update (const json& result, shards::shard* _shard);
1008+ AEGIS_DECL void ws_resumed (const json& result, shards::shard* _shard);
1009+ AEGIS_DECL void ws_ready (const json& result, shards::shard* _shard);
1010+ AEGIS_DECL void ws_channel_create (const json& result, shards::shard* _shard);
1011+ AEGIS_DECL void ws_channel_update (const json& result, shards::shard* _shard);
1012+ AEGIS_DECL void ws_channel_delete (const json& result, shards::shard* _shard);
1013+ AEGIS_DECL void ws_channel_pins_update (const json& result, shards::shard* _shard);
1014+ AEGIS_DECL void ws_guild_ban_add (const json& result, shards::shard* _shard);
1015+ AEGIS_DECL void ws_guild_ban_remove (const json& result, shards::shard* _shard);
1016+ AEGIS_DECL void ws_guild_emojis_update (const json& result, shards::shard* _shard);
1017+ AEGIS_DECL void ws_guild_integrations_update (const json& result, shards::shard* _shard);
1018+ AEGIS_DECL void ws_guild_member_add (const json& result, shards::shard* _shard);
1019+ AEGIS_DECL void ws_guild_member_remove (const json& result, shards::shard* _shard);
1020+ AEGIS_DECL void ws_guild_member_update (const json& result, shards::shard* _shard);
1021+ AEGIS_DECL void ws_guild_members_chunk (const json& result, shards::shard* _shard);
1022+ AEGIS_DECL void ws_guild_role_create (const json& result, shards::shard* _shard);
1023+ AEGIS_DECL void ws_guild_role_update (const json& result, shards::shard* _shard);
1024+ AEGIS_DECL void ws_guild_role_delete (const json& result, shards::shard* _shard);
1025+ AEGIS_DECL void ws_voice_server_update (const json& result, shards::shard* _shard);
1026+ AEGIS_DECL void ws_voice_state_update (const json& result, shards::shard* _shard);
1027+ AEGIS_DECL void ws_webhooks_update (const json& result, shards::shard* _shard);
1028+ #pragma endregion
1029+
9201030 AEGIS_DECL void setup_gateway ();
9211031 AEGIS_DECL void keep_alive (const asio::error_code & error, const std::chrono::milliseconds ms, shards::shard * _shard);
9221032
@@ -929,39 +1039,6 @@ class core
9291039 friend class channel ;
9301040 // friend class shard;
9311041
932- AEGIS_DECL void ws_presence_update (const json & result, shards::shard * _shard);
933- AEGIS_DECL void ws_typing_start (const json & result, shards::shard * _shard);
934- AEGIS_DECL void ws_message_create (const json & result, shards::shard * _shard);
935- AEGIS_DECL void ws_message_update (const json & result, shards::shard * _shard);
936- AEGIS_DECL void ws_guild_create (const json & result, shards::shard * _shard);
937- AEGIS_DECL void ws_guild_update (const json & result, shards::shard * _shard);
938- AEGIS_DECL void ws_guild_delete (const json & result, shards::shard * _shard);
939- AEGIS_DECL void ws_message_reaction_add (const json & result, shards::shard * _shard);
940- AEGIS_DECL void ws_message_reaction_remove (const json & result, shards::shard * _shard);
941- AEGIS_DECL void ws_message_reaction_remove_all (const json & result, shards::shard * _shard);
942- AEGIS_DECL void ws_message_delete (const json & result, shards::shard * _shard);
943- AEGIS_DECL void ws_message_delete_bulk (const json & result, shards::shard * _shard);
944- AEGIS_DECL void ws_user_update (const json & result, shards::shard * _shard);
945- AEGIS_DECL void ws_resumed (const json & result, shards::shard * _shard);
946- AEGIS_DECL void ws_ready (const json & result, shards::shard * _shard);
947- AEGIS_DECL void ws_channel_create (const json & result, shards::shard * _shard);
948- AEGIS_DECL void ws_channel_update (const json & result, shards::shard * _shard);
949- AEGIS_DECL void ws_channel_delete (const json & result, shards::shard * _shard);
950- AEGIS_DECL void ws_channel_pins_update (const json & result, shards::shard * _shard);
951- AEGIS_DECL void ws_guild_ban_add (const json & result, shards::shard * _shard);
952- AEGIS_DECL void ws_guild_ban_remove (const json & result, shards::shard * _shard);
953- AEGIS_DECL void ws_guild_emojis_update (const json & result, shards::shard * _shard);
954- AEGIS_DECL void ws_guild_integrations_update (const json & result, shards::shard * _shard);
955- AEGIS_DECL void ws_guild_member_add (const json & result, shards::shard * _shard);
956- AEGIS_DECL void ws_guild_member_remove (const json & result, shards::shard * _shard);
957- AEGIS_DECL void ws_guild_member_update (const json & result, shards::shard * _shard);
958- AEGIS_DECL void ws_guild_members_chunk (const json & result, shards::shard * _shard);
959- AEGIS_DECL void ws_guild_role_create (const json & result, shards::shard * _shard);
960- AEGIS_DECL void ws_guild_role_update (const json & result, shards::shard * _shard);
961- AEGIS_DECL void ws_guild_role_delete (const json & result, shards::shard * _shard);
962- AEGIS_DECL void ws_voice_server_update (const json & result, shards::shard * _shard);
963- AEGIS_DECL void ws_voice_state_update (const json & result, shards::shard * _shard);
964- AEGIS_DECL void ws_webhooks_update (const json & result, shards::shard * _shard);
9651042
9661043 AEGIS_DECL void on_message (websocketpp::connection_hdl hdl, std::string msg, shards::shard * _shard);
9671044 AEGIS_DECL void on_connect (websocketpp::connection_hdl hdl, shards::shard * _shard);
0 commit comments