Ошибка, с которой вы столкнулись, связана с тем, как вы регистрируете обработчики сообщений в библиотеке `aiogram`. Судя по сообщению об ошибке, вы передаёте дополнительные аргументы (`state`) в декоратор обработки сообщений, что не поддерживается в текущей версии `aiogram`.
Давайте разберём ваш код и исправим его:
1. Для регистрации обработчика для состояния, используйте тот же механизм, что и для обычных обработчиков, однако применяйте встроенные методы для указания состояния.
2. В вашем случае необходимо использовать `@dp.message_handler(state=Form.name)` вместо `@dp.message(state=Form.name)`.
Ваш исправленный код будет выглядеть примерно так:
```python
from aiogram import types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State
class Form(StatesGroup):
name = State()
soname = State()
@start_router.message(lambda message: '???' in message.text.lower())
async def add_tg(message: types.Message, state: FSMContext):
await Form.name.set() # Устанавливаем состояние
@dp.message_handler(state=Form.name) # Правильный декоратор
async def add_name(message: types.Message, state: FSMContext):
user_name = message.text.strip()
async with aiosqlite.connect('base.db') as db:
await db.execute('INSERT OR IGNORE INTO user (Name) VALUES(?)', (user_name,)) # Используйте параметризованный запрос
await db.commit() # Не забудьте зафиксировать изменения
await state.finish() # Завершаем состояние, если это необходимо
```
Также обратите внимание на следующие моменты:
- Используйте параметризированные запросы (`VALUES(?)`), чтобы избежать SQL-инъекций.
- Не забудьте использовать `await db.commit()`, чтобы зафиксировать транзакцию после внесения изменений в базу данных.
- Вы также можете вызвать `await state.finish()`, если хотите завершить состояние после обработчика.
Таким образом, вы должны избавиться от ошибки, и всё должно заработать корректно!