Чтобы ограничить ввод в Telegram боте и разрешить только цифры или только буквы в ответе на вопрос, можно использовать валидацию сообщений в зависимости от их содержания. Например, когда бот ожидает определённый ответ (только цифры или только буквы), он проверяет ввод пользователя, и если ввод не соответствует правилам, бот отправляет сообщение с предупреждением.
Вот пример кода на Python с использованием библиотеки `python-telegram-bot`, где бот проверяет, что ввод содержит только цифры или только буквы:
```python
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
# Функция для обработки стартовой команды
def start(update: Update, context: CallbackContext) -> None:
update.message.reply_text("Введите ваш возраст (только цифры):")
context.user_data['expecting'] = 'digits'
# Функция для обработки текста от пользователя
def handle_message(update: Update, context: CallbackContext) -> None:
user_input = update.message.text
# Проверка, ожидаем ли мы ввод цифр
if context.user_data.get('expecting') == 'digits':
if user_input.isdigit():
update.message.reply_text(f"Ваш возраст: {user_input}")
context.user_data['expecting'] = None # Сбрасываем ожидание
else:
update.message.reply_text("Пожалуйста, введите только цифры!")
# Проверка, ожидаем ли мы ввод букв
elif context.user_data.get('expecting') == 'letters':
if user_input.isalpha():
update.message.reply_text(f"Ваше имя: {user_input}")
context.user_data['expecting'] = None # Сбрасываем ожидание
else:
update.message.reply_text("Пожалуйста, введите только буквы!")
# Команда для запроса имени (ожидаем буквы)
def ask_name(update: Update, context: CallbackContext) -> None:
update.message.reply_text("Введите ваше имя (только буквы):")
context.user_data['expecting'] = 'letters'
def main() -> None:
updater = Updater("YOUR_TELEGRAM_BOT_TOKEN")
dispatcher = updater.dispatcher
# Обработчики команд
dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("name", ask_name))
# Обработчик текстовых сообщений
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message))
# Запуск бота
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
```
### Что происходит:
1. Бот задаёт вопросы и сохраняет состояние ожидания (цифры или буквы) в `context.user_data`.
2. Когда пользователь вводит ответ, бот проверяет, соответствует ли ответ ожидаемому типу данных.
- Если бот ожидает цифры, а пользователь вводит буквы или другие символы, бот сообщает об ошибке и просит ввести только цифры.
- Если бот ожидает буквы, а пользователь вводит цифры, бот также сообщает об ошибке.
3. После успешного ввода состояние ожидания сбрасывается.
Этот код можно расширить для проверки других условий или типов ввода.