Initial commit for copykar

This commit is contained in:
Antigravity Bot
2026-08-30 15:51:39 +03:30
parent a5342b0850
commit e7db5125a2
3 changed files with 10 additions and 8 deletions
+1
View File
@@ -1,5 +1,6 @@
import json import json
import asyncpg import asyncpg
from typing import Optional, List, Dict, Any, Tuple
from datetime import datetime, timezone from datetime import datetime, timezone
from db.models import ( from db.models import (
SourceChannel, SourceWebsite, TargetChannel, Post, Setting, SourceChannel, SourceWebsite, TargetChannel, Post, Setting,
+4 -3
View File
@@ -10,7 +10,7 @@ services:
POSTGRES_DB: ${POSTGRES_DB:-copykar} POSTGRES_DB: ${POSTGRES_DB:-copykar}
LD_PRELOAD: /usr/local/lib/libfakestat.so LD_PRELOAD: /usr/local/lib/libfakestat.so
ports: ports:
- "5432:5432" - "127.0.0.1:5432:5432"
volumes: volumes:
- ./monitoring/postgres/libfakestat_musl.so:/usr/local/lib/libfakestat.so:ro - ./monitoring/postgres/libfakestat_musl.so:/usr/local/lib/libfakestat.so:ro
- ./data/postgres:/var/lib/postgresql/data - ./data/postgres:/var/lib/postgresql/data
@@ -27,7 +27,7 @@ services:
entrypoint: ["redis-server"] entrypoint: ["redis-server"]
command: ["--protected-mode", "no", "--dir", "/data", "--save", "60", "1"] command: ["--protected-mode", "no", "--dir", "/data", "--save", "60", "1"]
ports: ports:
- "6379:6379" - "127.0.0.1:6379:6379"
volumes: volumes:
- ./data/redis:/data - ./data/redis:/data
healthcheck: healthcheck:
@@ -49,12 +49,13 @@ services:
redis: redis:
condition: service_healthy condition: service_healthy
ports: ports:
- "8008:8008" - "127.0.0.1:8008:8008"
env_file: env_file:
- .env - .env
extra_hosts: extra_hosts:
- "host.docker.internal:host-gateway" - "host.docker.internal:host-gateway"
volumes: volumes:
- ./:/app
- ./data/app:/app/data - ./data/app:/app/data
- ./data/sessions:/app/sessions - ./data/sessions:/app/sessions
- /home:/host_os/home:ro - /home:/host_os/home:ro
+5 -5
View File
@@ -1705,35 +1705,35 @@ class AdminBotService:
await event.reply(welcome_text, parse_mode="html", buttons=menu) await event.reply(welcome_text, parse_mode="html", buttons=menu)
# --- 5 Primary Category Hubs: Copy, AI, Bots, System, Monitor --- # --- 5 Primary Category Hubs: Copy, AI, Bots, System, Monitor ---
@self.client.on(events.NewMessage(pattern=r"(?i)^(/copy|📋 مدیریت محتوا \(copy\)|📋 copy \(محتوا\)|📋 مدیریت محتوا|📋 copy|copy)$")) @self.client.on(events.NewMessage(pattern=r"(?i)^(/copy|📋.*|.*copy.*|.*محتوا.*)$"))
async def cmd_copy_hub(event: events.NewMessage.Event): async def cmd_copy_hub(event: events.NewMessage.Event):
if not self.is_admin(event.sender_id): if not self.is_admin(event.sender_id):
return return
text, buttons = await self._render_copy_hub() text, buttons = await self._render_copy_hub()
await event.reply(text, parse_mode="html", buttons=buttons) await event.reply(text, parse_mode="html", buttons=buttons)
@self.client.on(events.NewMessage(pattern=r"(?i)^(/ai|🧠 هوش مصنوعی \(ai\)|🧠 ai \(هوش مصنوعی\)|🧠 هوش مصنوعی|🧠 ai|ai)$")) @self.client.on(events.NewMessage(pattern=r"(?i)^(/ai|🧠.*|.*ai.*|.*هوش مصنوعی.*)$"))
async def cmd_ai_hub(event: events.NewMessage.Event): async def cmd_ai_hub(event: events.NewMessage.Event):
if not self.is_admin(event.sender_id): if not self.is_admin(event.sender_id):
return return
text, buttons = await self._render_ai_menu() text, buttons = await self._render_ai_menu()
await event.reply(text, parse_mode="html", buttons=buttons) await event.reply(text, parse_mode="html", buttons=buttons)
@self.client.on(events.NewMessage(pattern=r"(?i)^(/bots|🤖 کانال‌ها و وب \(bots\)|🤖 bots \(کانال‌ها و ربات‌ها\)|🤖 کانال‌ها و وب|🤖 bots|bots)$")) @self.client.on(events.NewMessage(pattern=r"(?i)^(/bots|🤖.*|.*bots.*|.*کانال‌ها و وب.*|.*ربات.*)$"))
async def cmd_bots_hub(event: events.NewMessage.Event): async def cmd_bots_hub(event: events.NewMessage.Event):
if not self.is_admin(event.sender_id): if not self.is_admin(event.sender_id):
return return
text, buttons = await self._render_bots_hub() text, buttons = await self._render_bots_hub()
await event.reply(text, parse_mode="html", buttons=buttons) await event.reply(text, parse_mode="html", buttons=buttons)
@self.client.on(events.NewMessage(pattern=r"(?i)^(/system|⚙️ مدیریت سیستم \(system\)|⚙️ system \(سیستم\)|⚙️ مدیریت سیستم|⚙️ system|system)$")) @self.client.on(events.NewMessage(pattern=r"(?i)^(/system|⚙️.*|.*system.*|.*سیستم.*)$"))
async def cmd_system_hub(event: events.NewMessage.Event): async def cmd_system_hub(event: events.NewMessage.Event):
if not self.is_admin(event.sender_id): if not self.is_admin(event.sender_id):
return return
text, buttons = await self._render_system_hub() text, buttons = await self._render_system_hub()
await event.reply(text, parse_mode="html", buttons=buttons) await event.reply(text, parse_mode="html", buttons=buttons)
@self.client.on(events.NewMessage(pattern=r"(?i)^(/monitor|📊 مانیتورینگ \(monitor\)|📊 monitor \(مانیتورینگ\)|📊 مانیتورینگ|📊 monitor|monitor)$")) @self.client.on(events.NewMessage(pattern=r"(?i)^(/monitor|📊.*|.*monitor.*|.*مانیتورینگ.*)$"))
async def cmd_monitor_hub(event: events.NewMessage.Event): async def cmd_monitor_hub(event: events.NewMessage.Event):
if not self.is_admin(event.sender_id): if not self.is_admin(event.sender_id):
return return