@@ -1314,17 +1314,35 @@ AEGIS_DECL void core::ws_message_create(const json & result, shards::shard * _sh
13141314AEGIS_DECL void core::ws_message_update (const json & result, shards::shard * _shard)
13151315{
13161316 auto _channel = channel_create (result[" d" ][" channel_id" ]);
1317- lib::optional<std::reference_wrapper<aegis::user>> _user;
1317+
1318+ gateway::events::message_update obj{ *_shard, *_channel };
1319+
13181320 if (result[" d" ].count (" author" ))
13191321 {
1320- const json & author = result[" d" ][" author" ];
1321- _user = std::ref (*user_create (author[" id" ]));
1322+ auto g = &_channel->get_guild ();
1323+ auto m = find_user (result[" d" ][" author" ][" id" ]);
1324+ if (m == nullptr )
1325+ {
1326+ if (result[" d" ].count (" member" ) && !result[" d" ][" member" ].is_null ())
1327+ {
1328+ gateway::objects::member u = result[" d" ][" member" ];
1329+ u._user = result[" d" ][" author" ];
1330+ int64_t author_id = u._user ->id ;
1331+ m = user_create (author_id);
1332+ m->_load_nolock (g, u, _shard);
1333+ }
1334+ }
1335+
1336+ if (m->get_username ().empty () && result[" d" ].count (" member" ) && !result[" d" ][" member" ].is_null ())
1337+ {
1338+ gateway::objects::member u = result[" d" ][" member" ];
1339+ u._user = result[" d" ][" author" ];
1340+ m->_load_nolock (g, u, _shard);
1341+ }
1342+
1343+ obj.user = std::ref (*m);
13221344 }
1323- gateway::events::message_update obj{ *_shard, *_channel };
1324-
1325- if (_user.has_value ())
1326- obj.user = std::ref (*_user);
1327-
1345+
13281346 obj.msg = result[" d" ];
13291347
13301348 if (i_message_update_raw)
0 commit comments