Задать вопрос
@why2

Time.sleep() Как поставить значение пользователя?

Бот в тг. Отслеживает курс доллара и отправляет сообщения об долларе (упал, вырос). Не понимаю как сделать задержку программы от пользователя. Ввод пользователя чере inline keyboard: 606610aaa9a4a436075531.png
код:
elif message.text == ' Track dollar ':
			#keyboard inline
			markup = types.InlineKeyboardMarkup(row_width = 2)
			kb1 = types.InlineKeyboardButton('10 min', callback_data = '10')
			kb2 = types.InlineKeyboardButton('1 horse', callback_data = '1h')
			kb3 = types.InlineKeyboardButton('5 horse', callback_data = '10h')
			markup.add(kb1, kb2, kb3)
			#send message
			bot.send_message(message.chat.id, ' Now I am tracking the dollar. ⚡️ \n   How long does it take for me to receive notifications❓ \n  \n                                            ', reply_markup = markup)

			xt()
			
			while True:
				
				if rate == False:	
					break
				
				full_page1 = requests.get(url, headers = headers)
				soup1 = BeautifulSoup(full_page1.content, 'html.parser')
				convert1 = soup1.findAll('span', {'class': 'DFlfde', 'class': 'SwHCTb', 'data-precision': 2})
				currency1 = convert1[0].text.replace(',','.')
				cur1 = float(currency1)
				
				
				inline()
				
				if rate == False:	
					break
				

				
				

				#parsing()
				
				full_page = requests.get(url, headers = headers)
				soup = BeautifulSoup(full_page.content, 'html.parser')
				convert = soup.findAll('span', {'class': 'DFlfde', 'class': 'SwHCTb', 'data-precision': 2})
				currency = convert[0].text.replace(',','.')
				cur = float(currency)
		
				
				if cur > cur1:
					bot.send_message(message.chat.id, ' Course increased: ' + str(cur) + ' ')
				
				elif cur < cur1:
					bot.send_message(message.chat.id, ' Course lowered: ' + str(cur) + ' ')
				elif cur == cur1:
					bot.send_message(message.chat.id, '⚖️ Course has not changed ' + str(cur) + ' 〽️')

@bot.callback_query_handler(func = lambda call: True)
def inline (call):
	if call.message:
		if call.data == '10':
			time.sleep(10)


		elif call.data == '1h':
			time.sleep(30)	
		
		elif call.data == '10h':

			
			time.sleep(60)
  • Вопрос задан
  • 845 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
@Alexa2007
А что значит
1 лошадь
5 лошадь

kb2 = types.InlineKeyboardButton('1 horse', callback_data = '1h')
      kb3 = types.InlineKeyboardButton('5 horse', callback_data = '10h')


def inline (call):
  if call.message:
    if call.data == '10':
      time.sleep(10)

Ты так остановишь всего бота. Необходимо создать базу, а в неё записывать юзер, время старта паузы, длинна паузы.
А вторым циклом сравнивать нынешнее время с данными из базы. И в результате небольшой математики отпрвлять сообщение юзеру из базы внужное время. И работать это будет на компе или впс. Бесплатные хостинги или не запустят код или за пару часов потратишь лимит на день.

Вот пример двух потоков в боте:
import telebot
import time
import threading
API_TOKEN = '11111111111111111111111111111111'
class my_bot(telebot.TeleBot):
    def loop_poop(self):
        while True:
            print(time.ctime())
            time.sleep(1)

    def start_action(self):
        thread = threading.Thread(target=self.loop_poop)
        thread.start()

bot = my_bot(token = API_TOKEN, threaded=False)

@bot.message_handler(commands=['start'])
def wellcome(message):
    if message.chat.type == 'private':
        bot.send_message(message.chat.id,'Hello')
bot.start_action()
bot.polling()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@SashaN69
Школота
рекомендую использовать asyncio.sleep чтобы не стопить всего бота
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽