From c3b9a4cda183bee336ae6a4abfc1830e47e43739 Mon Sep 17 00:00:00 2001 From: "Andrey K. Choi" Date: Wed, 16 Jul 2025 06:10:22 +0900 Subject: [PATCH] init commit --- .gitignore | 3 ++ Dockerfile | 10 +++++++ README.MD | 71 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 8 ++++++ env.sample | 1 + main.py | 30 ++++++++++++++++++++ requirements.txt | 2 ++ 7 files changed, 125 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.MD create mode 100644 docker-compose.yml create mode 100644 env.sample create mode 100644 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..565c2e9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.venv/ +.env +.history diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7b3f32c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["python", "main.py"] diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..4e09d5a --- /dev/null +++ b/README.MD @@ -0,0 +1,71 @@ +# MULTIBOT — Многобот на aiogram v3 + +Минималистичное Python-приложение, которое позволяет запускать **несколько Telegram-ботов** из одного кода. Каждый бот обрабатывает сообщения одинаково: отвечает пользователю, повторяя его сообщение с подписью. + +## 📦 Стек + +- Python 3.11+ +- aiogram v3 +- python-dotenv +- Docker / Docker Compose (опционально) + +## 🔧 Возможности + +- Единый код для всех ботов +- Добавление новых ботов — просто добавьте токен в `.env` +- Поддержка `.env` и Docker +- Ответ пользователю: + _«Это бот `{username}`, вы написали "{message}"»_ + +--- + +## 🚀 Быстрый запуск + + +## Пре-подготовка +### Установка Docker + +```bash +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh +``` +Добавление пользователя в группу docker, чтобы не использовать sudo при работе с ним +```bash +sudo usermod -aG docker $USER +``` + +Или установимся вот так: + +```bash +sudo apt-get install docker.io docker-compose-v2 +sudo usermod -aG docker $USER +``` + +## Установка и запуск + +### 1. клонируем репозиторий + +```bash +git clone https://github.com/Artemyev/multibot.git +``` + +### 2. Правим `.env` + +```bash +>> cp .env.sample .env +>> nano .env # или любой другой текстовый редактор +> BOT_TOKENS=TTOKEN1,TOKEN2,TOKEN3 +``` +сохряем и выходим + +### 3. Запускаем + +```bash +docker compose up -d --build +``` + +### 4. Проверяем + +```bash +docker compose ps +``` \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f525cef --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3.8' + +services: + multibot: + build: . + env_file: + - .env + restart: unless-stopped diff --git a/env.sample b/env.sample new file mode 100644 index 0000000..20eac75 --- /dev/null +++ b/env.sample @@ -0,0 +1 @@ +BOT_TOKENS=список токенов через запятую \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..51de01b --- /dev/null +++ b/main.py @@ -0,0 +1,30 @@ +import asyncio +import os +from aiogram import Bot, Dispatcher, F +from aiogram.types import Message +from aiogram.enums import ParseMode +from dotenv import load_dotenv +from aiogram.client.default import DefaultBotProperties + +load_dotenv() + +BOT_TOKENS = os.getenv("BOT_TOKENS", "").split(",") + +async def send_echo_message(message: Message, bot: Bot): + me = await bot.get_me() + await message.answer(f"Это бот {me.username}, вы написали \"{message.text}\"") + +async def start_bot(token: str): + bot = Bot( + token, + default=DefaultBotProperties(parse_mode=ParseMode.HTML) + ) + dp = Dispatcher() + dp.message.register(send_echo_message, F.text) + await dp.start_polling(bot) + +async def main(): + await asyncio.gather(*(start_bot(token) for token in BOT_TOKENS if token)) + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8fa8ec1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +aiogram==3.* +python-dotenv==1.0.0 \ No newline at end of file