def approve_request(bot, update): query = update.callback_query telegram_id = query.message.chat_id session = database.RegistrySession[telegram_id] request = list(database.Request.select(lambda c: c.status == 0))[session.request_c] database.Actions(implementer=str(telegram_id), action="approved registry request for", implementee=str(request.telegramID)) enrolled_user = database.User(telegramID=request.telegramID, phone=request.phone, address=request.address, priority=request.faculty, alias=request.alias, name=request.name) database.Request[request.id].status = 1 session.request_c = 0 # Editing message bot.edit_message_text(text="Request has been successfully approved (Telegram ID: " + str(request.telegramID) + ")", chat_id=query.message.chat_id, message_id=query.message.message_id) bot.send_message(text="Your request has been approved!", chat_id=int(enrolled_user.telegramID)) request.delete() database.RegistrySession[telegram_id].request_c = 0 commit()
def book_media(bot, update): query = update.callback_query user = database.User.get(telegramID=query.message.chat_id) if user is not None: telegram_id = query.message.chat_id session = database.RegistrySession[telegram_id] media = list(database.Media.select())[session.media_c] status = user.book_media(media, datetime.datetime.now()) if status == -1: database.Actions(implementer=str(telegram_id), action="tried to book unavailable media #", implementee=str(media.mediaID)) bot.edit_message_text(text="This media is unavailable :( ", chat_id=query.message.chat_id, message_id=query.message.message_id) elif status == -2: database.Actions(implementer=str(telegram_id), action="tried to book already taken media #", implementee=str(media.mediaID)) bot.edit_message_text(text="You already have this media copy 🤦🏻♂", chat_id=query.message.chat_id, message_id=query.message.message_id) elif status == 0: bot.edit_message_text(text="🤘 Media has been successfully booked. Please visit the library to get it.", chat_id=query.message.chat_id, message_id=query.message.message_id) # Media cursor - to 0 session.media_c = 0 else: database.Actions(implementer=str(telegram_id), action="raised error while booking media #", implementee=str(media.mediaID)) bot.edit_message_text(text="Sorry, error has been occurred", chat_id=query.message.chat_id, message_id=query.message.message_id) else: database.Actions(implementer="", action="Unenrolled user tried to book media", implementee="") bot.edit_message_text(text="🤦🏻♂️ You're not enrolled into the System. Shame on you! Enroll now! /enroll", chat_id=query.message.chat_id, message_id=query.message.message_id)
def make_return_request(bot, update, copy_id): telegram_id = update.callback_query.message.chat_id database.ReturnRequest( telegramID=telegram_id, copyID=copy_id ) database.Actions(implementer=str(telegram_id), action="has placed a return request for media #", implementee=str(copy_id)) bot.edit_message_text( text="Return request has been successfully added", message_id=update.callback_query.message.message_id, chat_id=telegram_id )
def add_in_line(bot, update): query = update.callback_query telegram_id = query.message.chat_id session = database.RegistrySession[telegram_id] media = list(database.Media.select())[session.media_c] user = database.User[telegram_id] a = list(database.Log.select( lambda c: c.libID == telegram_id and c.mediaID.startswith(str(media.mediaID)))) if not user.is_in_line(media) and len(list(database.Log.select( lambda c: c.libID == telegram_id and c.mediaID.startswith(str(media.mediaID))))) == 0: user.add_to_queue(media) database.Actions(implementer=str(telegram_id), action="got in line for media #", implementee=str(media.mediaID)) bot.edit_message_text(text="You have been successfully added to the line!", chat_id=query.message.chat_id, message_id=query.message.message_id) else: database.Actions(implementer=str(telegram_id), action="tried to reenter the line for media #", implementee=str(media.mediaID)) bot.edit_message_text(text="Sorry, mate, but you are already in line!", chat_id=query.message.chat_id, message_id=query.message.message_id) """
def reject_request(bot, update): query = update.callback_query telegram_id = query.message.chat_id session = database.RegistrySession[telegram_id] request = list(database.Request.select(lambda c: c.status == 0))[session.request_c] declined_id = request.telegramID database.Actions(implementer=str(telegram_id), action="rejected registry request for", implementee=str(request.telegramID)) database.Request[request.id].delete() session.request_c = 0 commit() # Editing message bot.edit_message_text(text="Request has been successfully rejected", chat_id=query.message.chat_id, message_id=query.message.message_id) bot.send_message(text="Your request has been rejected :( You can try again or contact librarian @librarian", chat_id=declined_id)
def reject_return(bot, update, request_id): request = database.ReturnRequest[request_id] copy_id = request.copyID user_id = request.telegramID request.delete() commit() bot.send_message( text="Return request for Media #%s has been rejected. Please, contact librarian @librarian" % copy_id, chat_id=user_id) database.Actions(implementer=str(update.callback_query.message.chat_id), action="has rejected a return request for media #", implementee=str(copy_id)) bot.edit_message_text(text="Return request for Media #%s has been rejected" % copy_id, message_id=update.callback_query.message.message_id, chat_id=update.callback_query.message.chat_id)
def accept_return(bot, update, request_id): request = database.ReturnRequest[request_id] copy_id = request.copyID user_id = request.telegramID media = database.MediaCopies.get(copyID=copy_id).mediaID status = database.Librarian.get(telegramID=update.callback_query.message.chat_id).accept_return(copy_id) if status[0] == 1: request.delete() commit() database.Actions(implementer=str(update.callback_query.message.chat_id), action="has accepted a return request for media #", implementee=str(media.mediaID)) bot.send_message(text="Media %s has been successfully returned" % copy_id, chat_id=user_id) user = database.RegistrySession(telegramID=user_id) user.my_medias_c = 0 bot.edit_message_text(text="Media %s has been successfully returned" % copy_id, message_id=update.callback_query.message.message_id, chat_id=update.callback_query.message.chat_id) elif status[0] == 2: user = status[1] # Making a record in log database.Log(libID=user.telegramID, mediaID=copy_id, expiry_date=generate_expiry_date(media, user, datetime.datetime.now())) bot.send_message(text="Media %s has been successfully returned" % copy_id, chat_id=user_id) database.Actions(implementer=str(update.callback_query.message.chat_id), action="has accepted a return request for media #", implementee=str(media.mediaID)) bot.edit_message_text(text="Media %s has been successfully returned" % copy_id, message_id=update.callback_query.message.message_id, chat_id=update.callback_query.message.chat_id) database.Actions(implementer=str(user.telegramID), action="got his turn in line for media #", implementee=str(media.mediaID)) bot.send_message(text="Dear %s, media #%s is available now! You can take it from library, time starts now!" % ( user.name, copy_id), chat_id=user.telegramID) elif status[0] == -1: database.Actions(implementer=str(update.callback_query.message.chat_id), action="needs to return " + str(status[1]) + " for media #", implementee=str(media.mediaID)) bot.edit_message_text(text="This user needs to pay %s rubles to return this media item." % status[1], message_id=update.callback_query.message.message_id, chat_id=update.callback_query.message.chat_id, reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( "Pay", callback_data=json.dumps( { 'type': 'pay', 'argument': user_id, 'media': media.mediaID}))]])) else: database.Actions(implementer=str(update.callback_query.message.chat_id), action="raised an error for return request for media #", implementee=str(media.mediaID)) bot.edit_message_text(text="Sorry, error has been occurred", chat_id=update.callback_query.message.chat_id, message_id=update.callback_query.message.message_id)