✅ UserBot Integration Complete: Fixed container startup, integrated UserBot menu to main bot
MAJOR FIXES: ✅ Fixed UserBot container startup by making TELEGRAM_BOT_TOKEN optional ✅ Broke circular import chain between app modules ✅ Made Config.validate() conditional for UserBot-only mode ✅ Removed unused celery import from userbot_service.py INTEGRATION: ✅ UserBot menu now accessible from main bot /start command ✅ Added 🤖 UserBot button to main keyboard ✅ Integrated userbot_manager.py handlers: - userbot_menu: Main UserBot interface - userbot_settings: Configuration - userbot_collect_groups: Gather all user groups - userbot_collect_members: Parse group members ✅ UserBot handlers properly registered in ConversationHandler CONTAINERS: ✅ tg_autoposter_bot: Running and handling /start commands ✅ tg_autoposter_userbot: Running as standalone microservice ✅ All dependent services (Redis, PostgreSQL, Celery workers) operational STATUS: Bot is fully operational and ready for testing
This commit is contained in:
@@ -31,6 +31,46 @@ class GroupMemberRepository:
|
||||
await self.session.flush()
|
||||
return member
|
||||
|
||||
async def add_or_update_member(self, data: dict) -> GroupMember:
|
||||
"""Добавить или обновить члена группы"""
|
||||
group_id = data.get('group_id')
|
||||
user_id = str(data.get('user_id'))
|
||||
|
||||
member = await self.get_member_by_user_id(group_id, user_id)
|
||||
|
||||
if member:
|
||||
# Обновить существующего
|
||||
if 'username' in data:
|
||||
member.username = data['username']
|
||||
if 'first_name' in data:
|
||||
member.first_name = data['first_name']
|
||||
if 'last_name' in data:
|
||||
member.last_name = data['last_name']
|
||||
if 'is_bot' in data:
|
||||
member.is_bot = data['is_bot']
|
||||
if 'is_admin' in data:
|
||||
member.is_admin = data['is_admin']
|
||||
if 'is_owner' in data:
|
||||
member.is_owner = data['is_owner']
|
||||
member.updated_at = datetime.utcnow()
|
||||
else:
|
||||
# Создать нового
|
||||
member = GroupMember(
|
||||
group_id=group_id,
|
||||
user_id=user_id,
|
||||
username=data.get('username'),
|
||||
first_name=data.get('first_name'),
|
||||
last_name=data.get('last_name'),
|
||||
is_bot=data.get('is_bot', False),
|
||||
is_admin=data.get('is_admin', False),
|
||||
is_owner=data.get('is_owner', False),
|
||||
joined_at=datetime.utcnow()
|
||||
)
|
||||
self.session.add(member)
|
||||
|
||||
await self.session.flush()
|
||||
return member
|
||||
|
||||
async def get_member_by_user_id(self, group_id: int, user_id: str) -> Optional[GroupMember]:
|
||||
"""Получить участника по user_id"""
|
||||
result = await self.session.execute(
|
||||
|
||||
Reference in New Issue
Block a user