@@ -133,49 +133,57 @@ def get_github_metrics(self):
133133
134134 return {
135135 'stars' : repo_data .get ('stargazers_count' , 0 ),
136- 'forks' : repo_data .get ('forks_count' , 0 ),
137- 'traffic_unique' : traffic_data .get ('uniques' , 0 ) if traffic_data .get ('uniques' , 0 ) > 0 else None
136+ 'forks' : repo_data .get ('forks_count' , 0 )
138137 }
139138 except Exception as e :
140139 print (f"GitHub API error: { e } " )
141140 return {'error' : str (e )}
142141
143142 def get_discord_metrics (self ):
144- """Get Discord server metrics using multiple approaches """
143+ """Get Discord server metrics with Server Members Intent enabled """
145144 try :
146145 headers = {'Authorization' : f'Bot { self .discord_bot_token } ' }
147146
148- # Try method 1 : Get guild info with approximate member count
147+ # Primary method: Get guild with member counts (should work now with intent enabled)
149148 guild_url = f'https://discord.com/api/v10/guilds/{ self .discord_server_id } ?with_counts=true'
150149 response = requests .get (guild_url , headers = headers )
151150
152151 if response .status_code == 200 :
153152 guild_data = response .json ()
154- # Try multiple fields that might contain member count
155- member_count = (
156- guild_data .get ('approximate_member_count' ) or
157- guild_data .get ('member_count' ) or
158- guild_data .get ('members' )
159- )
160153
161- if member_count :
154+ # Try approximate_member_count first (most reliable)
155+ member_count = guild_data .get ('approximate_member_count' )
156+ if member_count and member_count > 0 :
157+ print (f"✅ Discord: Found { member_count } members via approximate_member_count" )
162158 return {'members' : member_count }
159+
160+ # Fallback to other possible fields
161+ member_count = guild_data .get ('member_count' )
162+ if member_count and member_count > 0 :
163+ print (f"✅ Discord: Found { member_count } members via member_count" )
164+ return {'members' : member_count }
165+
166+ print (f"Discord guild data: { guild_data } " )
167+ else :
168+ print (f"Discord API error: { response .status_code } - { response .text } " )
163169
164- # Method 2: Try to get members list (if bot has permission)
170+ # If that fails, try getting actual member list (now that we have permission)
165171 members_url = f'https://discord.com/api/v10/guilds/{ self .discord_server_id } /members?limit=1000'
166172 members_response = requests .get (members_url , headers = headers )
167173
168174 if members_response .status_code == 200 :
169175 members_data = members_response .json ()
170- return {'members' : len (members_data )}
176+ member_count = len (members_data )
177+ print (f"✅ Discord: Counted { member_count } members from members list" )
178+ return {'members' : member_count }
179+ else :
180+ print (f"Discord members API error: { members_response .status_code } " )
171181
172- # Method 3: Fallback - return 0 but note the issue
173- print (f"⚠️ Discord API responses: Guild: { response .status_code } , Members: { members_response .status_code } " )
174- return {'members' : 0 }
182+ return {'members' : None }
175183
176184 except Exception as e :
177185 print (f"Discord API error: { e } " )
178- return {'members' : 0 }
186+ return {'members' : None }
179187
180188 def get_reddit_metrics (self ):
181189 """Get Reddit metrics for r/BasicMemory only"""
@@ -265,15 +273,22 @@ def create_discord_embed(self, current_metrics, previous_metrics):
265273 prev_reddit = previous_metrics .get ('reddit' , {})
266274 prev_youtube = previous_metrics .get ('youtube' , {})
267275
268- # Calculate changes
276+ # Handle Discord display
277+ if discord_data .get ('members' ) is None :
278+ discord_display = "Bot needs permissions"
279+ else :
280+ discord_display = f"{ discord_data .get ('members' )} members"
269281 star_change , star_dir = self .calculate_change (github_data .get ('stars' , 0 ), prev_github , 'stars' )
270282 discord_change , discord_dir = self .calculate_change (discord_data .get ('members' , 0 ), prev_discord , 'members' )
271283 reddit_change , reddit_dir = self .calculate_change (reddit_data .get ('subreddit_members' , 0 ), prev_reddit , 'subreddit_members' )
272284 sub_change , sub_dir = self .calculate_change (youtube_data .get ('subscribers' , 0 ), prev_youtube , 'subscribers' )
273285 view_change , view_dir = self .calculate_change (youtube_data .get ('total_views' , 0 ), prev_youtube , 'total_views' )
274286
275- # Traffic display logic
276- traffic_display = "Data pending" if github_data .get ('traffic_unique' ) is None else f"{ github_data .get ('traffic_unique' , 0 )} visitors"
287+ # Traffic display logic - GitHub traffic API is often delayed/restricted
288+ if github_data .get ('traffic_unique' ) is None or github_data .get ('traffic_unique' ) == 0 :
289+ traffic_display = "API restricted"
290+ else :
291+ traffic_display = f"{ github_data .get ('traffic_unique' , 0 )} visitors"
277292
278293 embed = {
279294 "title" : "🚀 Basic Memory Daily Traction Report" ,
@@ -282,29 +297,32 @@ def create_discord_embed(self, current_metrics, previous_metrics):
282297 "fields" : [
283298 {
284299 "name" : "⭐ GitHub" ,
285- "value" : f"""
286- **Stars:** { github_data .get ('stars' , 'N/A' )} { self .format_change (star_change , star_dir )}
287- **Forks:** { github_data .get ('forks' , 'N/A' )}
288- **Traffic:** { traffic_display }
289- """ .strip (),
300+ "value" : f"**Stars:** { github_data .get ('stars' , 'N/A' )} { self .format_change (star_change , star_dir )} \n **Forks:** { github_data .get ('forks' , 'N/A' )} " ,
301+ "inline" : True
302+ },
303+ {
304+ "name" : "\u200b " , # Invisible character for spacing
305+ "value" : "\u200b " ,
290306 "inline" : True
291307 },
292308 {
293309 "name" : "💬 Community" ,
294- "value" : f"""
295- **Discord:** { discord_data .get ('members' , 'N/A' )} members { self .format_change (discord_change , discord_dir )}
296- **r/BasicMemory:** { reddit_data .get ('subreddit_members' , 'N/A' )} { self .format_change (reddit_change , reddit_dir )}
297-
298- """ .strip (),
310+ "value" : f"**Discord:** { discord_display } { self .format_change (discord_change , discord_dir )} \n **r/BasicMemory:** { reddit_data .get ('subreddit_members' , 'N/A' )} { self .format_change (reddit_change , reddit_dir )} " ,
299311 "inline" : True
300312 },
301313 {
302314 "name" : "📺 YouTube" ,
303- "value" : f"""
304- **Subscribers:** { youtube_data .get ('subscribers' , 'N/A' )} { self .format_change (sub_change , sub_dir )}
305- **Views:** { youtube_data .get ('total_views' , 'N/A' )} { self .format_change (view_change , view_dir )}
306- **Videos:** { youtube_data .get ('video_count' , 'N/A' )}
307- """ .strip (),
315+ "value" : f"**Subscribers:** { youtube_data .get ('subscribers' , 'N/A' )} { self .format_change (sub_change , sub_dir )} \n **Views:** { youtube_data .get ('total_views' , 'N/A' )} { self .format_change (view_change , view_dir )} \n **Videos:** { youtube_data .get ('video_count' , 'N/A' )} " ,
316+ "inline" : True
317+ },
318+ {
319+ "name" : "\u200b " , # Spacing
320+ "value" : "\u200b " ,
321+ "inline" : True
322+ },
323+ {
324+ "name" : "\u200b " , # Spacing
325+ "value" : "\u200b " ,
308326 "inline" : True
309327 }
310328 ],
0 commit comments