нулевой патч для третьего коммита, только убирает venv
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
users.db
|
users.db
|
||||||
config.py
|
config.py
|
||||||
|
|
||||||
*.pyc
|
*.pyc
|
||||||
*.pyo
|
*.pyo
|
||||||
*.egg-info
|
*.egg-info
|
||||||
|
1
app/debug_kb.py
Normal file
1
app/debug_kb.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# пока что пустой, но в дальнейшем может быть использован
|
44
app/handliers_test.py
Normal file
44
app/handliers_test.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
"""на данный момент не работает, но а дальнейшем будет использован"""
|
||||||
|
|
||||||
|
|
||||||
|
# import asyncio
|
||||||
|
# from aiogram import F, Router
|
||||||
|
# from aiogram.filters import CommandStart, Command, CommandObject
|
||||||
|
# from aiogram.types import Message, CallbackQuery
|
||||||
|
# from aiogram.enums import ParseMode
|
||||||
|
# import app.keyboard as kb
|
||||||
|
# import app.debug_kb as debug_kb
|
||||||
|
# import sqlite3
|
||||||
|
# from random import randint
|
||||||
|
# router = Router()
|
||||||
|
|
||||||
|
# @router.message(CommandStart())
|
||||||
|
# async def cmd_start(message: Message):
|
||||||
|
# base = sqlite3.connect('users.db')
|
||||||
|
|
||||||
|
# cur = base.cursor()
|
||||||
|
|
||||||
|
# insert_user = """INSERT OR IGNORE INTO users (first_name, last_name, username, id, is_bot, is_premium)
|
||||||
|
# VALUES (?, ?, ?, ?, ?, ?)"""
|
||||||
|
|
||||||
|
# val = (message.from_user.first_name, message.from_user.last_name, message.from_user.username,
|
||||||
|
# message.from_user.id, message.from_user.is_bot, message.from_user.is_premium)
|
||||||
|
|
||||||
|
# cur.execute(insert_user, val)
|
||||||
|
|
||||||
|
# cur.execute("SELECT * FROM users")
|
||||||
|
# print(cur.fetchall())
|
||||||
|
# base.commit()
|
||||||
|
|
||||||
|
# base.close()
|
||||||
|
|
||||||
|
# await message.answer("тестовый ответ")
|
||||||
|
|
||||||
|
# @router.message(Command("share"))
|
||||||
|
# async def share_start(message: Message):
|
||||||
|
# pass
|
||||||
|
|
||||||
|
# @router.message(Command("echo"))
|
||||||
|
# async def echo(message: Message):
|
||||||
|
# """Повторяет сообщение пользователя."""
|
||||||
|
# await message.reply(message.text)
|
197
app/share_2.py
Normal file
197
app/share_2.py
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
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."
|
||||||
|
# )
|
19
app/share_kb.py
Normal file
19
app/share_kb.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
from aiogram.types import (
|
||||||
|
ReplyKeyboardMarkup,
|
||||||
|
KeyboardButton,
|
||||||
|
InlineKeyboardButton,
|
||||||
|
InlineKeyboardMarkup,
|
||||||
|
ReplyKeyboardRemove
|
||||||
|
)
|
||||||
|
from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder
|
||||||
|
from aiogram.filters.callback_data import CallbackData
|
||||||
|
|
||||||
|
share_starting = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[InlineKeyboardButton(text='да✅', callback_data='share_starting'),
|
||||||
|
InlineKeyboardButton(text='нет❌', callback_data='share_cancel')]
|
||||||
|
], resize_keyboard=True, input_field_placeholder='выберите действие')
|
||||||
|
|
||||||
|
share_send = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[InlineKeyboardButton(text='да✅', callback_data='share_starting_send'),
|
||||||
|
InlineKeyboardButton(text='нет❌', callback_data='share_cancel')]
|
||||||
|
], resize_keyboard=True, input_field_placeholder='выберите действие')
|
Reference in New Issue
Block a user