Для обновления бота после изменения файла Excel без перезапуска вы можете использовать следующий подход:
1. Переместите код, который читает файл Excel и создает необходимые объекты данных, в отдельную функцию. Назовем ее `load_data()`.
2. При запуске программы вызовите функцию `load_data()` для загрузки данных из файла Excel.
3. Добавьте код-слушатель для отслеживания изменений файла Excel. Для этого вы можете использовать библиотеку `watchdog`. Назовите эту функцию `watch_changes()`.
4. В функции `watch_changes()` добавьте обработчик изменений файлов, чтобы обновить данные в боте. При изменении файла Excel вызовите функцию `load_data()` для перезагрузки данных.
5. Запустите функцию `watch_changes()` в отдельном потоке, чтобы слушать изменения файла Excel в фоновом режиме.
Примерный код может выглядеть так:
```python
import os
import threading
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import openpyxl
# Путь к файлу Excel
file_path = "path/to/excel/file.xlsx"
# Функция для загрузки данных из файла Excel
def load_data():
wb = openpyxl.load_workbook(file_path)
# Остальной код для чтения данных из файла и создания объектов данных
# Функция для отслеживания изменений файла Excel
def watch_changes():
class ExcelFileHandler(FileSystemEventHandler):
def on_modified(self, event):
if event.src_path == file_path:
print("File modified, reloading data...")
load_data()
event_handler = ExcelFileHandler()
observer = Observer()
observer.schedule(event_handler, os.path.dirname(file_path), recursive=False)
observer.start()
# Запускаем функцию загрузки данных из Excel при запуске программы
load_data()
# Запускаем функцию отслеживания изменений файла Excel в отдельном потоке
threading.Thread(target=watch_changes).start()
# Остальной код для работы бота
# Функция для сохранения данных в файл Excel
def echo_message(message):
# Остальной код обработки сообщения
# ...
# Сохраняем данные в файл
wb.save(file_path)
# Перезагружаем данные после сохранения файла
load_data()
# Остальной код для работы бота
```
После `wb.save` в функции `def echo_message` вы можете просто вызвать функцию `load_data()` для перезагрузки данных из файла Excel.