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)