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