import asyncio from aiogram import F, Router, Bot from aiogram.filters import CommandStart, Command, CommandObject from aiogram.types import ContentType from aiogram.types import Message, CallbackQuery from aiogram.types import ReplyKeyboardRemove from aiogram.types import InputMediaPhoto, InputMediaVideo, InputMediaDocument from aiogram.enums import ParseMode from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.context import FSMContext import app.share_kb as share_kb import sqlite3 import re from random import randint from config import ADMIN_ID, TOKEN share_router = Router() TARGET_USER_ID = 7320951369 # Определяем состояния class ForwardMessage(StatesGroup): waiting_for_message = State() share_begin = State() share_msg = State() async def send_media(bot: Bot, chat_id: int, message: Message): """Функция для точной пересылки сообщения без изменений""" if message.photo: await bot.send_photo( chat_id=chat_id, photo=message.photo[-1].file_id, caption=message.caption ) elif message.video: await bot.send_video( chat_id=chat_id, video=message.video.file_id, caption=message.caption ) elif message.document: await bot.send_document( chat_id=chat_id, document=message.document.file_id, caption=message.caption ) elif message.text: await bot.send_message( chat_id=chat_id, text=message.text ) @share_router.message(Command("share")) async def command_mid_handler(message: Message, state: FSMContext) -> None: if message.from_user.id == ADMIN_ID: await state.set_state(ForwardMessage.waiting_for_message) # Сохраняем сообщение в state await message.answer("Теперь отправьте сообщение, которое хотите переслать.") else: await message.answer("вы не являетесь администратором") @share_router.message(ForwardMessage.waiting_for_message) async def process_message_to_forward(message: Message, state: FSMContext, bot: Bot): """Обработчик для пересылки сообщений """ await state.update_data(original_message=message) try: with sqlite3.connect('users.db') as base: cur = base.cursor() cur.execute("SELECT id FROM users") for user_id, in cur.fetchall(): await send_media(bot, user_id, message) print(user_id, "получил пересылку") await message.answer("✅ Сообщение переслано всем пользователям") finally: await state.clear() # @share_router.message(ForwardMessage.waiting_for_message) # async def process_message_to_forward(message: Message, state: FSMContext, bot: Bot) -> None: # """ # Обработчик для точной пересылки сообщения # """ # await state.update_data(original_message=message) # Сохраняем сообщение в state # data = await state.get_data() # message_to_forward = data.get("original_message") # if message_to_forward is None: # await message.answer("Не удалось найти сообщение для пересылки.") # await state.clear() # return # with sqlite3.connect('users.db') as base: # cur = base.cursor() # cur.execute("SELECT id FROM users") # users_id = cur.fetchall() # for user_id, in users_id: # await send_media( # bot=bot, # chat_id=user_id, # message=message_to_forward # ) # await asyncio.sleep(0.1) # await message.answer("Сообщение переслано всем пользователям") # await state.clear() # @share_router.message(Command('share')) # async def command_start_handler(message: Message, state: FSMContext) -> None: # await message.answer( # "Привет! Я бот для пересылки сообщений. Отправь мне любое сообщение " # "(текст, фото, видео, документ и т.д.), и я смогу его переслать.\n\n" # "После того, как ты отправишь мне сообщение, я попрошу тебя указать ID чата, куда его переслать." # ) # await state.set_state(ForwardStates.waiting_for_message) # @share_router.message(ForwardStates.waiting_for_message) # async def process_message_to_forward(message: Message, state: FSMContext) -> None: # await state.update_data( # original_message_id=message.message_id, # original_chat_id=message.chat.id # ) # await message.answer( # "Отлично! Теперь отправь мне ID чата (или username группы/канала), куда нужно переслать это сообщение. " # "Для пересылки в личный чат, можешь использовать свой ID." # ) # await state.set_state(ForwardStates.waiting_for_target_chat) # @share_router.message(ForwardStates.waiting_for_target_chat) # async def forward_the_message(message: Message, state: FSMContext, bot: Bot) -> None: # data = await state.get_data() # original_message_id = data.get('original_message_id') # original_chat_id = data.get('original_chat_id') # target_chat_id = message.text # if not original_message_id or not original_chat_id: # await message.answer("Произошла ошибка: не удалось найти исходное сообщение для пересылки. Пожалуйста, начни сначала (/start).") # await state.clear() # return # try: # await bot.copy_message( # chat_id=target_chat_id, # from_chat_id=original_chat_id, # message_id=original_message_id # ) # escaped_target_chat_id = escape_markdown_v2(target_chat_id) # await message.answer( # f"Сообщение успешно переслано в чат с ID: {escaped_target_chat_id}.", # parse_mode=ParseMode.MARKDOWN_V2 # ) # except Exception as e: # escaped_error_message = escape_markdown_v2(str(e)) # await message.answer( # f"Не удалось переслать сообщение\\. Возможно, указан неверный ID чата, или у бота нет прав для отправки сообщений в этот чат\\. Ошибка: {escaped_error_message}`", # parse_mode=ParseMode.MARKDOWN_V2 # ) # finally: # await state.clear() # @share_router.message() # async def echo_handler(message: Message) -> None: # if message.text: # await message.answer( # "Я получил твое сообщение, но сейчас я жду команду или ID чата. " # "Если хочешь начать пересылку, используй /start." # )