diff --git a/strings.py b/strings.py index 4952b6a..4e589cf 100644 --- a/strings.py +++ b/strings.py @@ -49,27 +49,27 @@ transactions_page = "Pagina {page}:\n" \ "{transactions}" # transactions.csv caption -csv_caption = "E' stato generato un file .csv contenente tutte le transazioni archiviate nel database del bot.\n" \ +csv_caption = "E' stato generato un 📄 file .csv contenente tutte le transazioni archiviate nel database del bot.\n" \ "E' possibile aprire questo file con altri programmi, come ad esempio LibreOffice Calc, per elaborare" \ " i dati." # Conversation: the start command was sent and the bot should welcome the user conversation_after_start = "Ciao!\n" \ "Benvenuto su greed!\n" \ - "Quella che vedi qui è la versione Alpha del software.\n" \ + "Quella che vedi qui è la versione 🅰️ Alpha del software.\n" \ "Pertanto, funzioni potranno essere aggiunte o rimosse in qualsiasi momento," \ " e l'interfaccia utente potrebbe essere incompleta." # Conversation: to send an inline keyboard you need to send a message with it conversation_open_user_menu = "Cosa vorresti fare?\n" \ - "Hai {credit} sul portafoglio.\n" \ + "💰 Hai {credit} sul portafoglio.\n" \ "\n" \ "Per selezionare un'operazione, premi un tasto nella tastiera in basso.\n" \ "Se la tastiera non si è aperta, puoi aprirla premendo il tasto con quattro quadratini" \ " nella barra dei messaggi." # Conversation: like above, but for administrators -conversation_open_admin_menu = "Sei un amministratore di greed!\n" \ +conversation_open_admin_menu = "Sei un 💼 Gestore di questo negozio!\n" \ "Cosa vorresti fare?\n" \ "\n" \ "Per selezionare un'operazione, premi un tasto nella tastiera in basso.\n" \ @@ -94,7 +94,7 @@ conversation_cart_actions = "Aggiungi prodotti al carrello scorrendo in su e " premi il tasto Conferma." # Conversation: confirm the cart contents -conversation_confirm_cart = "Il tuo carrello contiene questi prodotti:\n" \ +conversation_confirm_cart = "🛒 Il tuo carrello contiene questi prodotti:\n" \ "{product_list}" \ "Totale: {total_cost}\n" \ "\n" \ @@ -104,7 +104,8 @@ conversation_confirm_cart = "Il tuo carrello contiene questi prodotti:\n" \ # Conversation: the user activated the live orders mode conversation_live_orders_start = "Sei in modalità di Ricezione Ordini!\n" \ "Tutti i nuovi ordini piazzati dai clienti ti appariranno in tempo reale in questa" \ - " chat, e potrai segnarli come completati oppure rimborsare il credito al cliente.\n" \ + " chat, e potrai segnarli come ✅ completati" \ + " oppure ✴️ rimborsare il credito al cliente.\n" \ "\n" \ "Premi il tasto Interrompi sotto a questo messaggio per interrompere la" \ " ricezione." @@ -112,6 +113,10 @@ conversation_live_orders_start = "Sei in modalità di Ricezione Ordini!\n # Conversation: help menu has been opened conversation_open_help_menu = "Che tipo di assistenza desideri ricevere?" +# Conversation: switching to user mode +conversation_switch_to_user_mode = "Stai passando alla modalità 👤 Cliente.\n" \ + "Se vuoi riassumere il ruolo di 💼 Gestore, riavvia la conversazione con /start." + # Notification: the conversation has expired conversation_expired = "🕐 Non ho ricevuto messaggi da un po' di tempo, quindi per risparmiare energia" \ " ho chiuso la conversazione.\n" \ @@ -148,7 +153,7 @@ menu_transactions = "💳 Elenco transazioni" menu_edit_credit = "💰 Crea transazione" # Admin menu: go to user mode -menu_user_mode = "👤 Passa alla modalità utente" +menu_user_mode = "👤 Passa alla modalità cliente" # Admin menu: add product menu_add_product = "✨ Nuovo prodotto" @@ -236,25 +241,26 @@ ask_product_price = "Quanto deve costare il prodotto?\n" \ "Scrivi X se vuoi che il prodotto non sia ancora in vendita." # Add product: image? -ask_product_image = "Che immagine vuoi che abbia il prodotto?\n" \ +ask_product_image = "🖼 Che immagine vuoi che abbia il prodotto?\n" \ "\n" \ "Invia la foto, o se preferisci lasciare il prodotto senza immagine premi il tasto Salta qui" \ " sotto." # Order product: notes? ask_order_notes = "Vuoi lasciare una nota insieme all'ordine?\n" \ - "Sarà visibile agli addetti del negozio.\n" \ + "💼 Sarà visibile ai gestori del negozio.\n" \ "\n" \ "Invia un messaggio con la nota che vuoi lasciare, oppure premi il pulsante Salta sotto a questo" \ " messaggio per non lasciare nulla." # Refund product: reason? ask_refund_reason = "Allega una motivazione a questo rimborso.\n" \ - "Sarà visibile al cliente." + "👤 Sarà visibile al cliente." # Edit credit: notes? ask_transaction_notes = "Allega una nota a questa transazione.\n" \ - "Sarà visibile al cliente in seguito all'accredito / addebito e nel registro delle transazioni." + "👤 Sarà visibile al cliente in seguito all'accredito / addebito" \ + " e ai 💼 Gestori nel registro delle transazioni." # Edit credit: amount? ask_credit = "Di quanto vuoi modificare il credito del cliente?\n" \ @@ -264,16 +270,16 @@ ask_credit = "Di quanto vuoi modificare il credito del cliente?\n" \ " oppure un segno - se vuoi dedurlo." # Edit admin: can edit products? -ask_edit_products = "Vuoi che l'amministratore sia autorizzato a modificare la configurazione dei prodotti?" +ask_edit_products = "Vuoi che questo 💼 Gestore sia autorizzato a modificare la configurazione dei prodotti?" # Edit admin: can receive orders? -ask_receive_orders = "Vuoi che l'amministratore sia autorizzato a ricevere e gestire gli ordini?" +ask_receive_orders = "Vuoi che questo 💼 Gestore sia autorizzato a ricevere e gestire gli ordini?" # Edit admin: can create transactions? -ask_create_transactions = "Vuoi che l'amministratore sia autorizzato a creare nuove transazioni?" +ask_create_transactions = "Vuoi che questo 💼 Gestore sia autorizzato a creare nuove transazioni?" # Edit admin: should be displayed on help -ask_display_on_help = "Vuoi che l'amministratore venga visualizzato nella sezione Contatta il negozio?" +ask_display_on_help = "Vuoi che questo 💼 Gestore venga visualizzato nella sezione Contatta il negozio?" # Thread has started downloading an image and might be unresponsive downloading_image = "Sto scaricando la tua foto!\n" \ @@ -303,7 +309,7 @@ payment_invoice_title = "Aggiunta di fondi" # Payment: add funds invoice description payment_invoice_description = "Pagando questa ricevuta verranno aggiunti {amount} al portafoglio.\n\n" \ "Visto che sei nella versione Alpha del software, puoi effettuare pagamenti infiniti" \ - " con la carta di credito di prova `4242 4242 4242 4242`," \ + " con la carta di credito di prova 4242 4242 4242 4242," \ " con qualsiasi CVV e una qualsiasi data di scadenza valida." # Payment: label of the labeled price on the invoice @@ -325,7 +331,7 @@ notification_order_refunded = "Un tuo ordine è stato rimborsato!\n" \ "{order}" # Notification: a manual transaction was applied -notification_transaction_created = "E' stata applicata una nuova transazione al tuo portafoglio:\n" \ +notification_transaction_created = "ℹ️ E' stata applicata una nuova transazione al tuo portafoglio:\n" \ "{transaction}" # Refund reason @@ -339,8 +345,8 @@ bot_info = 'Questo bot utilizza gree 'Il codice sorgente di questa versione è disponibile qui.\n' # Help: guide -help_msg = "La guida del bot non è ancora disponibile.\n" \ - "Riprova più avanti!" +help_msg = "La guida del bot sarà disponibile in futuro a questo indirizzo:\n" \ + "https://github.com/Steffo99/greed/wiki" # Help: contact shopkeeper contact_shopkeeper = "Attualmente, il personale disponibile ad offrire assistenza agli utenti è composto da:\n" \ @@ -406,4 +412,4 @@ error_user_does_not_exist = "⚠️ L'utente selezionato non esiste." # Fatal: conversation raised an exception fatal_conversation_exception = "☢️ Oh no! Un errore ha interrotto questa conversazione.\n" \ "L'errore è stato segnalato allo sviluppatore di greed in modo che possa sistemarlo.\n" \ - "Per avviare una nuova conversazione, invia il comando /start." \ No newline at end of file + "Per avviare una nuova conversazione, invia il comando /start." diff --git a/worker.py b/worker.py index f1715c3..508920d 100644 --- a/worker.py +++ b/worker.py @@ -83,6 +83,8 @@ class ChatWorker(threading.Thread): display_on_help=True, is_owner=True, live_mode=False) + # Add the admin to the transaction + self.session.add(self.admin) # Commit the transaction self.session.commit() # Capture exceptions that occour during the conversation @@ -115,6 +117,12 @@ class ChatWorker(threading.Thread): # Wait for the thread to stop self.join() + def update_user(self) -> db.User: + """Update the user data. + Note that this method will cause crashes if used in different threads with sqlite databases.""" + self.user = self.session.query(db.User).filter(db.User.user_id == self.chat.id).one_or_none() + return self.user + # noinspection PyUnboundLocalVariable def __receive_next_update(self) -> telegram.Update: """Get the next update from the queue. @@ -297,7 +305,7 @@ class ChatWorker(threading.Thread): strings.menu_add_credit, strings.menu_bot_info, strings.menu_help]) # After the user reply, update the user data - self.user = self.session.query(db.User).filter(db.User.user_id == self.chat.id).one_or_none() + self._update_user() # If the user has selected the Order option... if selection == strings.menu_order: # Open the order menu @@ -667,7 +675,7 @@ class ChatWorker(threading.Thread): # Loop used to return to the menu after executing a command while True: # Create a keyboard with the admin main menu based on the admin permissions specified in the db - keyboard = [[strings.menu_user_mode]] + keyboard = [] if self.admin.edit_products: keyboard.append([strings.menu_products]) if self.admin.receive_orders: @@ -675,6 +683,7 @@ class ChatWorker(threading.Thread): if self.admin.create_transactions: keyboard.append([strings.menu_edit_credit]) keyboard.append([strings.menu_transactions, strings.menu_csv]) + keyboard.append([strings.menu_user_mode]) # Send the previously created keyboard to the user (ensuring it can be clicked only 1 time) self.bot.send_message(self.chat.id, strings.conversation_open_admin_menu, reply_markup=telegram.ReplyKeyboardMarkup(keyboard, one_time_keyboard=True), @@ -697,6 +706,8 @@ class ChatWorker(threading.Thread): self.__create_transaction() # If the user has selected the User mode option... elif selection == strings.menu_user_mode: + # Tell the user how to go back to admin menu + self.bot.send_message(self.chat.id, strings.conversation_switch_to_user_mode) # Start the bot in user mode self.__user_menu() # If the user has selected the Transactions option... @@ -804,7 +815,7 @@ class ChatWorker(threading.Thread): # noinspection PyTypeChecker product = db.Product(name=name, description=description, - price=int(price), + price=int(price) if price is not None else None, deleted=False) # Add the record to the database self.session.add(product)