Ответы пользователя по тегу Telegram
  • Как остановить скрипт python используя сочетание клавиш из любого окна?

    botermain
    @botermain
    Многопоточность - залог успеха, советую почитать эту статью, уверен, что ни раз пригодится

    Тем не менее, решение твоей проблемы довольно простое, с помощью модуля multiprocessing в отдельном процессе запускаешь функцию, которая будет слушать нажатия клавиш и завершать процесс по его PID:

    import os
    import signal
    import keyboard
    import multiprocessing
    
    
    def hook(pid):
        while True:
            if keyboard.is_pressed('ctrl + 1'):
                os.kill(pid,signal.SIGTERM)
                os._exit(1)
    
    
    if __name__ == '__main__':
        pid = os.getpid()
        multiprocessing.Process(target=hook,args=[pid]).start()
        #-----------------------------------------------------#
        #Здесь располагай свой код
        # -----------------------------------------------------#

    Конечно, можно также использовать модуль threading, но я более чем уверен , что будут проблемы с GIL, поэтому multiprocessing - это лучший вариант
    Ответ написан
    1 комментарий
  • Как сделать так, чтобы при появлении нового файла в папке, он отправлялся в telegram bot?

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

    Код не тестил, но должно работать.
    Ответ написан
    1 комментарий
  • Как сделать чтобы TelegramClient редактировал сообщение?

    botermain
    @botermain
    Всё достаточно просто, советую хотя бы бегло глянуть на документацию к Telethon, прежде чем задавать такие вопросы

    Чтобы менять сообщение, надо понимать какое именно, а для этого следует записать его в переменную и после вытащить из неё его ID:
    with TelegramClient (api_hash, api_id)as client:
        msg = client.send_message(group, 'test')
        edit.message(group, msg.id, 'текст')
    Ответ написан
    Комментировать
  • Как выглядит ID сообщения в телеграмме?

    botermain
    @botermain
    ID выглядит правильно, вопрос в том, правильный ли вы подставляете, давайте лучше получим ID отправленного нами сообщения и изменим его по нему, а не тыкая пальцем в небо. Расскажу на примере Telethon(Самая простая библиотека по моему мнению):

    Во первых, отправим сообщение и запишем его в переменную
    message = client.send_message(chat_id, text)

    После чего мы можем достать из переменной ID отправленного нами сообщения:
    message = client.send_message(chat_id, text)
    print("ID сообщения: ", message.id)


    И вот только теперь отредактируем его с помощью ID, который получили, вот пример рабочего кода:
    message = client.send_message(chat_id, text)
    client.edit_message(chat_id,message.id,text)


    Надеюсь, что объяснил понятно
    Ответ написан
    3 комментария