Как реализовать остановку бесконечного цикла функции в телеграм боте на питоне?
Я сделал бота который по текстовому запросу пользователя делает поиск в твиттере и только что опубликованные посты отправляет в телеграм бота. Очевидно для такого парсинга у меня используется бесконечный цикл. Я решил закинуть свою программу на сервер, чтобы каждый мог пользоваться этим ботом в телеграме. Столкнулся с проблемой что не знаю как остановить бота внутри самого телеграма, потому что при определенных запросах он сильно спамит.
Условный пример программы:
@bot.message_handler(commands=['start'])
def hello_bro(message):
bot.send_message(message.chat.id, 'Привет, ' + message.from_user.username + "!, напиши пару ключевых слов для поиска твитов.")
@bot.message_handler(content_types=["text"])
def search(message):
здесь фрагмент кода на селениуме
tweet = 'новый найденный твит'
while True:
bot.send_message(uid,
f'User: {tweet[0]}\n Handle: {tweet[1]} \n PostDate: {tweet[2]} \n\n TweetText:\n {tweet[3]} \n')
@bot.message_handler(commands=['stop'])
def stop_command(message):
print("Бот остановлен")
bot.polling(none_stop=True, interval=0)
Ответы (1 шт):
Тебе бы сделать отдельную функцию, что-то вроде
def check():
переменные_которые необходимы для проверки, например что статья найдена
if not (условие переменной):
return True
и после return True продолжаешь свой цикл, должно помочь, у меня подобная ситуация и она работает. По итогу должно быть так, но уже в теле цикла:
bot.send_message(uid,
f'User: {tweet[0]}\n Handle: {tweet[1]} \n PostDate: {tweet[2]} \n\n TweetText:\n {tweet[3]} \n')
if check(): break
для наглядности мой тебе код, там по факту только свои значения необходимые подставлять и все
import win32api
import time
import pyautogui
while True:
l = win32api.GetKeyState(0x01)
r = win32api.GetKeyState(0x02)
print(l)
if l < 0 and r < 0:
for i in range(1):
def check():
global l, r
l = win32api.GetKeyState(0x01)
r = win32api.GetKeyState(0x02)
print(l)
if not (l < 0 and r < 0):
return True
pyautogui.moveRel(0, 50)
if check(): break
time.sleep(0.06)
pyautogui.moveRel(0, 50)
if check(): break
time.sleep(0.06)
pyautogui.moveRel(0, 50)
if check(): break
time.sleep(0.06)
pyautogui.moveRel(0, 50)
if check(): break
time.sleep(0.06)
pyautogui.moveRel(0, 10)
if check(): break
time.sleep(0.06)
pyautogui.moveRel(0, 10)
if check(): break
time.sleep(0.06)
pyautogui.moveRel(0, 1)