198 lines
7.3 KiB
Python
198 lines
7.3 KiB
Python
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."
|
||
# )
|