forked from foxo/printer_bot
65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
from telethon import TelegramClient
|
|
import logging, asyncio
|
|
from telethon.tl.types import MessageMediaDocument, DocumentAttributeSticker, DocumentAttributeAnimated, MessageMediaPhoto
|
|
from telethon import events
|
|
from telethon.tl.custom import Button
|
|
from os.path import isfile, join
|
|
from grp import getgrgid
|
|
from os import getgroups
|
|
from os import system
|
|
from os import path
|
|
from time import time
|
|
from PIL import Image
|
|
from config import *
|
|
from os import makedirs
|
|
import argparse
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(
|
|
prog='./bot.py',
|
|
description='Recieve images through IRC or Telegram and print the content with brother_ql'
|
|
)
|
|
|
|
parser.add_argument('-t', '--telegram', help='Enable Telegram (requires configuration)',
|
|
action='store_true') # on/off flag
|
|
parser.add_argument('-i', '--irc', help='Enable IRC (generate random channel and username by default, set values in the configuration if you want a static name)',
|
|
action='store_true') # on/off flag
|
|
|
|
parser.add_argument('-p', '--printer', help='Printer devicefile, default is /dev/usb/lp0',
|
|
action='store_true') # on/off flag
|
|
|
|
args = parser.parse_args()
|
|
|
|
# os.getgroups() seems to return the *effective* groups of the current user, not
|
|
# what is in /etc/group https://docs.python.org/3/library/os.html#os.getgrouplist
|
|
# This is good thing, otherwise the error would disappear even if the user has not
|
|
# logged in again.
|
|
if "lp" not in [getgrgid(g).gr_name for g in getgroups()]:
|
|
print("""Error: User is not in the lp group. Run the following and sign in again:
|
|
sudo usermod -a -G lp $USER""")
|
|
|
|
# Assumes this hardcoded path, prevent
|
|
# continuing if there is not even a printer
|
|
if not path.exists("/dev/usb/lp0"):
|
|
exit("There seems to be no printer connected.")
|
|
|
|
# By default the printer turns off after a certain time to save power.
|
|
# For the use case of a public usable printer at events this is
|
|
# annoying. Currently, there is no function in the brother_ql project to
|
|
# disable power saving: https://github.com/pklaus/brother_ql/issues/50
|
|
# The workaround shell command is rewritten to Python code. Please
|
|
# remove this code if brother_ql implements a working fix themselves
|
|
with open("/dev/usb/lp0", "wb") as p:
|
|
p.write(b'\x1b\x69\x55\x41\x00\x00')
|
|
|
|
if args.irc:
|
|
import bot_irc
|
|
|
|
if args.telegram:
|
|
import bot_telegram
|
|
|
|
|
|
makedirs(CACHE_DIR, exist_ok=True)
|
|
client.run_until_disconnected() |