diff --git a/strings.py b/strings.py index 8e27e26..61df650 100644 --- a/strings.py +++ b/strings.py @@ -269,17 +269,20 @@ ask_credit = "Di quanto vuoi modificare il credito del cliente?\n" \ "Metti un segno + se vuoi aggiungere credito all'account del cliente," \ " oppure un segno - se vuoi dedurlo." +# Header for the edit admin message +admin_properties = "Permessi di {name}:" + # Edit admin: can edit products? -ask_edit_products = "Vuoi che questo 💼 Gestore sia autorizzato a modificare la configurazione dei prodotti?" +prop_edit_products = "Modifica prodotti" # Edit admin: can receive orders? -ask_receive_orders = "Vuoi che questo 💼 Gestore sia autorizzato a ricevere e gestire gli ordini?" +prop_receive_orders = "Gestisci ordini" # Edit admin: can create transactions? -ask_create_transactions = "Vuoi che questo 💼 Gestore sia autorizzato a creare nuove transazioni?" +prop_create_transactions = "Crea transazioni" -# Edit admin: should be displayed on help -ask_display_on_help = "Vuoi che questo 💼 Gestore venga visualizzato nella sezione Contatta il negozio?" +# Edit admin: show on help message? +prop_display_on_help = "Assistenza cliente" # Thread has started downloading an image and might be unresponsive downloading_image = "Sto scaricando la tua foto!\n" \ diff --git a/utils.py b/utils.py index 52e67d4..b757511 100644 --- a/utils.py +++ b/utils.py @@ -6,6 +6,7 @@ from strings import currency_format_string, currency_symbol import typing import os import sys +import strings if config["Error Reporting"]["sentry_token"] != \ "https://00000000000000000000000000000000:00000000000000000000000000000000@sentry.io/0000000": @@ -211,3 +212,7 @@ class DuckBot: return self.bot.send_document(*args, **kwargs) # More methods can be added here + + +def boolmoji(boolean: bool): + return strings.emoji_yes if boolean else strings.emoji_no diff --git a/worker.py b/worker.py index 508920d..3590cf8 100644 --- a/worker.py +++ b/worker.py @@ -1126,6 +1126,64 @@ class ChatWorker(threading.Thread): # Delete the created file os.remove(f"transactions_{self.chat.id}.csv") + def __add_admin(self): + """Add an administrator to the bot.""" + # Let the admin select an administrator to promote + user = self.__user_select() + # Check if the user is already an administrator + admin = self.session.query(db.Admin).filter_by(user_id=user.user_id).one_or_none() + if admin is None: + # Create the keyboard to be sent + keyboard = telegram.ReplyKeyboardMarkup([[strings.emoji_yes, strings.emoji_no]]) + # Ask for confirmation + self.bot.send_message(self.chat.id, strings.conversation_confirm_admin_promotion, reply_markup=keyboard) + # Wait for an answer + selection = self.__wait_for_specific_message([strings.emoji_yes, strings.emoji_no]) + # Proceed only if the answer is yes + if selection == strings.emoji_no: + return + # Create a new admin + admin = db.Admin(user=user, + edit_products=False, + receive_orders=False, + create_transactions=False, + is_owner=False, + display_on_help=False) + # Send the empty admin message and record the id + message = self.bot.send_message(self.chat.id, strings.admin_properties.format(name=str(admin.user))) + # Start accepting edits + while True: + # Create the inline keyboard with the admin status + inline_keyboard = telegram.InlineKeyboardMarkup([ + [telegram.InlineKeyboardButton(f"{utils.boolmoji(admin.edit_products)} {strings.prop_edit_products}", + callback_data="toggle_edit_products")], + [telegram.InlineKeyboardButton(f"{utils.boolmoji(admin.receive_orders)} {strings.prop_receive_orders}", + callback_data="toggle_receive_orders")], + [telegram.InlineKeyboardButton( + f"{utils.boolmoji(admin.create_transactions)} {strings.prop_create_transactions}", + callback_data="toggle_create_transactions")], + [telegram.InlineKeyboardButton( + f"{utils.boolmoji(admin.display_on_help)} {strings.prop_display_on_help}", + callback_data="toggle_display_on_help")], + [telegram.InlineKeyboardButton(strings.menu_done, callback_data="cmd_done")] + ]) + # Update the inline keyboard + self.bot.edit_message_reply_markup(message, reply_markup=inline_keyboard) + # Wait for an user answer + callback = self.__wait_for_inlinekeyboard_callback() + # Toggle the correct property + if callback.data == "toggle_edit_products": + admin.edit_products = not admin.edit_products + elif callback.data == "toggle_receive_orders": + admin.receive_orders = not admin.receive_orders + elif callback.data == "toggle_create_transactions": + admin.create_transactions = not admin.create_transactions + elif callback.data == "toggle_display_on_help": + admin.display_on_help = not admin.display_on_help + elif callback.data == "cmd_done": + break + self.session.commit() + def __graceful_stop(self, stop_trigger: StopSignal): """Handle the graceful stop of the thread.""" # If the session has expired...