fixed stuff
This commit is contained in:
parent
db6b0a996b
commit
22f59ea2ad
|
@ -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:
|
|
||||||
members.append(member)
|
# 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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
|
|
@ -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,38 +456,41 @@ 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.pool.cursor() as cursor:
|
async with self._lock:
|
||||||
await cursor.execute("""
|
async with self.pool.cursor() as cursor:
|
||||||
INSERT INTO servers (server_id, server_name)
|
await cursor.execute("""
|
||||||
VALUES (%s, %s)
|
INSERT INTO servers (server_id, server_name)
|
||||||
ON DUPLICATE KEY UPDATE
|
VALUES (%s, %s)
|
||||||
server_name = VALUES(server_name),
|
ON DUPLICATE KEY UPDATE
|
||||||
updated_at = CURRENT_TIMESTAMP
|
server_name = VALUES(server_name),
|
||||||
""", (server_id, server_name))
|
updated_at = CURRENT_TIMESTAMP
|
||||||
|
""", (server_id, server_name))
|
||||||
|
|
||||||
async def get_server_names(self, server_ids: List[int]) -> Dict[int, str]:
|
async def get_server_names(self, server_ids: List[int]) -> Dict[int, str]:
|
||||||
"""Get server names for given server IDs."""
|
"""Get server names for given server IDs."""
|
||||||
if not server_ids:
|
if not server_ids:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
async with self.pool.cursor() as cursor:
|
async with self._lock:
|
||||||
placeholders = ','.join(['%s'] * len(server_ids))
|
async with self.pool.cursor() as cursor:
|
||||||
await cursor.execute(f"""
|
placeholders = ','.join(['%s'] * len(server_ids))
|
||||||
SELECT server_id, server_name
|
await cursor.execute(f"""
|
||||||
FROM servers
|
SELECT server_id, server_name
|
||||||
WHERE server_id IN ({placeholders})
|
FROM servers
|
||||||
""", server_ids)
|
WHERE server_id IN ({placeholders})
|
||||||
|
""", server_ids)
|
||||||
result = await cursor.fetchall()
|
|
||||||
return {row['server_id']: row['server_name'] for row in result}
|
result = await cursor.fetchall()
|
||||||
|
return {row['server_id']: row['server_name'] for row in result}
|
||||||
|
|
||||||
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.pool.cursor() as cursor:
|
async with self._lock:
|
||||||
await cursor.execute("""
|
async with self.pool.cursor() as cursor:
|
||||||
INSERT IGNORE INTO user_servers (user_id, server_id)
|
await cursor.execute("""
|
||||||
VALUES (%s, %s)
|
INSERT IGNORE INTO user_servers (user_id, server_id)
|
||||||
""", (user_id, server_id))
|
VALUES (%s, %s)
|
||||||
|
""", (user_id, server_id))
|
||||||
|
|
||||||
async def get_all_users(self) -> List[UserData]:
|
async def get_all_users(self) -> List[UserData]:
|
||||||
"""Get all users from the database."""
|
"""Get all users from the database."""
|
||||||
|
|
Loading…
Reference in a new issue