Этап 1: Базовый Telegram-бот с прокси
This commit is contained in:
commit
481ad8dddc
|
|
@ -0,0 +1,33 @@
|
|||
# Telegram
|
||||
TELEGRAM_BOT_TOKEN=your_bot_token_here
|
||||
TELEGRAM_PROXY_URL=socks5://user:pass@proxy:port
|
||||
TELEGRAM_PROXY_TYPE=socks5
|
||||
|
||||
# Access control
|
||||
ALLOWED_USERNAMES=user1,user2
|
||||
BOT_NAME=Валера
|
||||
|
||||
# Tools
|
||||
DEFAULT_TOOL=opencode
|
||||
QWEN_COMMAND=qwen-code
|
||||
OPENCODE_COMMAND=opencode
|
||||
TOOL_TIMEOUT=120
|
||||
|
||||
# Memory
|
||||
MEMORY_MESSAGES_COUNT=10
|
||||
CHROMA_PERSIST_DIR=./chroma_db
|
||||
|
||||
# Scheduler
|
||||
SCHEDULER_ENABLED=true
|
||||
IDEA_INTERVAL_HOURS=4
|
||||
|
||||
# Speech-to-text
|
||||
STT_ENABLED=true
|
||||
STT_MODEL=vosk
|
||||
|
||||
# Russian LLM (optional)
|
||||
GIGACHAT_CREDENTIALS=
|
||||
YANDEX_API_KEY=
|
||||
|
||||
# Database
|
||||
DATABASE_URL=sqlite+aiosqlite:///./valera.db
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
|
||||
chroma_db/
|
||||
*.db
|
||||
*.db-journal
|
||||
|
||||
.DS_Store
|
||||
.idea/
|
||||
.vscode/
|
||||
*.log
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
from pydantic_settings import BaseSettings
|
||||
from functools import lru_cache
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
telegram_bot_token: str = ""
|
||||
telegram_proxy_url: Optional[str] = None
|
||||
telegram_proxy_type: str = "socks5"
|
||||
|
||||
allowed_usernames: str = ""
|
||||
bot_name: str = "Валера"
|
||||
|
||||
default_tool: str = "opencode"
|
||||
qwen_command: str = "qwen-code"
|
||||
opencode_command: str = "opencode"
|
||||
tool_timeout: int = 120
|
||||
|
||||
memory_messages_count: int = 10
|
||||
chroma_persist_dir: str = "./chroma_db"
|
||||
|
||||
scheduler_enabled: bool = True
|
||||
idea_interval_hours: int = 4
|
||||
|
||||
stt_enabled: bool = True
|
||||
stt_model: str = "vosk"
|
||||
|
||||
gigachat_credentials: Optional[str] = None
|
||||
yandex_api_key: Optional[str] = None
|
||||
|
||||
database_url: str = "sqlite+aiosqlite:///./valera.db"
|
||||
|
||||
class Config:
|
||||
env_file = ".env"
|
||||
extra = "allow"
|
||||
|
||||
|
||||
@lru_cache()
|
||||
def get_settings() -> Settings:
|
||||
return Settings()
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
python-telegram-bot>=20.0
|
||||
python-dotenv>=1.0.0
|
||||
pydantic>=2.0.0
|
||||
aiofiles>=23.0.0
|
||||
chromadb>=0.4.0
|
||||
sentence-transformers>=2.2.0
|
||||
apscheduler>=3.10.0
|
||||
ffmpeg-python>=0.2.0
|
||||
vosk>=0.3.45
|
||||
faster-whisper>=0.10.0
|
||||
gigachat>=0.2.0
|
||||
requests>=2.31.0
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
import asyncio
|
||||
import logging
|
||||
from telegram import Update
|
||||
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
|
||||
from config.config import get_settings
|
||||
|
||||
logging.basicConfig(
|
||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||
level=logging.INFO
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
settings = get_settings()
|
||||
|
||||
|
||||
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
await update.message.reply_text(
|
||||
f"Привет! Я {settings.bot_name}, ваш ИИ-ассистент.\n"
|
||||
"Я помогу вам с программированием и не только."
|
||||
)
|
||||
|
||||
|
||||
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
await update.message.reply_text(update.message.text)
|
||||
|
||||
|
||||
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
help_text = (
|
||||
f"Я {settings.bot_name}, ваш ИИ-ассистент.\n\n"
|
||||
"Доступные команды:\n"
|
||||
"/start - Начать работу\n"
|
||||
"/help - Показать эту справку\n"
|
||||
)
|
||||
await update.message.reply_text(help_text)
|
||||
|
||||
|
||||
def main():
|
||||
builder = Application.builder()
|
||||
builder.token(settings.telegram_bot_token)
|
||||
|
||||
if settings.telegram_proxy_url:
|
||||
builder.proxy_url(settings.telegram_proxy_url)
|
||||
builder.proxy_type(settings.telegram_proxy_type)
|
||||
|
||||
application = builder.build()
|
||||
|
||||
application.add_handler(CommandHandler("start", start))
|
||||
application.add_handler(CommandHandler("help", help_command))
|
||||
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
|
||||
|
||||
logger.info("Бот запущен")
|
||||
application.run_polling(allowed_updates=Update.ALL_TYPES)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue