From 812448282a5c52311a0cdb05e7db12b34a21524d Mon Sep 17 00:00:00 2001 From: payzinn Date: Sat, 11 Jan 2025 03:09:05 +0600 Subject: [PATCH] init --- .env | 4 ++ .gitignore | 2 + Dockerfile | 17 +++++++ README.md | 46 +++++++++++++++++++ bot.py | 18 ++++++++ config.py | 8 ++++ db.py | 23 ++++++++++ delete_message_backup.dump | Bin 0 -> 2711 bytes handlers.py | 88 +++++++++++++++++++++++++++++++++++++ models.py | 11 +++++ requirements.txt | Bin 0 -> 190 bytes states.py | 7 +++ 12 files changed, 224 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 bot.py create mode 100644 config.py create mode 100644 db.py create mode 100644 delete_message_backup.dump create mode 100644 handlers.py create mode 100644 models.py create mode 100644 requirements.txt create mode 100644 states.py diff --git a/.env b/.env new file mode 100644 index 0000000..44551ad --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +BOT_TOKEN=7880464408:AAEiLDCgB4r2XVNtEoZHbwKJnFmDUbGSc0Y +DATABASE_URL=postgresql+asyncpg://postgres:2780@host.docker.internal/delete_message +# DATABASE_URL=postgresql+asyncpg://postgres:2780@localhost/delete_message +ADMINS = [6155921710, 6297555082] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..93526df --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv/ +__pycache__/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8f9468b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.11-slim-bullseye + +ENV PYTHONUNBUFFERED=1 +ENV PYTHONWARNINGS="ignore" +ENV SQLALCHEMY_WARN_20=0 +ENV PYTHONDONTWRITEBYTECODE=1 + +WORKDIR / + +COPY requirements.txt . + +RUN pip install --no-cache-dir --upgrade pip \ + && pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["python", "bot.py"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..41263a8 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# DELETING_MESSAGES + +## Описание +Бот добавляет в базу данных тех, кто может писать в чат + +# Запуск через python + +### 1. Создаём виртуальное окружение +```cmd + python -m venv venv +``` + +### 2. Активируем виртуальное окружение +```cmd + venv\Scripts\activate +``` +### 3. Устанавливаем зависимости +```cmd + pip install -r requirements.txt +``` + +### 4. Переименовываем .env copy в .env + Вставляем свой токен бота + + +### 5. Запуск +```cmd + python bot.py +``` + +# Запуск через Docker + +### 1. Создание докер приложения + перейдите в директорию с ботом и пропишите следующую команду (с точкой) +```cmd + docker build -t название . +``` + +### 2. Активируем докер приложение +```cmd + docker run название +``` + +# Добавление админа + + чтобы добавить админа нужно в файле .env в список ADMINS добавить айди админа \ No newline at end of file diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..2f16b32 --- /dev/null +++ b/bot.py @@ -0,0 +1,18 @@ +import asyncio +from handlers import router +from aiogram import Bot, Dispatcher +from config import BOT_TOKEN + +bot = Bot(token=BOT_TOKEN) +dp = Dispatcher() + + +async def main(): + dp.include_router(router) + await dp.start_polling(bot) + +if __name__ == "__main__": + try: + asyncio.run(main()) + except KeyboardInterrupt: + print('Exit') \ No newline at end of file diff --git a/config.py b/config.py new file mode 100644 index 0000000..e78241e --- /dev/null +++ b/config.py @@ -0,0 +1,8 @@ +import os +from dotenv import load_dotenv + + +load_dotenv() +BOT_TOKEN = os.getenv('BOT_TOKEN') +DATABASE_URL = os.getenv('DATABASE_URL') +ADMINS = list(map(int, os.getenv("ADMINS", "").strip("[]").split(","))) \ No newline at end of file diff --git a/db.py b/db.py new file mode 100644 index 0000000..7bacdb5 --- /dev/null +++ b/db.py @@ -0,0 +1,23 @@ +import logging +logging.basicConfig(level=logging.ERROR) +logging.getLogger('sqlalchemy.pool').setLevel(logging.ERROR) +logging.getLogger('sqlalchemy').setLevel(logging.ERROR) +logging.getLogger('sqlalchemy').propagate = False +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine +from sqlalchemy.orm import sessionmaker +from sqlalchemy.ext.asyncio import async_sessionmaker +from models import Base +from config import DATABASE_URL +import warnings +warnings.filterwarnings("ignore") + +# Создание асинхронного движка для подключения к базе данных +engine = create_async_engine(DATABASE_URL, echo=False, pool_pre_ping=True) + +# Создание сессий для работы с базой данных +async_session = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession) + +# Функция для инициализации базы данных +async def init_db(): + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) # Создание всех таблиц, определенных в моделях diff --git a/delete_message_backup.dump b/delete_message_backup.dump new file mode 100644 index 0000000000000000000000000000000000000000..479dcf417f5aec7fc4991f33ddb6d64977a72c15 GIT binary patch literal 2711 zcmbVO&5zqe6rYq*s-;jq!~v+PDIAijAxgp~`%&$|wY}YF9XoZLwkr;n*PeQ<^*X`! zqNNf-LLfjY`~y@7E_*{NEvOtT)I%!{2-FICfCC2(9Jy481H75Bo$pe1q>N|gefam@ z`}s{;r=?~qcNpzIn9HFP2*v`P_R;BaIj{KO#)!5!mtZf%M!$J|b3V zZAaYZ+En_G-P#Qa<%Tfw_;MpDRnYJU_}!JMK)WycD5nOItYAk-A<0Fn!X)H zo)wt4+gB$`ULpTRdDJV~{MG)Z$6w%U$J$ju=$ zN|G1@Op?T~Q{3BL_dUDBlyPAO!|)vJ1u=0+h*izNYDZCuOhA=Pkgj_!C}hGJs5E*W z9J5fz-6m0@1E9iR*T=mTzyg_iBdoOz}Er0qPN!u4RZIl7Y9ZBynXsAQIf?iELGqhhL6BN;1r zP7x=K;W%E_wIltb5=qUioNy}SUZNp;P$Fo0lZvz9p+oWKy5Fr8k;_zJ^!jH4Js5OkMmhmzdFWqQ7yng0tj*)BoyG zImFoMg7MDf=PuoT;s!eO?XS1Xo#0mKm$yIO{p~%!_w3yI`_ VrK04ayg`)Lta;{N%4sv>tUj-G92o!r literal 0 HcmV?d00001 diff --git a/states.py b/states.py new file mode 100644 index 0000000..2c85229 --- /dev/null +++ b/states.py @@ -0,0 +1,7 @@ +from aiogram import F +from aiogram.fsm.state import StatesGroup, State + + +class Admin(StatesGroup): + users = State() + \ No newline at end of file