/
i_super_programmer
/
chat_bot
Обзор
Документация
Войти
/
i_super_programmer
/
chat_bot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
handler/create_ob.py
115 строк
5 KB
vasya2222
add file
02 дек 2024, 13:57
02 дек 2024, 13:57
53cb0c3
Код
Авторство
О чём код?
from aiogram import Router, F, types from aiogram.filters import Command from aiogram.types import Message from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.context import FSMContext from keyboard.choose.choose import choose_text, add_under_button from config.bot import ADMIN, bot, CANAL from aiogram.utils.keyboard import InlineKeyboardBuilder, InlineKeyboardButton from keyboard.inline.accept_and_cnacel import accept_and_cancel from aiogram.types import CallbackQuery import json router = Router() class AdvertisementStateGroup(StatesGroup): name = State() rubrica = State() under_category = State() description = State() image = State() @router.message(Command('create')) async def hello(message: Message, state: FSMContext): await message.answer(f'Введите название') await state.set_state(AdvertisementStateGroup.name) @router.message(AdvertisementStateGroup.name) async def state_name(message: Message, state: FSMContext): await state.update_data(name=message.text) await message.answer('Выберите категорию', reply_markup=choose_text()) await state.set_state(AdvertisementStateGroup.rubrica) @router.message(AdvertisementStateGroup.rubrica) async def state_rubrica(message: Message, state: FSMContext): await state.update_data(rubrica=message.text) data = await state.get_data() await message.answer('Выберите под категорию', reply_markup=add_under_button(data['rubrica'])) await state.set_state(AdvertisementStateGroup.under_category) @router.message(AdvertisementStateGroup.under_category) async def state_rubrica(message: Message, state: FSMContext): await state.update_data(under_category=message.text) await message.answer('Введите описание объявления', reply_markup=types.ReplyKeyboardRemove()) await state.set_state(AdvertisementStateGroup.description) @router.message(AdvertisementStateGroup.description) async def state_description(message: Message, state: FSMContext): await state.update_data(description=message.text) await message.answer('Загрузите фото') await state.set_state(AdvertisementStateGroup.image) @router.message(AdvertisementStateGroup.image) async def state_image(message: Message, state: FSMContext): chat_admins = await bot.get_chat_administrators(CANAL) await state.update_data(image=message.photo[-1].file_id, user_id=message.from_user.id) user_data = await state.get_data() await message.answer_photo(photo=user_data["image"], caption=f"#{user_data['rubrica']} " f"#{user_data['under_category']}" f"{user_data['name']}\n" f"{user_data['description']}") await message.answer('Объявление создано 1') await message.answer('Объявление отправлено администратору') text = (f"#{user_data['rubrica']} #{user_data['under_category']}{user_data['name']}\n" f"{user_data['description']}\n") for admin in chat_admins: if admin.user.is_bot: continue message_id = await bot.send_photo(admin.user.id, photo=user_data["image"], caption=text, reply_markup=accept_and_cancel(message.from_user.id, user_data["image"], text+ f"\nОбъявление от {message.from_user.full_name}"), ) add_info_in_bd_json(message.from_user.id, user_data["image"], text, message_id.message_id) await state.update_data(message_id=message_id.message_id) await state.clear() @router.callback_query(lambda c: c.data.startswith('accept_')) async def accept(callback: types.CallbackQuery): user_id= callback.data.split('_')[-1] image, text, massage_id = get_data(user_id) await bot.send_photo(CANAL, photo=image, caption=text ) await bot.send_message(user_id, 'Объявление принято') await bot.delete_message(callback.message.chat.id, massage_id) @router.callback_query(lambda c: c.data.startswith('reject_')) async def accept(callback: types.CallbackQuery): user_id = callback.data.split('_')[-1] image, text, massage_id = get_data(user_id) await bot.send_message(user_id, 'Объявление отклонено') await bot.delete_message(callback.message.chat.id, massage_id) def add_info_in_bd_json(user_id, image, text, message_id): with open('./bd.json', 'w') as f: data = {user_id: [image, text, message_id]} json.dump(data, f) def get_data(user_id): with open('./bd.json', 'r') as f: data = json.load(f) return data[user_id]