Untitled
unknown
plain_text
a year ago
14 kB
1
Indexable
Never
from aiogram import Router, F from aiogram.filters import Command from aiogram.fsm.context import FSMContext from aiogram.fsm.state import StatesGroup, State from aiogram.types import Message, ForceReply, KeyboardButton,FSInputFile, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery from datetime import datetime, date import numpy as np import Funcs import requests import firebase import time router = Router() token = '6268498821:AAGGDDITcRI2RFtyljkGUff5IB39ihtWtOk' # token = '5937921652:AAGKX0CLleIeFxKWpSCtB2fY1sxUvtOzK98' h_text = "Я Додо Джин!\nЯ умею напоминать о списании заготовок. Напиши в чате /writeoff и я попрошу прислать фото этикетки на лексане. Отправь фото в ответ и я напомню о сроках. Один раз за час до срока и один раз после срока списания продукта.\n Могу отличать несколько маркировок на одном фото.\nЭтикетки с маркировкой должны быть читаемы. Для правильного распознавания на фото не должно быть текста кроме маркировки\nНа фото должно быть видно тару, продукт и количество продукта.\n Формат этикетки:\n-Продукт\n-дд.мм.гг, чч:мм\n-дд.мм.гг, чч:мм\n-Сотрудник\n\n Команда /photoreport предложит загрузить разные фотоотчеты, которые можно просматривать через веб-интерфейс.\n" is_r = 0 class Upload_PH(StatesGroup): writeoff_ph = State() photorep_ph = State() photorep_MK = State() photorep_GP = State() photorep_WR = State() def getDF(message, reptype, time, file = "", text = ""): Url, photo = Funcs.getURL(message.photo[-1].file_id, token) df = [ "add", # Статус message.date.strftime("%d.%m.%Y, %H:%M:%S"), # Время message.chat.id, # Id чата message.chat.title, # Название чата message.chat.type, # Тип чата message.from_user.id, # Id отправителя message.from_user.username, # Username отправителя message.from_user.first_name, # Имя отправителя message.message_id, # Id сообщения message.media_group_id, # Id медиа-группы message.reply_to_message.message_id, # Id сообщения(ответ) message.reply_to_message.date.strftime("%d.%m.%Y, %H:%M:%S"), # Время сообщения(ответ) reptype, # Выбор time, # Категория Url, # Url фото message.reply_to_message.text, # Текст сообщения(ответ) message.chat.title, # Название чата file, # "" message.photo[-2].file_id, # Id фото photo, # фото "lmd", # Дата изменения text # Текст ] # df = list(map(str, df)) return df def getDate(): day = datetime.now() d, mo, y, h, m = day.day, day.month, day.year, day.hour, day.minute f = lambda x: '0' + str(x) if x < 10 else x dt = "Утро" if 12<=h<17: dt = "День" elif 17<=h<=23: dt = "Вечер" elif 0<h<4: dt = "Ночь" d, mo, h, m = map(f, [d, mo, h, m]) date = { "all":f"{dt} {d}.{mo}.{y}, {h}:{m}", "dt":dt, "time": f"{d}.{mo}.{y}, {h}:{m}" } return date # @router.message() # async def send_welcome(message: Message): # while message.photo[-1].file_id: # print(message.photo[-1].file_id) @router.message(Command('cancel')) async def send_welcome(message: Message, state: FSMContext): await state.clear() @router.message(Command('start')) async def send_welcome(message: Message): await message.reply(h_text) @router.message(Command("help")) async def send_welcome(message: Message): await message.reply(h_text) # @router.message() # async def some_text(message: Message): # pass @router.message(Command("writeoff")) async def write_off(message: Message, state: FSMContext): print("Write-Off") await state.clear() # day = datetime.now() # d, mo, y, h, m = day.day, day.month, day.year, day.hour, day.minute # f = lambda x: '0'+ str(x) if x<10 else x # d,mo,h,m = map(f,[d,mo,h,m]) # d_t = f"{d}.{mo}.{y}, {h}:{m}" d_t = getDate() await message.answer(f"Фото: Маркировка\n{d_t['all']}", reply_markup = ForceReply()) await state.set_state(Upload_PH.writeoff_ph) @router.message(Command('photoreport')) async def Photorep(message: Message, state: FSMContext): await state.clear() print("дата и время: ",getDate()) kb = [ [ InlineKeyboardButton(text="Фотоотчёт", callback_data="Фотоотчёт"), InlineKeyboardButton(text="Чеки", callback_data="Чеки") ], [InlineKeyboardButton(text="Списание", callback_data="Списание")] ] keyboard = InlineKeyboardMarkup(inline_keyboard=kb) await message.answer("Загрузить фотоотчет.", reply_markup=keyboard) await state.set_state(Upload_PH.photorep_ph) # @router.message(Upload_PH.photorep_ph) # async def T1(message: Message, state: FSMContext): # await message.answer("Загрузить фотоотчет.!!") @router.message(Upload_PH.writeoff_ph, F.photo) async def Send_Photoes(message: Message, state: FSMContext): # res = file_path = requests.get(f'https://api.telegram.org/bot{token}/getFile?file_id={message.photo[-1].file_id}').json()['result'][ # 'file_path'] # print(res) # UrlPhoto = "https://api.telegram.org/file/bot" + token + "/" + res # df =np.array([ # "add", # Статус # message.date.strftime("%m.%d.%Y, %H:%M:%S"), # Время # message.chat.id, # Id чата # message.chat.title, # Название чата # message.chat.type, # Тип чата # message.from_user.id, # Id отправителя # message.from_user.username, # Username отправителя # message.from_user.first_name, # Имя отправителя # message.message_id, # Id сообщения # message.media_group_id, # Id медиа-группы # message.reply_to_message.message_id, # Id сообщения(ответ) # message.reply_to_message.date.strftime("%m.%d.%Y, %H:%M:%S"),# Время сообщения(ответ) # "Выбор", # Выбор # "категория", # Категория # UrlPhoto, # Url фото # message.reply_to_message.text, # Текст сообщения(ответ) # message.chat.title, # Название чата # 'Empty', # "" # message.photo[-2].file_id, # Id фото # photo, # фото # "lmd", # Дата изменения # "OCR" # Текст # ]) print(message) is_end = True start = time.time() date = getDate() ans = '' # is_new = False f = lambda x,y: str(x+1) if y>1 else '' ### Получение фотографий продукта files = Funcs.virez(id = message.photo[-1].file_id, token = token) all_text = files["text"][0]["all"] # print(files["text"][0]["text"]) ### Загрузка фото arr = getDF(message, reptype="Маркировка", time=date["dt"], file="", text=all_text) # print("arr ", arr) res = firebase.upl_base(arr) # print("res ", res) # print(files) # return 0 # for file in files: if "0" in res: ### Если фото новое ### Загрузка продукта for i in range(len(files["file"])): # df = getDF(message, reptype="Маркировка", time=date["dt"], file=files[i]) # print("файл", files[i]) # photo = FSInputFile(file) upl_mark = firebase.add_to_base(n=str(i), name=res["name"], photo_path=files["file"][i], mark=files["text"][i]) ans = time.time() - start elif "1" in res: await message.reply(res["1"]) await message.answer(f"Фото: {res['type']}\n{getDate()['all']}", reply_markup=ForceReply()) await state.set_state(Upload_PH.writeoff_ph) is_end = False print("конец ", is_end) if is_end: await state.clear() @router.message(Upload_PH.writeoff_ph) async def food_size_chosen(message: Message, state: FSMContext): await message.answer("Это не фото, отправьте фото маркировки") # Сброс состояния и сохранённых данных у пользователя @router.callback_query(Upload_PH.photorep_ph) async def Choose(callback: CallbackQuery, state: FSMContext): text = callback.data print(text) # if text == "Фотоотчёт": kb = [ [ InlineKeyboardButton(text="Маркировка продуктов", callback_data="Маркировка продуктов")], [ InlineKeyboardButton(text="Температура", callback_data="Температура"), InlineKeyboardButton(text="Чек листы", callback_data="Чек листы"), ], [ InlineKeyboardButton(text="Горячий цех", callback_data="Горячий цех"), InlineKeyboardButton(text="Зал", callback_data="Зал"), ] ] # keyboard = InlineKeyboardMarkup(inline_keyboard=kb) # await callback.message.edit_text("Выбор отчета", reply_markup=keyboard) # await state.set_state(Upload_PH.photorep_MK) if text == "Чеки": kb = [ [ InlineKeyboardButton(text="Расходы", callback_data="Расходы"), InlineKeyboardButton(text="Самозанятые", callback_data="Самозанятые"), ] ] kb.append([InlineKeyboardButton(text="←", callback_data="back")]) keyboard = InlineKeyboardMarkup(inline_keyboard=kb) await callback.message.edit_text("Выбор отчета", reply_markup=keyboard) await state.set_state(Upload_PH.photorep_MK) @router.callback_query(Upload_PH.photorep_MK) async def Choose(callback: CallbackQuery, state: FSMContext): text = callback.data if text == "back": # print("дата и время: ", getDate()) kb = [ [ InlineKeyboardButton(text="Фотоотчёт", callback_data="Фотоотчёт"), InlineKeyboardButton(text="Чеки", callback_data="Чеки") ], [InlineKeyboardButton(text="Списание", callback_data="Списание")] ] keyboard = InlineKeyboardMarkup(inline_keyboard=kb) await callback.message.edit_text("Загрузить фотоотчет.", reply_markup=keyboard) await state.set_state(Upload_PH.photorep_ph) # callback.message.edit_text("Выбор отчета", reply_markup=keyboard) else: await callback.message.reply(f"Отчет: {text}\n{getDate()['all']}", reply_markup = ForceReply()) # await callback.message.delete() await state.set_state(Upload_PH.photorep_GP) @router.message(Upload_PH.photorep_GP, F.photo) async def Upl_Photo(message: Message, state: FSMContext): global is_r mes = message.reply_to_message.text.split("\n") retype = mes[0].split(":")[1] time = mes[1].split(" ")[0] print("retype", retype) print("time", time) arr = getDF(message, reptype=retype, time= time) print(arr) res = firebase.upl_base(arr) print("res",res) if "1" in res: await message.reply(res["1"]) await message.answer(f"Отчет:{res['type']}\n{getDate()['all']}", reply_markup=ForceReply()) # await callback.message.delete() await state.set_state(Upload_PH.photorep_GP) is_r = 1 else: is_r = 0 await state.set_state(Upload_PH.photorep_MK)