82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
import os
|
|
|
|
from telegram import Update
|
|
from telegram.ext import (
|
|
CommandHandler,
|
|
ApplicationBuilder,
|
|
ConversationHandler,
|
|
CallbackContext,
|
|
filters,
|
|
MessageHandler,
|
|
)
|
|
|
|
from labeler.app.labeler import Application
|
|
from labeler.infra.e550w_printer.printer import E550W
|
|
from labeler.infra.renderer import PILRenderer
|
|
|
|
|
|
class LabelingBot:
|
|
def __init__(self, app: Application):
|
|
self.app = app
|
|
|
|
async def media_info(self, update, context):
|
|
media = self.app.get_installed_media()
|
|
await update.message.reply_text(f"Installed media: {media.description}")
|
|
|
|
async def label_length(self, update, context):
|
|
await update.message.reply_text(
|
|
"Hello! Please tell me the length of the label, enter 0 for auto:"
|
|
)
|
|
return LABEL_LENGTH
|
|
|
|
async def label_text(self, update: Update, context: CallbackContext) -> int:
|
|
user_input = update.message.text
|
|
context.user_data["length"] = int(user_input)
|
|
await update.message.reply_text("Now, please tell me the text of the label:")
|
|
return LABEL_TEXT
|
|
|
|
async def simple_label(self, update: Update, context: CallbackContext) -> int:
|
|
user_input = update.message.text
|
|
context.user_data["label"] = user_input
|
|
try:
|
|
label = self.app.print_label(
|
|
text=context.user_data["label"], length=context.user_data["length"]
|
|
)
|
|
except Exception as e:
|
|
await update.message.reply_text(f"There was an exception: {e}")
|
|
return ConversationHandler.END
|
|
|
|
await update.message.reply_photo(
|
|
label.bytes, f'Your label is: {context.user_data["label"]}'
|
|
)
|
|
return ConversationHandler.END
|
|
|
|
async def cancel(self, update: Update, context: CallbackContext) -> int:
|
|
await update.message.reply_text("Cancelled.")
|
|
return ConversationHandler.END
|
|
|
|
|
|
if __name__ == "__main__":
|
|
application = Application(PILRenderer(), E550W(os.environ.get("PRINTER_IP")))
|
|
bot = LabelingBot(application)
|
|
|
|
LABEL_LENGTH, LABEL_TEXT = range(2)
|
|
|
|
conv_handler = ConversationHandler(
|
|
entry_points=[CommandHandler("simple_label", bot.label_length)],
|
|
states={
|
|
LABEL_LENGTH: [
|
|
MessageHandler(filters.Text() & ~filters.Command(), bot.label_text)
|
|
],
|
|
LABEL_TEXT: [
|
|
MessageHandler(filters.Text() & ~filters.Command(), bot.simple_label)
|
|
],
|
|
},
|
|
fallbacks=[CommandHandler("cancel", bot.cancel)],
|
|
)
|
|
|
|
app = ApplicationBuilder().token(os.environ["TELEGRAM_TOKEN"]).build()
|
|
app.add_handler(CommandHandler("media_info", bot.media_info))
|
|
app.add_handler(conv_handler)
|
|
|
|
app.run_polling()
|