нужно использовать машины состояний
я не знаю как через telebot сделать но через aiogram делается так
советую использовать для ботов aiogram
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
import asyncio
import logging
import random
bot = Bot(token='токен')
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class states(StatesGroup):
state0 = State() #состояние когда кнопка еще не нажата
state1 = State() #когда кнопку нажали и надо только чтобы после ответа срабатывал рандомайзер
keyboard = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text='Магический шар')],
[KeyboardButton(text='Пока не хочу')],
],
resize_keyboard=True)
keyboard1 = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text='Stop')],
],
resize_keyboard=True)
@dp.message_handler(commands=['start'], state="*")
async def start_handler(message: types.Message):
await states.state0.set()
await bot.send_message(chat_id=message.chat.id, text=f'Привет, <b>{message.from_user.first_name}</b>!\n Можешь '
f'задавать <b>простые вопросы (да/нет)</b>, а я буду отвечать.', reply_markup=keyboard, parse_mode='html')
a = ['Да','Возможно да','Определенно да','Нет','Определенно нет','Точно нет','Может быть','Наверное','Вероятнее всего',
'Никаких сомнений','Бесспорно','Знаки говорят "ДА"','Знаки говорят "нет"','По моему да','По моему нет']
@dp.message_handler(text='Магический шар', state=states.state0)
async def handler1(message: types.Message):
await states.state1.set() # переходит в состояния где будет срабатывать рандомайзер после ответа
await bot.send_message(chat_id=message.chat.id, text='Задай свой вопрос', reply_markup=keyboard1)
@dp.message_handler(text='Stop', state=states.state1)
async def handler1(message: types.Message):
await states.state0.set() #переходит обратно в состояние где не будет срабатывать рандомайзер после ответа
await bot.send_message(chat_id=message.chat.id, text='Хорошего дня!', reply_markup=keyboard)
@dp.message_handler(state=states.state1) #сюда будут попадать соощения только если кнопка нажата и нужно чтобы срабатывал рандомайзер
async def any_text_handler(message: types.Message):
await bot.send_message(chat_id=message.chat.id, text=random.choice(a)) #срабатывает рандомайзер
await bot.send_message(chat_id=message.chat.id, text='Задай свой вопрос') #повторно отправляет текст
async def main():
logging.basicConfig(level=logging.INFO)
await dp.start_polling()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
тут я улучшил код сделав чтобы можно было постоянно задавать вопросы и бот отвечал на них,
и еще добавил кнопку stop
вот вариант как у вас и было но бот отвечает только после ответа пользователя
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
import asyncio
import logging
import random
bot = Bot(token=токен)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class states(StatesGroup):
state0 = State()
state1 = State()
keyboard = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text='Магический шар')],
[KeyboardButton(text='Пока не хочу')],
],
resize_keyboard=True)
@dp.message_handler(commands=['start'], state="*")
async def start_handler(message: types.Message):
await states.state0.set()
await bot.send_message(chat_id=message.chat.id, text=f'Привет, <b>{message.from_user.first_name}</b>!\n Можешь '
f'задавать <b>простые вопросы (да/нет)</b>, а я буду отвечать.', reply_markup=keyboard, parse_mode='html')
a = ['Да','Возможно да','Определенно да','Нет','Определенно нет','Точно нет','Может быть','Наверное','Вероятнее всего',
'Никаких сомнений','Бесспорно','Знаки говорят "ДА"','Знаки говорят "нет"','По моему да','По моему нет']
@dp.message_handler(text='Магический шар', state=states.state0)
async def handler1(message: types.Message):
await states.state1.set()
await bot.send_message(chat_id=message.chat.id, text='Задай свой вопрос')
@dp.message_handler(state=states.state1)
async def any_text_handler(message: types.Message):
await states.state0.set()
await bot.send_message(chat_id=message.chat.id, text=random.choice(a))
async def main():
logging.basicConfig(level=logging.INFO)
await dp.start_polling()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
спрашивайте если будут какие-то вопросы