diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f6f949c --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Папки и файлы, которые не нужно добавлять в репозиторий +__pycache__/ +*.pyc +*.pyo +*.pyd +.env +.venv/ +*.log +.idea/ +.vscode/ +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/TelegramAnonReciever.iml b/.idea/TelegramAnonReciever.iml deleted file mode 100644 index 2c80e12..0000000 --- a/.idea/TelegramAnonReciever.iml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index a36b47e..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index c92c170..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8dbb259 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Telegram Anonymous Bot + +Бот для анонимной связи с администрацией чата. + +## Описание +Бот принимает текстовые сообщения от пользователей и анонимно пересылает их в чат модераторов. + +## Установка + +1. Склонируйте репозиторий: + ```bash + git clone https://github.com/ваш_репозиторий.git + cd ваш_репозиторий + ``` + +2. Создайте виртуальное окружение: + ```bash + python -m venv venv + source venv/bin/activate # Для Linux/MacOS + venv\Scripts\activate # Для Windows + ``` + +3. Установите зависимости: + ```bash + pip install -r requirements.txt + ``` + +4. Создайте файл `.env` в корневой директории и добавьте туда следующие переменные: + ``` + BOT_TOKEN=ваш_токен_бота + MODERATORS_CHAT_ID=id_чата_модераторов + ``` + +5. Запустите бота: + ```bash + python bot.py + ``` + +## Тестирование +- Отправьте сообщение боту в личном чате. +- Убедитесь, что сообщение анонимно пересылается в чат модераторов. + +## Лицензия +MIT License \ No newline at end of file diff --git a/main.py b/main.py index e69de29..4237473 100644 --- a/main.py +++ b/main.py @@ -0,0 +1,100 @@ +import os +import logging +from aiogram import Bot, Dispatcher, types +from aiogram.utils import executor +from dotenv import load_dotenv + +# Загрузка переменных окружения из файла .env +load_dotenv() + +# Инициализация бота и диспетчера +BOT_TOKEN = os.getenv("BOT_TOKEN") +MODERATORS_CHAT_ID = int(os.getenv("MODERATORS_CHAT_ID")) + +bot = Bot(token=BOT_TOKEN) +dp = Dispatcher(bot) + +# Настройка логирования +logging.basicConfig(level=logging.INFO) + +# Обработчик команды /start +@dp.message_handler(commands=["start"]) +async def send_welcome(message: types.Message): + await message.answer( + "Привет! Я анонимный бот для связи с администрацией. " + "Просто отправьте мне сообщение, и я передам его администраторам." + ) + +# Обработчик команды /whereiam (только для групп) +@dp.message_handler(commands=["whereiam"], chat_type=[types.ChatType.GROUP, types.ChatType.SUPERGROUP]) +async def get_group_id(message: types.Message): + chat_id = message.chat.id + chat_title = message.chat.title or "Беседа без названия" + await message.answer( + f"ID этой группы: `{chat_id}`\nНазвание: {chat_title}", + parse_mode="Markdown" + ) + +# Обработчик текстовых сообщений +@dp.message_handler(content_types=types.ContentTypes.TEXT) +async def handle_text_message(message: types.Message): + user_id = message.from_user.id + user_message = message.text + + # Логирование входящего сообщения + logging.info(f"Получено текстовое сообщение от пользователя {user_id}: {user_message}") + + # Пересылка текстового сообщения в чат модераторов + try: + await bot.send_message( + chat_id=MODERATORS_CHAT_ID, + text=f"Анонимное текстовое сообщение:\n{user_message}" + ) + await message.answer("Ваше сообщение успешно отправлено администраторам!") + except Exception as e: + logging.error(f"Ошибка при отправке сообщения: {e}") + await message.answer("Произошла ошибка при отправке сообщения. Попробуйте позже.") + +# Обработчик медиа-сообщений (фото, видео, аудио, документы и т.д.) +@dp.message_handler(content_types=[ + types.ContentType.PHOTO, + types.ContentType.VIDEO, + types.ContentType.AUDIO, + types.ContentType.DOCUMENT, + types.ContentType.STICKER, + types.ContentType.VOICE, + types.ContentType.VIDEO_NOTE +]) +async def handle_media_message(message: types.Message): + user_id = message.from_user.id + content_type = message.content_type + + # Логирование входящего сообщения + logging.info(f"Получено медиа-сообщение типа {content_type} от пользователя {user_id}") + + # Пересылка медиа-сообщения в чат модераторов + try: + if content_type == "photo": + # Отправляем самую большую версию фото + await bot.send_photo(chat_id=MODERATORS_CHAT_ID, photo=message.photo[-1].file_id) + elif content_type == "video": + await bot.send_video(chat_id=MODERATORS_CHAT_ID, video=message.video.file_id) + elif content_type == "audio": + await bot.send_audio(chat_id=MODERATORS_CHAT_ID, audio=message.audio.file_id) + elif content_type == "document": + await bot.send_document(chat_id=MODERATORS_CHAT_ID, document=message.document.file_id) + elif content_type == "sticker": + await bot.send_sticker(chat_id=MODERATORS_CHAT_ID, sticker=message.sticker.file_id) + elif content_type == "voice": + await bot.send_voice(chat_id=MODERATORS_CHAT_ID, voice=message.voice.file_id) + elif content_type == "video_note": + await bot.send_video_note(chat_id=MODERATORS_CHAT_ID, video_note=message.video_note.file_id) + + await message.answer("Ваше медиа-сообщение успешно отправлено администраторам!") + except Exception as e: + logging.error(f"Ошибка при отправке медиа-сообщения: {e}") + await message.answer("Произошла ошибка при отправке сообщения. Попробуйте позже.") + +# Запуск бота +if __name__ == "__main__": + executor.start_polling(dp, skip_updates=True) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c04fbc0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +aiogram==2.25.1 +python-dotenv==1.0.0 \ No newline at end of file