Files
simple_sql_tg_bot/app/share_2.py

198 lines
7.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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."
# )