Задать вопрос
  • Как отправить данные при нажатии кнопки в телеграм-боте python?

    @del4pp
    Потому что у вас в коде есть вечный цыкл (While True).
    Если хотите чтобы работало и то и то - вам нужно создать функцию, в нее поместить код
    ###################################################
    opc = OpenOPC.client()
    servers = opc.servers()
    opc.connect("Owen.OPCNet.DA.1")
    print("Удачное подключение к " + servers[0])
    #--------------------------------------------------------------------------------------------------------#
    tagsValue = [];
    # Тр-ра Верх
    tagsValue.append(opc.list("COM4.TRM_202(adr=104)T_слой_Ср_р-ра.Оперативные параметры")[3])
    
    while True:
        print("-----------------------------------------------------------------------------------------")
        try:
            ############################################################
            # Проверка температур слоя реактора
            val = opc.read(tagsValue, update=1, include_error=True)
            if int(val[0][1]) > (react_temp + r_tmp_lim) or int(val[1][1]) > (react_temp + r_tmp_lim) or int(val[2][1]) > (react_temp + r_tmp_lim):
                try:
                    #print("here")
                    send_telegram("Слой реактора перегрет до {0:.2f} {1:.2f} {2:.2f} С".format(val[0][1], val[1][1], val[2][1]))
                except:
                    print("Включите VPN (test 1)")
            if int(val[0][1]) < (react_temp - r_tmp_lim) or int(val[1][1]) < (react_temp - r_tmp_lim) or int(val[2][1]) < (react_temp - r_tmp_lim):
        except:
            print("error read item")
        time.sleep(20)
    opc.close()
    #---------------------------#


    и запустить функцию в потоке (Потоки)

    Код выполняеться сверху в низ, и без бот.полинга код останавливаеться на вечном цыкле, если используете бот.полинг - программа срабатывает на хендлер
    Ответ написан
    6 комментариев
  • Как правильно написать кнопочный бот в Телеграм на Python?

    @del4pp
    Как вариант
    if message.text == 'A':
    bot.register_next_step_hendler(message, функция1)
    elif message.text == 'B':
    bot.register_next_step_hendler(message, функция2)

    И т.д

    Ещё вы используете .lower() что приводит строку в нижний регистр, и потом сравнтваете с буквой верхнего регистра.
    Так делать не хорошо.
    Ответ написан
    Комментировать
  • Встроенная ссылка?

    @del4pp
    bot.send_message(message.chat.id, 'добавить закупкиэту?\n', parse_mode='html', disable_web_page_preview=True)
    Ответ написан
  • Как отправить сообщение с фото в боте тг?

    @del4pp
    img = open('путь к картинке', 'rb')
    bot.send_photo(id, photo=img, caption='подпись')
    img.close()
    Ответ написан
    1 комментарий
  • Как определить, что боту прислали файл?

    @del4pp
    Если хотите именно фото

    @bot.message_handler(content_types=["photo"])
    def photo_message(msg):
          *ваш код обработки фото *
    Ответ написан
    Комментировать
  • Как мне сделать обновление переменной/функции?

    @del4pp
    Плохо гуглил :)

    Тык

    А на счёт проверки, самое тупое решение, чтобы не думать - создать функцию в которой будет переменная из старой информацией и в цыкле While True каждую секунду будем получать данные с буфера и if'ом проверять одинаковы ли они
    Ответ написан
  • Постоянно падает телеграмм бот, как решить?

    @del4pp
    Попробуй в в конце вместо бот.полинг это

    if __name__ == '__main__':
        while True:
            try:
                bot.polling(none_stop=True)
            except Exception as e:
                time.sleep(3)
                print(e)


    Тогда даже когда он упадет - через 3 сек запуститься опять, а ошибку принт выведет в консоль
    Ответ написан
    3 комментария
  • Как отправить фото через telebot?

    @del4pp
    -1 элемент это последний (часто когда не знают длину списка и хотят взять последний - пишуть именно минус один),

    Отправить фото через telebot:

    photo = open('путь_к_фото', 'rb')
    bot.send_photo(chat_id, photo)


    Также у вас декоратор
    @bot.message_handler(content_types=['photo'])
    Он работает с фотографиями которые пользователи отправили боту.
    Ответ написан
    1 комментарий
  • Как сделать поиск горячих фраз с микрофона python?

    @del4pp
    Почти что первая ссылка в гугле.
    r = sr.Recognizer()
    
    	with sr.Microphone() as source:
    		print('Можна говорити')
    		r.pause_threshold = 1
    		r.adjust_for_ambient_noise(source, duration=1)
    		audio = r.listen(source)
    
    	try:
    		result = r.recognize_google(audio, language="uk-UA").lower()
    		print("Ви сказали: " + result)
    	except sr.UnknownValueError:
    		result = cmmd()
    	return zadanie


    Это все в вечный цыкл чтобы постоянно работало, потом масив ключевых слов и функцию проверки на наличие ключевых слов
    Ответ написан
    Комментировать
  • Как привязать переменную к чату Telebot?

    @del4pp
    у вас эта переменная уже есть :)
    В каждого пользователя уникальный чатайди (message.chat.id)
    Ее можно сохранять в базу данных (как и другую информацию о пользователе) и после этого написать функцию котораю будет работать в соответствии с нужными чат-айди так как вы только заходите
    Ответ написан
    Комментировать
  • Как сделать парсинг почты на python?

    @del4pp
    На пайтоне есть библиотека imaplib, которая позволяет получать письма с вашего ящика через IMAP и парсить их . Ниже мой код который я создавал для себя для такой же задачи.

    def read(sender_of_interest=None):
        imap = imaplib.IMAP4_SSL("imap.gmail.com", 993)
        imap.login('Почта', 'пароль')
        imap.select('INBOX')
        if sender_of_interest:
            status, response = imap.uid('search', None, 'UNSEEN', 'FROM {0}'.format(sender_of_interest))
        else:
            status, response = imap.uid('search', None, 'UNSEEN')
        if status == 'OK':
            unread_msg_nums = response[0].split()
        else:
            unread_msg_nums = []
        data_list = []
        for e_id in unread_msg_nums:
            e_id = e_id.decode('utf-8')
            _, response = imap.uid('fetch', e_id, '(RFC822)')
            html = response[0][1].decode('utf-8')
            email_message = email.message_from_string(html)
            data_list.append(email_message.get_payload())
        for elem in data_list:
            clean_html(elem)


    а дальше все просто:
    if "ключевое слово" in массив_с_сообщениями[индекс сообщения]:
    ...то что надо сделать если ключевое слово найдено.

    ну и в цыкле понятное дело
    Ответ написан
    Комментировать