@d3Ka

Как остановить выполнение команды с циклом через другую команду либо текст в pytelegrambotAPI?

Мне нужно остановить цикличное выполнение команды в telebot другой командой или определенным текстом.
код:

@bot.message_handler(commands=['soska'])
def daynney(message):
    while True:
        bot.send_message(message.chat.id, 'АРАБСКАЯ НОООЧЬ!')
        if message.text == 'sto':
            break
        sleep(1)
bot.polling()

Но он не останавливает цикл,
  • Вопрос задан
  • 1866 просмотров
Решения вопроса 1
@ya_ne_znau
не остараливает, поскольку ваш обработчик уже работает над сообщением с командой, в котором будет текст из команды. В вашем примере можно попробовать на каждое сообщение в цикле регистрировать обработчик:
bot.register_next_step_handler(bot.send_message(chat_id, "123"), break_this)
и соответственно в функции break_this реализовать прерывание цикла, например через флаги. Можно создать базу пользователей с полем, отвечающим за остановку цикла.
from telebot import types

UserId = int  # тайпхинт

class User:
    def __init__(self, user_id: UserId):
        self.user_id = user_id  # неплохо бы property
        self.is_spamming = False  # везде

users: dict[UserId, User] = {}

def stop_spam(message: types.Message):
    users[message.from_user.id].is_spamming = False

@bot.message_handler(<>)
def spam(message: types.Message):
    user = users[message.from_user.id]
    user.is_spamming = True
    while user.is_spamming:
        bot.register_next_step_handler(bot.send_message(<>), stop_spam)  # как-то так
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@d3Ka Автор вопроса
Извините за потраченное время. Я думал это будет просто и поетому попросил помощи в сообщениях, мне нужно с фотографиями...
вот код:
@bot.message_handler(commands=['sosiska'])
def daynneya(message):

    
    while (ba): 
        
        
        monitor = {
            "left": x,
            "top": y,
            "width": 1,
            "height": 1,
        }
        
        img = m.mss().grab(monitor)
        
        img_arr = np.array(img)
        sleep(1)

        monit = {
            "left": x,
            "top": y,
            "width": 1,
            "height": 1,
        }
       
        im = m.mss().grab(monit)
        
        im_arr = np.array(im)
        

        if np.array_equal(img_arr, im_arr) == False:
            snapshot = ImageGrab.grab(bbox=(10,10,1910,1070))
            save_path = "C:\\abeme\\imo.png"
            snapshot.save(save_path)
            photor1 = open('C:\\abeme\\imo.png', 'rb')
            bot.send_photo(message.chat.id, photo=photor1)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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