Какие есть варианты того чтобы другой пользователь не мог нажимать на кнопки пользователя 1 в аиограм. Например пользователь 1 вызвал кнопки а пользователь2 хочет кликнуть как мне пресекать его попытки
Кинь первого в состояние а второго не кидай и обрабатывать только тех кто в состоянии --- Сообщение объединено с предыдущим 4 янв 2025 ChatGPT сделай помер fms aiogram где будет кнопка но один из пользователь будет в состоянии ее нажать что бы она обработала а второй нет
Привет, ЛевыйТип! Конечно, могу помочь с примером. Вот простой пример использования Finite State Machine (FSM) в aiogram, где только один пользователь может нажать на кнопку и получить обработку: from aiogram import Bot, Dispatcher, types from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.utils import executor API_TOKEN = 'YOUR_BOT_TOKEN_HERE' bot = Bot(token=API_TOKEN) storage = MemoryStorage() dp = Dispatcher(bot, storage=storage) # Определяем состояния class Form(StatesGroup): waiting_for_button_click = State() # Команда /start @dp.message_handler(commands='start') async def start_command(message: types.Message): await message.answer("Привет! Нажми на кнопку, чтобы продолжить.") await Form.waiting_for_button_click.set() # Обработчик кнопки @dp.message_handler(state=Form.waiting_for_button_click) async def button_click_handler(message: types.Message, state: FSMContext): if message.from_user.id == 123456789: # Замените на ID пользователя, который может нажимать кнопку await message.answer("Кнопка нажата!") await state.finish() else: await message.answer("Извините, вы не можете нажать эту кнопку.") if __name__ == '__main__': executor.start_polling(dp, skip_updates=True) Python from aiogram import Bot, Dispatcher, types from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.utils import executor API_TOKEN = 'YOUR_BOT_TOKEN_HERE' bot = Bot(token=API_TOKEN) storage = MemoryStorage() dp = Dispatcher(bot, storage=storage) # Определяем состояния class Form(StatesGroup): waiting_for_button_click = State() # Команда /start @dp.message_handler(commands='start') async def start_command(message: types.Message): await message.answer("Привет! Нажми на кнопку, чтобы продолжить.") await Form.waiting_for_button_click.set() # Обработчик кнопки @dp.message_handler(state=Form.waiting_for_button_click) async def button_click_handler(message: types.Message, state: FSMContext): if message.from_user.id == 123456789: # Замените на ID пользователя, который может нажимать кнопку await message.answer("Кнопка нажата!") await state.finish() else: await message.answer("Извините, вы не можете нажать эту кнопку.") if __name__ == '__main__': executor.start_polling(dp, skip_updates=True) В этом примере, только пользователь с определённым ID (замените `123456789` на нужный ID) может нажать на кнопку и получить обработку. Все остальные пользователи получат сообщение о том, что они не могут нажать на кнопку. Если у тебя есть ещё вопросы или нужно что-то уточнить, дай знать!
krafti777, Стейт не самая лучшая штука, для этого, лучше всего в cb дате сохранять или брать из сообщения
Если актуально то просто при генерации кнопки меняешь колбек на callback_data = "{твойколбек}:{idтипочка}" А в хендлере пишешь через свифт если есть колбек то выполняет функцию а функция сплитит колбек дату на 2 части по : и потом просто сравнивать заспличиный результат и id Типа который вызвал хендлер