From 3cd1137b84503bf64b691491f4b3f2964a4e7092 Mon Sep 17 00:00:00 2001 From: Clarth Date: Tue, 2 Jan 2024 17:20:51 -0500 Subject: [PATCH] Now prints image files. Added image handling. Can't print inline images, but will remind the user to send the image as a file. --- tg_print.py | 118 ++++++++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 55 deletions(-) diff --git a/tg_print.py b/tg_print.py index 35b389b..6ae22f5 100644 --- a/tg_print.py +++ b/tg_print.py @@ -1,55 +1,63 @@ -import sys -import os -import telebot -import subprocess - -# Telegram API token -TOKEN = 'TOKEN' - -# Telegram chat ID for the channel to send messages to -CHAT_ID = 'CHAT ID' #starts with a - - -# Path to directory where downloaded files will be saved -DOWNLOAD_DIR = '/PATH/TO/DOWNLOAD/AND/PRINT/FILES/FROM' - -# Printer name -printer = "PRINTER NAME" - -# Create a bot instance with the specified token -bot = telebot.TeleBot(TOKEN) - -# Send a message to the channel when the bot is online -@bot.message_handler(commands=['start']) -def start(message): - bot.send_message(CHAT_ID, 'Bot is now online!') - -# Handle incoming files -@bot.message_handler(content_types=['document', 'audio', 'photo']) -def handle_file(message): - if message.photo: - # Handle photos - bot.send_message(CHAT_ID, 'Printing Images isn\'t supported') - elif message.audio: - # Handle audio - bot.send_message(CHAT_ID, "I can't print sounds!") - else: - # Handle other file types - # Download the file - file_info = bot.get_file(message.document.file_id) - file_name = message.document.file_name - downloaded_file = bot.download_file(file_info.file_path) - - # Save the file to the download directory - file_path = os.path.join(DOWNLOAD_DIR, file_name) - with open(file_path, 'wb') as new_file: - new_file.write(downloaded_file) - - # Print the file - print_command = ["/usr/bin/lp", "-o", "fit-to-page", "-d", printer, file_path] - subprocess.run(print_command) - - # Send a message to the channel indicating that a file has been downloaded and printed - bot.send_message(CHAT_ID, f'File "{file_name}" has been downloaded and printed!') - -# Start the bot -bot.polling() +import sys +import os +import telebot +import subprocess +from pathlib import Path + +# Telegram API token +TOKEN = 'TOKEN' + +# Telegram chat ID for the channel to send messages to +CHAT_ID = 'CHAT ID' #starts with a - + +# Path to directory where downloaded files will be saved +DOWNLOAD_DIR = '/PATH/TO/DOWNLOAD/AND/PRINT/FILES/FROM' + +# Printer name +printer = "PRINTER NAME" + +# Create a bot instance with the specified token +bot = telebot.TeleBot(TOKEN) + +# Send a message to the channel when the bot is online +@bot.message_handler(commands=['start']) +def start(message): + bot.send_message(CHAT_ID, 'Bot is now online!') + +# Handle incoming files +@bot.message_handler(content_types=['document', 'audio', 'photo']) +def handle_file(message): + try: + if message.photo: + # Handle photos + file_info = bot.get_file(message.photo[-1].file_id) + file_name = f"photo_{message.photo[-1].file_id}{Path(file_info.file_path).suffix}" + bot.send_message(CHAT_ID, 'Printing Images isn\'t supported. Please send the image as a file. Like this --> https://i.imgur.com/JcTtCvR.png') + elif message.audio: + # Handle audio + bot.send_message(CHAT_ID, "I can't print sounds!") + elif message.document: + # Handle other file types + # Download the file + file_info = bot.get_file(message.document.file_id) + file_name = message.document.file_name + downloaded_file = bot.download_file(file_info.file_path) + + # Save the file to the download directory + file_path = os.path.join(DOWNLOAD_DIR, file_name) + with open(file_path, 'wb') as new_file: + new_file.write(downloaded_file) + + # Print the file + print_command = ["/usr/bin/lp", "-o", "fit-to-page", "-d", printer, file_path] + subprocess.run(print_command) + + # Send a message to the channel indicating that a file has been downloaded and printed + bot.send_message(CHAT_ID, f'File "{file_name}" has been downloaded and printed!') + except Exception as e: + # Handle any other exceptions + print(f"Error: {e}") + bot.send_message(CHAT_ID, 'An error occurred while processing the file. Please try again.') + +# Start the bot +bot.polling() \ No newline at end of file