как вывести определенному пользователю то, что другой юзер написал в тг бота?
Сделал бота с FSM, но не понимаю как вывести своему другу то, что другой напишет в бота, подскажите пожалуйста.
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram import types, Bot, Dispatcher, executor
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
TOKEN = '*******'
bot = Bot(TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class Shop(StatesGroup):
step1 = State()
step2 = State()
step3 = State()
step4 = State()
@dp.message_handler(commands=['start'], state=None)
async def start(message: types.Message):
await bot.send_message(message.chat.id, 'Здравствуйте, какой продукт вы хотите преобрести?')
await Shop.step1.set()
@dp.message_handler(state=Shop.step1)
async def step1(message: types.Message, state: FSMContext):
item = message.text
await state.update_data(
{
'item': item
}
)
await message.answer('В каком количестве?')
await Shop.next()
@dp.message_handler(state=Shop.step2)
async def step2(message: types.Message, state: FSMContext):
data = await state.get_data()
item = data.get
await message.answer('К какому времени?')
await Shop.next()
@dp.message_handler(state=Shop.step3)
async def step3(message: types.Message, state: FSMContext):
data = await state.get_data()
item = data.get
await state.finish()
await message.answer('Ваш заказ отправлен.')
if __name__ == '__main__':
executor.start_polling(dp)
Ответы (1 шт):
Автор решения: Pet Linux
→ Ссылка
Для того, чтобы узнать ID пользователя, можно воспользоваться уже готовыми ботами для этого, например @getmy_idbot.
Этого бота необходимо запускать из того Telegram-аккаунта, куда вы будете пересылать сообщения.
Итак, копируете ID пользователя из того бота и вставляете в переменную в Python.
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram import types, Bot, Dispatcher, executor
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
TOKEN = 'токен бота'
id = "ID ПОЛЬЗОВАТЕЛЯ ЗДЕСЬ"
bot = Bot(TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class Shop(StatesGroup):
step1 = State()
step2 = State()
step3 = State()
step4 = State()
@dp.message_handler(commands=['start'], state=None)
async def start(message: types.Message):
await bot.send_message(message.chat.id, 'Здравствуйте, какой продукт вы хотите преобрести?')
await Shop.step1.set()
@dp.message_handler(state=Shop.step1)
async def step1(message: types.Message, state: FSMContext):
item = message.text
await state.update_data(
{
'item': item
}
)
await message.answer('В каком количестве?')
await Shop.next()
@dp.message_handler(state=Shop.step2)
async def step2(message: types.Message, state: FSMContext):
# записываем количество заказа в state
count = message.text
await state.update_data(
{
'count': count
}
)
await message.answer('К какому времени?')
await Shop.next()
@dp.message_handler(state=Shop.step3)
async def step3(message: types.Message, state: FSMContext):
# получаем данные заказа
data = await state.get_data()
item = data.get("item")
count = data.get("count")
time = message.text
await state.update_data(
{
'time': time
}
)
await state.finish()
await message.answer('Ваш заказ отправлен.')
# формируем текст сообщения владельцу
# вы можете написать в переменную абсолютно любой текст, который вы хотите
orderText = f"""
Пользователь {message.from_user.full_name} заказывает {item} в количестве {count} шт. ко времени {time}.
"""
# отправляем текст владельцу
# тут используется переменная `id` - как раз то, что вы узнали на предыдущем этапе
await bot.send_message(id, orderText)
if __name__ == '__main__':
executor.start_polling(dp)
Вы можете свободно экспериментировать с этим кодом.