@@ -49,6 +49,13 @@ def __init__(self, client: discord.Client, api_key: str, debug: bool = False):
4949 "guildsStats" : [], # {guildId:str, name:str, icon:str, members:int, interactions: int}[]
5050 "addedGuilds" : 0 ,
5151 "removedGuilds" : 0 ,
52+ "users_type" : {
53+ "admin" : 0 ,
54+ "moderator" : 0 ,
55+ "new_member" : 0 ,
56+ "other" : 0 ,
57+ "private_message" : 0
58+ }
5259 }
5360
5461 def track_events (self ):
@@ -140,6 +147,13 @@ async def send_stats(self):
140147 "guildsStats" : [],
141148 "addedGuilds" : 0 ,
142149 "removedGuilds" : 0 ,
150+ "users_type" : {
151+ "admin" : 0 ,
152+ "moderator" : 0 ,
153+ "new_member" : 0 ,
154+ "other" : 0 ,
155+ "private_message" : 0
156+ }
143157 }
144158
145159 await asyncio .sleep (10 if "--dev" in sys .argv else 300 )
@@ -170,19 +184,6 @@ def track_interactions(self, interaction: discord.Interaction):
170184 if not self .is_ready :
171185 raise ValueError (ErrorCodes .INSTANCE_NOT_INITIALIZED )
172186
173- guilds = []
174- for guild in self .client .guilds :
175- if guild .preferred_locale is not None :
176- guild_locale = next ((x for x in guilds if x ["locale" ] == guild .preferred_locale .value ), None )
177- if guild_locale is not None :
178- guild_locale ["number" ] += 1
179- else :
180- guilds .append ({
181- "locale" : guild .preferred_locale .value ,
182- "number" : 1
183- })
184- self .stats ["guildsLocales" ] = guilds
185-
186187 locale = next ((x for x in self .stats ["locales" ] if x ["locale" ] == interaction .locale .value ), None )
187188 if locale is not None :
188189 locale ["number" ] += 1
@@ -213,17 +214,43 @@ def track_interactions(self, interaction: discord.Interaction):
213214 "type" : interaction .type .value
214215 })
215216
216- guild_data = next ((x for x in self .stats ["guildsStats" ] if x ["guildId" ] == str (interaction .guild .id )), None )
217- if guild_data is not None :
218- guild_data ["interactions" ] += 1
217+ if interaction .guild is None :
218+ self .stats ["users_type" ]["private_message" ] += 1
219219 else :
220- self .stats ["guildsStats" ].append ({
221- "guildId" : str (interaction .guild .id ),
222- "name" : interaction .guild .name ,
223- "icon" : interaction .guild .icon ,
224- "members" : interaction .guild .member_count ,
225- "interactions" : 1
226- })
220+ guilds = []
221+ for guild in self .client .guilds :
222+ if guild .preferred_locale is not None :
223+ guild_locale = next ((x for x in guilds if x ["locale" ] == guild .preferred_locale .value ), None )
224+ if guild_locale is not None :
225+ guild_locale ["number" ] += 1
226+ else :
227+ guilds .append ({
228+ "locale" : guild .preferred_locale .value ,
229+ "number" : 1
230+ })
231+ self .stats ["guildsLocales" ] = guilds
232+
233+ guild_data = next ((x for x in self .stats ["guildsStats" ] if x ["guildId" ] == str (interaction .guild .id )), None )
234+ if guild_data is not None :
235+ guild_data ["interactions" ] += 1
236+ else :
237+ self .stats ["guildsStats" ].append ({
238+ "guildId" : str (interaction .guild .id ),
239+ "name" : interaction .guild .name ,
240+ "icon" : interaction .guild .icon .key ,
241+ "members" : interaction .guild .member_count ,
242+ "interactions" : 1
243+ })
244+
245+ if interaction .user .guild_permissions .administrator or interaction .user .guild_permissions .manage_guild :
246+ self .stats ["users_type" ]["admin" ] += 1
247+ elif interaction .user .guild_permissions .manage_messages or interaction .user .guild_permissions .kick_members or interaction .user .guild_permissions .ban_members or interaction .user .guild_permissions .mute_members or interaction .user .guild_permissions .deafen_members or interaction .user .guild_permissions .move_members or interaction .user .guild_permissions .moderate_members :
248+ self .stats ["users_type" ]["moderator" ] += 1
249+ # check if the member is less than 7 days old
250+ elif interaction .user .joined_at is not None and (datetime .now () - interaction .user .joined_at ).days <= 7 :
251+ self .stats ["users_type" ]["new_member" ] += 1
252+ else :
253+ self .stats ["users_type" ]["other" ] += 1
227254
228255 # type = delete or create
229256 def trackGuilds (self , guild : discord .Guild , type : Literal ["create" , "delete" ]):
0 commit comments