У меня есть код для принятия человека в бота. После того как человек проходит проверку, данные отправляются в базу данных. До принятия пользователя в группу ему при следующих сообщениях в боте выдавалась любая ошибка(по типу нельзя писать в боте до подтверждения анкеты),для обработки этого текста я использую @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Дождитесь ответа администратора!')