import logging from aiogram import Bot, Dispatcher, types from aiogram.types import ParseMode from aiogram.utils import executor # Ваш токен от BotFather API_TOKEN = '7279978236:AAEnzp3moKdIUqOZ_rCLuim7tyQwVBJDGOU' # ID группы, из которой будут пересылаться сообщения #SOURCE_GROUP_ID = -1002243409068 # замените на реальный ID вашей основной группы # Список ID групп, куда будут пересылаться сообщения TARGET_GROUP_IDS = [-1002164079094, -1002243409068, -1002150063511, -1002191147447] # замените на реальные ID ваших групп # Список ID разрешённых пользователей ALLOWED_USER_IDS = [523763687, 1000964643, 794413216, 954527694] # замените на реальные ID разрешённых пользователей # Настройка логирования с записью в файл logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('bot_logs.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) # Инициализация бота и диспетчера bot = Bot(token=API_TOKEN, parse_mode=ParseMode.HTML) dp = Dispatcher(bot) # Обработчик команды /start @dp.message_handler(commands=['start']) async def send_welcome(message: types.Message): await message.reply("Привет! Я бот, который пересылает сообщения в группы.") # Обработчик всех типов сообщений для пересылки из личных сообщений боту @dp.message_handler(content_types=types.ContentType.ANY) async def forward_message(message: types.Message): if message.chat.type == 'private': # Проверка, что сообщение пришло в личный чат if message.from_user.id in ALLOWED_USER_IDS: # Проверка, что пользователь разрешён for group_id in TARGET_GROUP_IDS: try: if message.content_type == types.ContentType.TEXT: await bot.send_message(chat_id=group_id, text=message.text, disable_notification=True) logger.info(f"Текстовое сообщение отправлено в группу {group_id}") elif message.content_type == types.ContentType.PHOTO: await bot.send_photo(chat_id=group_id, photo=message.photo[-1].file_id, caption=message.caption, disable_notification=True) logger.info(f"Фото отправлено в группу {group_id}") elif message.content_type == types.ContentType.DOCUMENT: await bot.send_document(chat_id=group_id, document=message.document.file_id, caption=message.caption, disable_notification=True) logger.info(f"Документ отправлен в группу {group_id}") elif message.content_type == types.ContentType.VIDEO: await bot.send_video(chat_id=group_id, video=message.video.file_id, caption=message.caption, disable_notification=True) logger.info(f"Видео отправлено в группу {group_id}") elif message.content_type == types.ContentType.AUDIO: await bot.send_audio(chat_id=group_id, audio=message.audio.file_id, caption=message.caption, disable_notification=True) logger.info(f"Аудио отправлено в группу {group_id}") elif message.content_type == types.ContentType.VOICE: await bot.send_voice(chat_id=group_id, voice=message.voice.file_id, caption=message.caption, disable_notification=True) logger.info(f"Голосовое сообщение отправлено в группу {group_id}") elif message.content_type == types.ContentType.VIDEO_NOTE: await bot.send_video_note(chat_id=group_id, video_note=message.video_note.file_id, disable_notification=True) logger.info(f"Видеозаметка отправлена в группу {group_id}") else: logger.warning(f"Тип сообщения {message.content_type} не поддерживается") except Exception as e: logger.error(f"Ошибка при отправке сообщения в группу {group_id}: {e}") else: logger.warning(f"Пользователь {message.from_user.id} не имеет доступа к боту") await message.reply("У вас нет доступа к этому боту.") if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)