Как сделать, чтобы команда в aiogram заработала в боте?
Хочу написать бота и мне нужно, чтобы после ввода пароля срабатывала команда /number. После ввода этой команды человек будет вводить номер телефона и программа будет уже обрабатывать его
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State
import config
TOKEN = "mytoken"
bot = Bot(token=TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class FSMInputName(StatesGroup):
name = State()
@dp.message_handler(commands=["start"])
async def process_start_command(message: types.Message):
await message.reply("Чтобы войти, введите команду /password")
@dp.message_handler(commands=["password"])
async def cmd_pass(message: types.Message):
await message.answer("Введите пароль")
await FSMInputName.name.set()
@dp.message_handler(state=FSMInputName.name)
async def state_pass(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['password'] = message.text
if message.text == "hkpo123":
await message.answer("Введите команду /number, чтобы ввести номер клиента")
@dp.message_handler(commands=["number"])
async def cmd_num(message1: types.Message):
await message1.answer("Введите номер")
await FSMInputName.name.set()
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Ответы (1 шт):
Автор решения: ZxNuClear
→ Ссылка
Проверьте, в таком виде должен получиться желаемый результат. Команда /number была убрана и получение номера перенесено в FSM
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State
import config
TOKEN = "mytoken"
bot = Bot(token=TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class FSMInputName(StatesGroup):
password = State()
phone = State()
@dp.message_handler(commands=["start"])
async def process_start_command(message: types.Message):
await message.reply("Чтобы войти, введите команду /password")
@dp.message_handler(commands=["password"])
async def cmd_pass(message: types.Message):
await FSMInputName.password.set()
await message.answer("Введите пароль")
@dp.message_handler(state=FSMInputName.password)
async def state_pass(message: types.Message, state: FSMContext):
if message.text == "hkpo123":
async with state.proxy() as data:
data['password'] = message.text
await FSMInputName.phone.set()
await message.answer("Введите номер клиента")
else:
await message.answer("Вы ввели неверный пароль. Введите команду /password, чтобы попробовать еще раз")
await state.finish()
@dp.message_handler(state=FSMInputName.phone)
async def cmd_phone(message: types.Message, state: FSMContext):
await message.answer(f"Вы ввели номер {message.text}") # Тут вы можете обрабатывать номер телефона
await state.finish()
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)