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

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

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
18 янв. 2025, в 10:04
50000 руб./за проект
18 янв. 2025, в 09:18
5500 руб./за проект
18 янв. 2025, в 07:20
50000 руб./за проект