@clazy13

Как сделать так что бы айди админа не заходил в функцию обрабатывающую любой текст?

У меня есть код для принятия человека в бота. После того как человек проходит проверку, данные отправляются в базу данных. До принятия пользователя в группу ему при следующих сообщениях в боте выдавалась любая ошибка(по типу нельзя писать в боте до подтверждения анкеты),для обработки этого текста я использую @dp.message_handler()
Мне нужно что бы если пользователь является админом,то его не заводило в этот декоратор

Код:

class AnswerUser(StatesGroup):
    answer1 = State()
    answer2 = State()

@dp.message_handler(commands=['start'])
async def user_question_1(message: types.Message):
    if message.chat.type not in (
        types.ChatType.GROUP,
        types.ChatType.SUPERGROUP
    ):
        if message.from_user.id == admin_id:
            return await message.answer(text='Здравствуйте, повелитель, чего желаете?', reply_markup=access)
        db = sqlite3.connect('all_user.db')
        cursor_1 = db.cursor()   
        user = cursor_1.execute('SELECT id FROM all_user;').fetchall()
        all_id = [x[0] for x in user]
        if message.from_user.id in all_id:
            keyboard = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
            keyboard.row(
                types.KeyboardButton(text='Профиль'),
            )
            keyboard.add(
                types.KeyboardButton('ℹ️О проекте'), #ℹ️
            )        
            return await bot.send_message(message.from_user.id, '<b>Выберайте нужную кнопку и присупайте к работе :)</b>',reply_markup=keyboard, parse_mode=types.ParseMode.HTML)
        if message.from_user.id != admin_id:
            await message.answer(f"Ответьте на несколько вопросов:\n1) <b>{question_1}</b>", parse_mode=types.ParseMode.HTML) # Приветственное сообщение
            await AnswerUser.answer1.set()


@dp.message_handler(state=AnswerUser.answer1) # Ответ на первый вопрос анкеты
async def answer_1(message: types.Message, state=FSMContext):
    async with state.proxy() as data:
        data["answer1"] = message.text
    await bot.send_message(message.from_user.id, f'2) <b>{question_2}</b>', parse_mode=types.ParseMode.HTML)
    await AnswerUser.answer1.set()
    await AnswerUser.next()

    

@dp.message_handler(state=AnswerUser.answer2) # Ответ на второй вопрос анкеты
async def answer_2(message: types.Message, state=FSMContext):
    db = sqlite3.connect('all_user.db')
    cursor_1 = db.cursor()   
    all_user_db = cursor_1.execute('SELECT id FROM all_user;').fetchall()
    db.commit()
    people_id = message.from_user.id
    user_data = await state.get_data()
    check_user(people_id, user_data['answer1'], message.text)
    
    
    
    async with state.proxy() as data:
        data["answer2"] = message.text
    await bot.send_message(message.from_user.id, f'''Ответы на ваши вопросы:
1) <b>{data['answer1']}</b>
2) <b>{data['answer2']}</b> 
⚡️ <b>Ваша заявка на проверке</b>
Ожидайте ответа <b> Администратора </b>''', parse_mode=types.ParseMode.HTML)
    await bot.send_message('-1001902755730', f'''Ответы на ваши вопросы:
ID: {message.from_user.id}
1) <b>{data['answer1']}</b>
2) <b>{data['answer2']}</b> 
⚡️ <b>Ваша заявка на проверке</b>
Ожидайте ответа <b> Администратора </b>''', parse_mode=types.ParseMode.HTML)
    await AnswerUser.next()

@dp.message_handler(run_really_once=True)
async def message_last_anketa(message: types.Message, state=FSMContext):
    if message.from_user.id == admin_id:
        return await state.finish()
    else:
        user_id_anketa = message.from_user.id
        db = sqlite3.connect('all_user.db')
        cursor_1 = db.cursor()   
        user = cursor_1.execute('SELECT id FROM all_user;').fetchall()
        all_id = [x[0] for x in user]
        if user_id_anketa not in all_id:
            return await bot.send_message(user_id_anketa, '❌ОШИБКА\nВаша анкета находится на проверке\nДождитесь ответа администратора!')
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Causon
Сделайте фильтр и пропишите его в хендлере:

from aiogram.dispatcher.filters import Filter

admins = [12345, 67890]


class IsAdmin(Filter):
    async def check_adm(self, message: types.Message):
        return message.from_user.id in admins


@dp.message_handler(IsAdmin())
async def admin_handler(message: types.Message):
    await message.reply("Это админ")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы