From 794179a8e860af528a8f8c9c6cd421841b225780 Mon Sep 17 00:00:00 2001 From: vasilytray Date: Tue, 11 Mar 2025 23:36:28 +0700 Subject: [PATCH] add bot in docker --- Dockerfile | 10 + bot/__init__.py | 0 bot/main.py | 481 +++++++++++++++++++++++++++++++++++++++++++++ bot_in_docker.md | 171 ++++++++++++++++ docker-compose.yml | 8 + 5 files changed, 670 insertions(+) create mode 100644 Dockerfile create mode 100644 bot/__init__.py create mode 100644 bot/main.py create mode 100644 bot_in_docker.md create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..74ba026 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.12-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["python", "-m", "bot.main"] \ No newline at end of file diff --git a/bot/__init__.py b/bot/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bot/main.py b/bot/main.py new file mode 100644 index 0000000..1dbdcd4 --- /dev/null +++ b/bot/main.py @@ -0,0 +1,481 @@ +import os +import asyncio +import logging +from datetime import datetime + + +from aiogram import Bot, Dispatcher, types +from aiogram.client.default import DefaultBotProperties +from aiogram.enums import ParseMode +from aiogram.enums.dice_emoji import DiceEmoji +from aiogram import F, html +from aiogram.types import Message +from aiogram.filters import Command, CommandObject, CommandStart +from aiogram.utils.formatting import Text, Bold, as_list, as_marked_section, as_key_value, HashTag +from aiogram.types import FSInputFile, URLInputFile, BufferedInputFile +# новый импорт! +from aiogram.utils.markdown import hide_link #для скрытой ссылки +# новый импорт! +from aiogram.utils.keyboard import ReplyKeyboardBuilder # для создания кнопок + + +from config_reader import config + +# Включаем логирование, чтобы не пропустить важные сообщения +logging.basicConfig(level=logging.INFO) + +# Для записей с типом Secret* необходимо +# вызывать метод get_secret_value(), +# чтобы получить настоящее содержимое вместо '*******' +bot = Bot( + token=config.bot_token.get_secret_value(), + default=DefaultBotProperties( + parse_mode=ParseMode.HTML + # тут ещё много других интересных настроек + )) + +# Объект бота напрямую из .env +# bot = Bot(token=os.getenv("BOT_TOKEN")) + +# Диспетчер +dp = Dispatcher() +dp["started_at"] = datetime.now().strftime("%Y-%m-%d %H:%M") + +# Хэндлер на команду /start +@dp.message(Command("start")) +async def cmd_start(message: types.Message): + # await message.answer("Привет! ") + content = as_list( + Text( + "Привет! ", + Bold(message.from_user.first_name) + ), + as_marked_section( + Bold("Я умею:"), + "/test1 - Отвечу Test1", + "/answer - Просто отвечу", + "/reply - Отвечу ответом", + "/name - Поприветствую тебя по Имени и Фамилии", + "/aboute - Дам тебе характеристику", + "/dice - Подкину для тебя кубик, загадай число ;)", + "Если ты мне отправишь гифку, я тебе ей же и отвечу", + "----------", + "/more - Еще больше возможностей!", + "/vfy - Получить подтверждение Вашего номера телефона", + + marker="✅ ", + ), + as_marked_section( + Bold("Failed:"), + "Не смогу полететь на луну:( ", + marker="❌ ", + ), + HashTag("#ищу"), + # Text( + # "Номер телефона, ", + # Bold(message.contact.phone_number) + # ) + ) + await message.answer( + **content.as_kwargs() + ) + +@dp.message(Command("more")) +async def cmd_more(message: types.Message): + # await message.answer("Привет! ") + content = as_list( + Text( + + Bold(message.from_user.first_name), + " Еще я могу вот что: ", + ), + as_marked_section( + Bold(""), + "Если ты напишешь в тексте ", + "адрес сайта,", + "e-mail,", + "Номер телефона,", + "Я распознаю их и напишу что нашел", + "/special_buttons - выведу спецкнопки с командами", + "/dice - Подкину для тебя кубик, загадай число ;)", + "/settimer