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

kolyaya

Новичок
Пользователь
Июл 27, 2020
1
0
1
Добрый день.
Система Windows10
Python 3.8.5

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

Python:
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()
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
нужно что бы бот при появлении нового файла в папке отправлял его содержимого в телеграмм
Вот пример:
Python:
import telebot
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

import config

bot = telebot.TeleBot(config.TOKEN)
path = r"C:\\Work\\export"  # отслеживаемая директория с нужным файлом


def get_file(filepath):
    with open(filepath, 'rb') as f:
        return f.read()


class EventHandler(FileSystemEventHandler):
    def __init__(self, chat_id):
        self.chat_id = chat_id

    # вызывается на событие создания файла или директории
    def on_created(self, event):
        bot.send_message(self.chat_id, f'{event.event_type} {event.src_path}')
        # отправка созданного файла в телеграм
        text = get_file(event.src_path)
        bot.send_document(self.chat_id, text)

    # вызывается на событие модификации файла или директории
    def on_modified(self, event):
        bot.send_message(self.chat_id, f'{event.event_type} {event.src_path}')

    # вызывается на событие удаления файла или директории
    def on_deleted(self, event):
        bot.send_message(self.chat_id, f'{event.event_type} {event.src_path}')

    # вызывается на событие перемещения\переименования файла или директории
    def on_moved(self, event):
        bot.send_message(self.chat_id, f'{event.event_type} {event.src_path}')


@bot.message_handler(commands=['start'])
def welcome(message):
    bot.send_message(message.chat.id, f'Отслеживание изменений в папке {path}')
    event_handler = EventHandler(message.chat.id)
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()


bot.polling(none_stop=True)
 
  • Мне нравится
Реакции: Student

Форум IT Специалистов