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)