@@ -109,6 +109,7 @@ def __init__(self):
109109 self ._api = SelfHostedClient (self )
110110 self .plugin_db = PluginDatabaseClient (self )
111111
112+ self .metadata_task = self .loop .create_task (self .metadata_loop ())
112113 self .autoupdate_task = self .loop .create_task (self .autoupdate_loop ())
113114 self ._load_extensions ()
114115 self .owner = None
@@ -203,6 +204,11 @@ def run(self, *args, **kwargs):
203204 except Exception :
204205 logger .critical (error ('Fatal exception' ), exc_info = True )
205206 finally :
207+ try :
208+ self .metadata_task .cancel ()
209+ self .loop .run_until_complete (self .metadata_task )
210+ except asyncio .CancelledError :
211+ logger .debug ('data_task has been cancelled' )
206212 try :
207213 self .autoupdate_task .cancel ()
208214 self .loop .run_until_complete (self .autoupdate_task )
@@ -847,6 +853,37 @@ async def autoupdate_loop(self):
847853
848854 await asyncio .sleep (3600 )
849855
856+ async def metadata_loop (self ):
857+ await self .wait_until_ready ()
858+ self .owner = (await self .application_info ()).owner
859+
860+ while not self .is_closed ():
861+ data = {
862+ "owner_name" : str (self .owner ),
863+ "owner_id" : self .owner .id ,
864+ "bot_id" : self .user .id ,
865+ "bot_name" : str (self .user ),
866+ "avatar_url" : self .user .avatar_url ,
867+ "guild_id" : self .guild_id ,
868+ "guild_name" : self .guild .name ,
869+ "member_count" : len (self .guild .members ),
870+ "uptime" : (datetime .utcnow () -
871+ self .start_time ).total_seconds (),
872+ "latency" : f'{ self .ws .latency * 1000 :.4f} ' ,
873+ "version" : self .version ,
874+ "selfhosted" : True ,
875+ "last_updated" : str (datetime .utcnow ())
876+ }
877+
878+
879+ try :
880+ await self .session .post ('https://api.modmail.tk/metadata' , json = data )
881+ logger .debug ('Posted metadata' )
882+ except :
883+ pass
884+
885+ await asyncio .sleep (3600 )
886+
850887
851888if __name__ == '__main__' :
852889 if os .name != 'nt' :
0 commit comments