All streams
Search
Write a publication
Pull to refresh
1
0
Send message

Кнопки не всегда подходят под задачу, если пишем некую пасхалку\мини-игру в боте, где пользователь присылает какую нибудь глупость боту, или превышает лимит запросов, и бот отыгрывает ситуацию крича в чат что нибудь вроде "я перегрелся, требуется перезагрузка" и бесконечно повторяя это сообщение с определённым интервалом, пока пользователь не напишет что нибудь вроде "перезагрузка", как это ещё реализовать, кроме как через цикл while?
Если не затруднит, дайте пример кода как это можно реализовать

Приветствую
Осваиваю ботостроение, и вот с чем столкнулся
Как сделать FSM персонализированным?
Например у меня есть код(ниже), он запускает цикл при получении от пользователя сообщения с текстом "петля", бот спамит случайными цифрами с интервалом в 1 секунду, раз в 15 секунд просит его остановить, если пользователь напишет боту "остановись", бот прекращает это безобразие о чём уведомляет пользователя, НО!
Если у нас есть 2 пользователя с запущенным циклом, до достаточно одному остановить цикл, чтобы у 2 он тоже прервался, проще говоря, если 2 человека написали боту "петля", а потом один из них отправил боту "остановись", то бот прерывает цикл у обоих, как этого избежать?

class spamloop(StatesGroup):

    spamlooping = State()

   

@HF_router.message(F.text.lower().contains('петля'))

async def loop_step1(message: Message,state: FSMContext):

    global looping

    await message.answer_photo(photo='https://memchik.ru//images/memes/603d2831b1c7e31af5729491.jpg')

    await asyncio.sleep(1)

    await message.answer('СКАЖИ МНЕ ОСТАНОВИТЬСЯ')

    looping = True

    iteration = 1

    await state.set_state(spamloop.spamlooping)

    while looping:        

        iteration = iteration+1

        if iteration % 15 == 0:

            await message.answer('ПОЖАЛУЙСТА СКАЖИ МНЕ ОСТАНОВИТЬСЯ')

        number = random.randint(100000000, 999999999)

        await asyncio.sleep(1)

        if looping == True:

            await message.answer(f'{number}')

    await state.clear()

   

@HF_router.message(spamloop.spamlooping)

async def loop_step2(message: Message, state: FSMContext):

    global looping

    if message.text.lower() == "остановись":

        await state.update_data(name=message.text)

        await message.answer_photo(photo='https://www.meme-arsenal.com/memes/a0867fa07d80080b0dbc828cb58f8017.jpg')

        looping = False    

Приветствую
Осваиваю ботостроение, и вот с чем столкнулся
Как сделать FSM персонализированным?
Например у меня есть код(ниже), он запускает цикл при получении от пользователя сообщения с текстом "петля", бот спамит случайными цифрами с интервалом в 1 секунду, раз в 15 секунд просит его остановить, если пользователь напишет боту "остановись", бот прекращает это безобразие о чём уведомляет пользователя, НО!
Если у нас есть 2 пользователя с запущенным циклом, до достаточно одному остановить цикл, чтобы у 2 он тоже прервался, проще говоря, если 2 человека написали боту "петля", а потом один из них отправил боту "остановись", то бот прерывает цикл у обоих, как этого избежать?

class spamloop(StatesGroup):

    spamlooping = State()

   

@HF_router.message(F.text.lower().contains('петля'))

async def loop_step1(message: Message,state: FSMContext):

    global looping

    await message.answer_photo(photo='https://memchik.ru//images/memes/603d2831b1c7e31af5729491.jpg')

    await asyncio.sleep(1)

    await message.answer('СКАЖИ МНЕ ОСТАНОВИТЬСЯ')

    looping = True

    iteration = 1

    await state.set_state(spamloop.spamlooping)

    while looping:        

        iteration = iteration+1

        if iteration % 15 == 0:

            await message.answer('ПОЖАЛУЙСТА СКАЖИ МНЕ ОСТАНОВИТЬСЯ')

        number = random.randint(100000000, 999999999)

        await asyncio.sleep(1)

        if looping == True:

            await message.answer(f'{number}')

    await state.clear()

   

@HF_router.message(spamloop.spamlooping)

async def loop_step2(message: Message, state: FSMContext):

    global looping

    if message.text.lower() == "остановись":

        await state.update_data(name=message.text)

        await message.answer_photo(photo='https://www.meme-arsenal.com/memes/a0867fa07d80080b0dbc828cb58f8017.jpg')

        looping = False    

Information

Rating
Does not participate
Registered
Activity

Specialization

Fullstack Developer, Application Developer
Junior