@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)
  • Вопрос задан
  • 793 просмотра
Решения вопроса 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 чтобы не стопить всего бота
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы