Задать вопрос
@kirilllogin

Как сделать так, чтобы при появлении нового файла в папке, он отправлялся в telegram bot?

Я далеко не программист)) Подскажите пожалуйста
Задача:
OS Windows
Есть папка F:\audio в ней периодически появляются файлы .mp3
639b19244ff49288403098.jpeg
Необходимо:
При появлении нового файла в этой папке, он автоматом отправляется в телеграм бот (в виде голосового сообщения)

У меня получается отправлять только конкретный файл (в виде голосового сообщения)

import telebot
bot = telebot.TeleBot('...................')
@bot.message_handler(commands=['start'])
def start(massage):
    chatId = massage.chat.id
    text = massage.text.lower
    bot.send_voice(chatId, open(<b>"audio001.mp3"</b>, 'rb'))
bot.polling()
  • Вопрос задан
  • 532 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Я далеко не программист

Стать близко программистом
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
1. Запусти бота.
2. Задействуй пакет watchdog
3. В обработчике событий watchdog проверяй, что событие нас интересует, и говори боту отправить файл.
Ответ написан
Комментировать
botermain
@botermain
Я далеко не программист

Поручи эту работу тому, кто в этом разбирается, ибо то, что ты хочешь сделать не для обычного пользователя пк

Ну, а если серьёзно, тебе нужно как минимум подключать многопоточность, если требуется постоянная работа в чате после команды, после чего в бесконечном цикле запрашиваешь имена файлов и если появляется новое, берешь и подставляешь его:
import telebot
import threading
import os
    
bot = telebot.TeleBot('...................')

def voiceloop(bot,chatId):
    files = set(os.listdir())
    while True:
        new = set(os.listdir())
        if new != files:
            try:
                send = list(new.difference(files))[0]
                bot.send_voice(chatId, open(send, 'rb'))
                files = new
            except:
                pass


@bot.message_handler(commands=['start'])
def start(massage):
    chatId = massage.chat.id
    text = massage.text.lower
    t = threading.Thread(target=voiceloop, args = (bot,chatId))
    t.start()


bot.polling()

Код не тестил, но должно работать.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы