Третий коммит, добавление share, share_kb, а также ADMIN_ID
This commit is contained in:
@@ -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("вы не администратор")
|
||||
|
||||
|
@@ -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
104
app/share.py
Normal 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
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