fixed stuff

This commit is contained in:
Xargana 2025-07-14 12:59:57 +03:00
parent db6b0a996b
commit 22f59ea2ad
2 changed files with 47 additions and 33 deletions

View file

@ -155,16 +155,26 @@ class DiscordDataClient(discord.Client):
try: try:
# Get all members - discord.py-self API # Get all members - discord.py-self API
members = [] members = []
member_iterator = await guild.fetch_members() member_result = await guild.fetch_members()
async for member in member_iterator:
# Handle different return types from fetch_members
if hasattr(member_result, '__aiter__'):
# It's an async iterator
async for member in member_result:
members.append(member)
elif isinstance(member_result, list):
# It's already a list
members = member_result
else:
# Try to iterate over it
for member in member_result:
members.append(member) members.append(member)
for member in members: for member in members:
if not member.bot: if not member.bot:
await self._process_user(member, guild.id) # Rate limiting before processing
# Rate limiting
await self.rate_limiter.wait() await self.rate_limiter.wait()
await self._process_user(member, guild.id)
self.logger.info(f"Processed {len(members)} members from {guild.name}") self.logger.info(f"Processed {len(members)} members from {guild.name}")
@ -224,6 +234,9 @@ class DiscordDataClient(discord.Client):
async def _get_mutual_guilds(self, user) -> List[int]: async def _get_mutual_guilds(self, user) -> List[int]:
"""Get mutual guilds for a user using fetch_user_profile.""" """Get mutual guilds for a user using fetch_user_profile."""
try: try:
# Rate limiting before API call
await self.rate_limiter.wait()
# Use fetch_user_profile to get mutual guilds # Use fetch_user_profile to get mutual guilds
profile = await self.fetch_user_profile(user.id, with_mutual_guilds=True) profile = await self.fetch_user_profile(user.id, with_mutual_guilds=True)

View file

@ -7,7 +7,7 @@ import json
import shutil import shutil
from datetime import datetime from datetime import datetime
from typing import Dict, List, Optional, Any from typing import Dict, List, Optional, Any
from dataclasses import dataclass, asdict from dataclasses import dataclass, asdict, field
from pathlib import Path from pathlib import Path
import logging import logging
@ -35,13 +35,11 @@ class UserData:
bio: Optional[str] = None bio: Optional[str] = None
status: Optional[str] = None status: Optional[str] = None
activity: Optional[str] = None activity: Optional[str] = None
servers: List[int] = None servers: List[int] = field(default_factory=list)
created_at: datetime = None created_at: datetime = None
updated_at: datetime = None updated_at: datetime = None
def __post_init__(self): def __post_init__(self):
if self.servers is None:
self.servers = []
current_time = datetime.utcnow() current_time = datetime.utcnow()
if self.created_at is None: if self.created_at is None:
self.created_at = current_time self.created_at = current_time
@ -458,6 +456,7 @@ class MariaDBDatabase:
async def save_server(self, server_id: int, server_name: str): async def save_server(self, server_id: int, server_name: str):
"""Save server information.""" """Save server information."""
async with self._lock:
async with self.pool.cursor() as cursor: async with self.pool.cursor() as cursor:
await cursor.execute(""" await cursor.execute("""
INSERT INTO servers (server_id, server_name) INSERT INTO servers (server_id, server_name)
@ -472,6 +471,7 @@ class MariaDBDatabase:
if not server_ids: if not server_ids:
return {} return {}
async with self._lock:
async with self.pool.cursor() as cursor: async with self.pool.cursor() as cursor:
placeholders = ','.join(['%s'] * len(server_ids)) placeholders = ','.join(['%s'] * len(server_ids))
await cursor.execute(f""" await cursor.execute(f"""
@ -485,6 +485,7 @@ class MariaDBDatabase:
async def add_server_to_user(self, user_id: int, server_id: int): async def add_server_to_user(self, user_id: int, server_id: int):
"""Add a server to user's server list.""" """Add a server to user's server list."""
async with self._lock:
async with self.pool.cursor() as cursor: async with self.pool.cursor() as cursor:
await cursor.execute(""" await cursor.execute("""
INSERT IGNORE INTO user_servers (user_id, server_id) INSERT IGNORE INTO user_servers (user_id, server_id)