Получение данных из сообщения пользователя и запись его в файл
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from datetime import datetime
import pandas as pd
n_dt = datetime.now()
def get_fio(message):
global fio
fio = message.text
f_log = open('Media/Anketa.txt', 'a')
f_log.write(f'\n[{n_dt.day}/{n_dt.month}/{n_dt.year}-{n_dt.hour}:{n_dt.minute}] {message.text}')
f_log.close()
...
#others code
...
#после нажатия кнопки "имя", нужно получить сообщение от пользователя и записать в файл
@dp.message_handler(content_types=['text'])
async def calmenu(message):
if message.text == 'Имя':
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
await bot.send_message(message.chat.id,'\n????⚜️⚜️⚜️????\nЗапишите своë имя.\n\n?Поле обязательно к заполнению!\n\n????⚜️⚜️⚜️????', reply_markup=markup)
async def message_input_step(message: types.Message):
message = message.text
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton('Сохранить')
markup.row(item1)
await bot.send_message(message.from_user.id, f'?Нажмите кнопку "Сохранить"\nи я запишу ваше имя:\n⚜️{message.text}⚜️', reply_markup=markup)
get_fio(message)
Ответы (1 шт):
Автор решения: cool rage
→ Ссылка
Такое ощущение что писал не внимательный человек. Ошибка на ошибке и ошибкой погоняет.
- утерян декоратор
@dp.message_handler()передasync def message_input_step(message: types.Message):, - две одинаковые переменные в
message_input_step() - не правильная последовательность вызова
message_input_step() - Потерянное состояние
confirm_save = State()для того чтобы кнопка заработала и был завершающий этап сохранения имени в файл.
Исправил все, добавил создание директории(если нету), воткнул машину состояний. Исправленный код:
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from datetime import datetime
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import os
n_dt = datetime.now()
bot = Bot(token='6250766662:AAG8OkxQ_0X7LT2sFrpBBWtlVJNx99FdlVE')
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
fio = ''
class UserInput(StatesGroup):
message_input_step = State()
confirm_save = State()
def get_fio(message):
global fio
fio = message.text
f_log = open('Media/Anketa.txt', 'a')
f_log.write(f'\n[{n_dt.day}/{n_dt.month}/{n_dt.year}-{n_dt.hour}:{n_dt.minute}] {message.text}')
f_log.close()
@dp.message_handler(content_types=['text'])
async def calmenu(message):
if message.text == 'Имя':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
await bot.send_message(message.chat.id, '\n????⚜️⚜️⚜️????\nЗапишите своë имя.\n\n?Поле обязательно к заполнению!\n\n????⚜️⚜️⚜️????', reply_markup=markup)
await UserInput.message_input_step.set()
@dp.message_handler(state=UserInput.message_input_step)
async def message_input_handler(message: types.Message, state: FSMContext):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton('Сохранить')
markup.row(item1)
await bot.send_message(message.from_user.id, f'?Нажмите кнопку "Сохранить"\nи я запишу ваше имя:\n⚜️{message.text}⚜️', reply_markup=markup)
# сохраняем имя в глобальную переменную
global fio
fio = message.text
# устанавливаем состояние подтверждения
await UserInput.confirm_save.set()
@dp.message_handler(state=UserInput.confirm_save, content_types=types.ContentTypes.TEXT)
async def confirm_save_handler(message: types.Message, state: FSMContext):
if message.text == 'Сохранить':
if not os.path.exists('Media'):
os.makedirs('Media')
f_log = open('Media/Anketa.txt', 'a')
f_log.write(f'\n[{n_dt.day}/{n_dt.month}/{n_dt.year}-{n_dt.hour}:{n_dt.minute}] {fio}')
f_log.close()
await bot.send_message(message.from_user.id, "Ваше имя сохранено.")
else:
await bot.send_message(message.from_user.id, "Сохранение отменено.")
await state.finish()
if __name__ == '__main__':
executor.start_polling(dp)