Третий коммит, добавление share, share_kb, а также ADMIN_ID

This commit is contained in:
2025-07-22 13:50:14 +03:00
parent 849feb7beb
commit b98123f4dc
1479 changed files with 323549 additions and 11 deletions

View File

@@ -1,10 +1,16 @@
import asyncio
from aiogram import F, Router
from aiogram.filters import CommandStart, Command
from aiogram import F, Router, Bot
from aiogram.filters import CommandStart, Command, CommandObject
from aiogram.types import Message, CallbackQuery
from aiogram.enums import ParseMode
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
import app.keyboard as kb
import app.debug_kb as debug_kb
import sqlite3
import app.share
from random import randint
from config import ADMIN_ID, TOKEN
router = Router()
@@ -22,8 +28,45 @@ async def cmd_start(message: Message):
cur.execute(insert_user, val)
cur.execute("SELECT * FROM users")
#print(cur.fetchall())
base.commit()
base.close()
await message.answer("тестовый ответ")
await message.answer("тестовый ответ")
@router.message(Command("echo"))
async def echo(message: Message):
"""Повторяет сообщение пользователя."""
await message.reply(message.text)
# @router.message(Command("test"))
# async def echo(message: Message):
# await message.answer("")
# await message.reply(message.text)
@router.message(Command("shareold"))
async def share(message: Message, bot: Bot):
if message.from_user.id == ADMIN_ID:
base = sqlite3.connect('users.db')
cur = base.cursor()
cur.execute("SELECT id FROM users")
users_id = cur.fetchall()
for users in users_id:
user = users[0]
await bot.send_message(user, 'тестовая рассылка')
print(user)
base.commit()
base.close()
else:
await message.answer("вы не администратор")

View File

@@ -0,0 +1,23 @@
from aiogram.types import (
ReplyKeyboardMarkup,
KeyboardButton,
InlineKeyboardButton,
InlineKeyboardMarkup
)
from aiogram.utils.keyboard import ReplyKeyboardBuilder
# # тестовая клавиатура, может быть потом удалена
# test_kb = ReplyKeyboardMarkup(keyboard=
# [
# [
# KeyboardButton(text='кнопка1'),
# KeyboardButton(text="кнопка2")
# ]
# [
# KeyboardButton(text="test")
# ],
# ],
# resize_keyboard=True,
# one_time_keyboard=True,
# input_field_placeholder='тестовый ввод',
# selective=True)

104
app/share.py Normal file
View File

@@ -0,0 +1,104 @@
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()

19
app/share_kb.py Normal file
View 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='выберите действие')