Уведомления

Группа в Telegram: @pythonsu

#1 Июль 27, 2020 14:21:03

kolyaya
Зарегистрирован: 2020-07-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Не выполняется часть кода отвечающая за слежение за изменениями в папке.

Добрый день.
Система Windows10
Python 3.8.5

Пытаюсь объеденить две программы, нужно что бы бот при появлении нового файла в папке отправлял его содержимого в телеграмм.
При таком коде не выполняется часть кода отвечающая за слежение за изменениями в папке.

 import telebot
import config
import random
from telebot import types
import sys
import time
#import logging
from watchdog.observers import Observer
#from watchdog.events import LoggingEventHandler
from watchdog.events import FileSystemEventHandler
bot = telebot.TeleBot(config.TOKEN)
with open("test.txt") as file:
    rline = file.read()
@bot.message_handler(content_types=['text'])
def lalala(message):
    if message.chat.type == 'private':
        if message.text == '🎲 Рандомное число':
            bot.send_message(message.chat.id, str(rline))
        elif message.text == '😊 Как дела?':
 
            markup = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
            item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')
 
            markup.add(item1, item2)
 
            bot.send_message(message.chat.id, 'Отлично, сам как?', reply_markup=markup)
        else:
            bot.send_message(message.chat.id, 'Я не знаю что ответить 😢')
 
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'good':
                bot.send_message(call.message.chat.id, 'Вот и отличненько 😊')
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Бывает 😢')
 
            # remove inline buttons
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="😊 Как дела?",
                reply_markup=None)
 
            # show alert
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="ЭТО ТЕСТОВОЕ УВЕДОМЛЕНИЕ!!11")
    except Exception as e:
        print(repr(e))
# RUN
bot.polling(none_stop=True)
class EventHandler(FileSystemEventHandler):
    # вызывается на событие создания файла или директории
    def on_created(self, event):
        bot.send_message(message.chat.id, str(rline))
    
    # вызывается на событие модификации файла или директории
    def on_modified(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие удаления файла или директории
    def on_deleted(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие перемещения\переименования файла или директории
    def on_moved(self, event):
        print(event.event_type,event.src_path,event.dest_path)
 
 
if __name__ == "__main__":
    #logging.basicConfig(level=logging.INFO,
    #                    format='%(asctime)s - %(message)s',
    #                    datefmt='%Y-%m-%d %H:%M:%S')
    
    path = r"C:\Work\export" # отслеживаемая директория с нужным файлом
    event_handler = EventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

Офлайн

#2 Июль 27, 2020 14:58:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не выполняется часть кода отвечающая за слежение за изменениями в папке.

 @bot.callback_query_handler(func=lambda call: True)  # !!!!!
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'good':
                bot.send_message(call.message.chat.id, 'Вот и отличненько 😊')
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Бывает 😢')
 
            # remove inline buttons
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="😊 Как дела?",
                reply_markup=None)
 
            # show alert
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="ЭТО ТЕСТОВОЕ УВЕДОМЛЕНИЕ!!11")
    except Exception as e:
        print(repr(e))
# RUN
bot.polling(none_stop=True)  # !!!!!
class EventHandler(FileSystemEventHandler):
    # вызывается на событие создания файла или директории
    def on_created(self, event):
        bot.send_message(message.chat.id, str(rline))
    
    # вызывается на событие модификации файла или директории
    def on_modified(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие удаления файла или директории
    def on_deleted(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие перемещения\переименования файла или директории
    def on_moved(self, event):
        print(event.event_type,event.src_path,event.dest_path)

Я пометил две строки знаками # !!!!!
попытайтесь найти отличие



Офлайн

#3 Июль 27, 2020 20:07:25

kolyaya
Зарегистрирован: 2020-07-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Не выполняется часть кода отвечающая за слежение за изменениями в папке.

Переписал код под себя

 import telebot
import config
import sys
import time
#import logging
from watchdog.observers import Observer
#from watchdog.events import LoggingEventHandler
from watchdog.events import FileSystemEventHandler
bot = telebot.TeleBot(config.TOKEN)
#with open("test.txt") as file:
#    rline = file.read()
class EventHandler(FileSystemEventHandler):
    # вызывается на событие создания файла или директории
    def on_created(self, event):
        nfile = event.src_path
        #nfile = nfile.replace('\\\\','\\')
        with open(nfile, "r") as file:
            rline = file.read()
        print(str)
        bot.send_message(id, rline)
if __name__ == "__main__":
    #logging.basicConfig(level=logging.INFO,
    #                    format='%(asctime)s - %(message)s',
    #                    datefmt='%Y-%m-%d %H:%M:%S')
    
    path = r"C:\Work\export" # отслеживаемая директория с нужным файлом
    event_handler = EventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
Проблема с путем файла.
Exception has occurred: FileNotFoundError
No such file or directory: ‘C:\\Work\\export\\121.txt’
Путь нового файла взял так
 nfile = event.src_path
Но как заменить \\ на \
#nfile = nfile.replace('\\\\','\\') не получается ((

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version