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, InputMediaPhoto 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 from random import randint from config import ADMIN_ID, TOKEN share_router = Router() class Share(StatesGroup): 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 start_share(message: Message, state: FSMContext): if message.from_user.id == ADMIN_ID: await message.answer("🤔вы уверены что хотите начать рассылку?", reply_markup=share_kb.share_starting) else: await message.answer("⛔вы не являетесь администратором") @share_router.callback_query(F.data == 'share_cancel') async def share_cancel_cmd(callback: CallbackQuery, state: FSMContext): await callback.answer(show_alert=False) await callback.message.edit_text('❌рассылка не была начата', reply_markup=None) await state.clear() @share_router.callback_query(F.data == 'share_starting') async def share_start_cmd(callback: CallbackQuery, state: FSMContext): await callback.answer(show_alert=False) await callback.message.edit_text( '✉️отправьте сообщение для рассылки\n\nучтите что можно ' \ 'приложить только один медиафайл', reply_markup=None) await state.set_state(Share.share_begin) @share_router.message(Share.share_begin) async def share_begin_cmd(message: Message, state: FSMContext, bot: Bot): await state.update_data(share_msg=message) await message.answer("🤔вы уверены что хотите разослать сообщение?", reply_markup=share_kb.share_send) await state.set_state(Share.share_msg) @share_router.callback_query(F.data == 'share_starting_send') async def share_send_cmd(callback: CallbackQuery, state: FSMContext, bot: Bot): await callback.answer(show_alert=False) data = await state.get_data() share_msg = data.get('share_msg') if not share_msg: await callback.message.edit_text('❌Ошибка: сообщение для рассылки не найдено') await state.clear() return base = sqlite3.connect('users.db') cur = base.cursor() cur.execute("SELECT id FROM users") users_id = cur.fetchall() await callback.message.edit_text('🔄Рассылаю сообщение...', reply_markup=None) await asyncio.sleep(0.1) # Небольшая задержка перед началом рассылки for user_id, in users_id: if user_id != ADMIN_ID: await send_media(bot, user_id, share_msg) base.close() await callback.message.edit_text('🎉Сообщение успешно разослано', reply_markup=None) await state.clear()