1
Fork 0
mirror of https://github.com/Steffo99/greed.git synced 2025-03-13 12:17:27 +00:00

Merge branch 'master' into bitcoin

This commit is contained in:
Steffo 2020-03-01 23:55:41 +01:00
commit 45d8763d63
3 changed files with 94 additions and 88 deletions

View file

@ -1,9 +1,11 @@
# greed
A customizable Telegram shop bot, developed as a project for the final exam.
![](https://img.shields.io/badge/version-beta-blue.svg)
![](https://img.shields.io/badge/version-beta-blue.svg) ![](https://img.shields.io/badge/maintenance-passively--maintained-yellowgreen)
## Requirements
* Python 3.6 (or higher)
* The packages specified in `requirements.txt` (install with `pip install -r requirements.txt`)
* An Internet connection
@ -12,6 +14,7 @@ A customizable Telegram shop bot, developed as a project for the final exam.
* _Optional: a [sentry.io](https://sentry.io) token_
## Installation
1. Download the project files through `git clone https://github.com/Steffo99/greed.git` or [this link](https://github.com/Steffo99/greed/archive/master.zip).
2. Install the project requirements with `pip install -r requirements.txt`
3. Run `python -OO core.py` to generate the configuration file.
@ -23,10 +26,19 @@ Ensure the `is_template` field is set to `no`.
8. Open Telegram, and send a `/start` command to your bot to be promoted to administrator.
## Usage
All the bot features are available through Telegram.
All the bot features are available through Telegram.
As the administrator, you can add new products, check the placed orders, create new transactions and generate .csv log files.
Users will be able to add credit to their wallet, place orders and contact you in case they require assistance.
## Documentation
`greed` currently does not have a documentation page, but you can try to read the [paper](https://docs.google.com/document/d/1f4MKVr0B7RSQfWTSa_6ZO0LM4nPpky_GX_qdls3EHtQ/edit?usp=sharing) (in Italian) I wrote for my final Scuola Superiore exam about it.
## Forks
> Please note that @Steffo99, the developer of `greed`, does not endorse any of these forks.
### Bitcoin - Blockonomics
[DarrenWestwood](https://github.com/DarrenWestwood) is currently maintaining a [`greed`](https://github.com/DarrenWestwood/greed) fork with **Bitcoin support** through [Blockonomics](https://www.blockonomics.co/).

View file

@ -1,7 +1,7 @@
# Strings / localization file for greed
# Can be edited, but DON'T REMOVE THE REPLACEMENT FIELDS (words surrounded by {curly braces})
# English translation by https://github.com/DarrenWestwood
# Part of the translation by https://github.com/DarrenWestwood
# Currency symbol
currency_symbol = ""
@ -25,7 +25,7 @@ product_format_string = "<b>{name}</b>\n" \
order_number = "Order #{id}"
# Order info string, shown to the admins
order_format_string = "of {user}\n" \
order_format_string = "by {user}\n" \
"Created on {date}\n" \
"\n" \
"{items}\n" \
@ -41,8 +41,8 @@ user_order_format_string = "{status_emoji} <b>Order {status_text}</b>\n" \
"Notes: {notes}\n"
# Transaction page is loading
loading_transactions = "<i>Loading current transactions...\n" \
"Please wait for a few seconds...</i>"
loading_transactions = "<i>Loading transactions...\n" \
"Please wait a few seconds.</i>"
# Transactions page
transactions_page = "Page <b>{page}</b>:\n" \
@ -52,51 +52,50 @@ transactions_page = "Page <b>{page}</b>:\n" \
# transactions.csv caption
csv_caption = "A 📄 .csv file containing all transactions stored in the bot database was generated.\n" \
"You can open this file with other programs, such as LibreOffice Calc, to process" \
" data."
" the data."
# Conversation: the start command was sent and the bot should welcome the user
conversation_after_start = "Hello!\n" \
"Welcome to greed!\n" \
"What you see here is the 🅱️ <b>Beta</b> version of the software.\n" \
"It is fully usable, but it is possible that some bugs are still present.\n" \
"If you find any, you can collaborate with the developer to solve them, describing what" \
" happened at https://github.com/Steffo99/greed/issues."
"This is the 🅱️ <b>Beta</b> version of the software.\n" \
"It is fully usable, but there may be some bugs are still present.\n" \
"If you find any, please report them at https://github.com/Steffo99/greed/issues."
# Conversation: to send an inline keyboard you need to send a message with it
conversation_open_user_menu = "What would you like to do?\n" \
"💰 You have <b>{credit}</b> in your wallet.\n" \
"\n" \
"<i>Press a key on the keyboard at the bottom to select an operation.\n" \
"If the keyboard has not opened, you can open it by pressing the button with four small squares" \
" in the message bar.</i>"
"<i>Press a key on the bottom keyboard to select an operation.\n" \
"If the keyboard has not opened, you can open it by pressing the button with four small" \
" squares in the message bar.</i>"
# Conversation: like above, but for administrators
conversation_open_admin_menu = "You are 💼 <b>Admin</b> of this store!\n" \
conversation_open_admin_menu = "You are a 💼 <b>Manager</b> of this store!\n" \
"What would you like to do?\n" \
"\n" \
"<i>to select an operation, Press a key on the keyboard at the bottom.\n" \
"If the keyboard has not opened, you can open it by pressing the button with four small squares" \
" in the message bar.</i>"
"<i>Press a key on the bottom keyboard to select an operation.\n" \
"If the keyboard has not opened, you can open it by pressing the button with four small" \
" squares in the message bar.</i>"
# Conversation: select a payment method
conversation_payment_method = "How do you want to add funds to your wallet?"
# Conversation: select a product to edit
conversation_admin_select_product = "✏️ What product do you want to change?"
conversation_admin_select_product = "✏️ What product do you want to edit?"
# Conversation: select a product to delete
conversation_admin_select_product_to_delete = "❌ What product do you want to delete?"
# Conversation: select a user to edit
conversation_admin_select_user = " Select a user to perform the selected action on."
conversation_admin_select_user = "Select an user to edit."
# Conversation: click below to pay for the purchase
conversation_cart_actions = "<i>Add products to cart by scrolling up and pressing the Add button below" \
" the products you want to buy. When you're done, go back to this message and" \
" press the Done button.</i>"
" the products you want to add to the cart. When you're done, go back to this message and" \
" press the Done button below.</i>"
# Conversation: confirm the cart contents
conversation_confirm_cart = "🛒 Your cart contains these products:\n" \
conversation_confirm_cart = "🛒 Your cart contains the following products:\n" \
"{product_list}" \
"Total: <b>{total_cost}</b>\n" \
"\n" \
@ -105,27 +104,28 @@ conversation_confirm_cart = "🛒 Your cart contains these products:\n" \
# Conversation: the user activated the live orders mode
conversation_live_orders_start = "You are in <b>Live Orders</b> mode\n" \
"All new orders placed by customers will appear in real time in this" \
" chat, and you can mark them as ✅ Completed" \
"All new orders placed by customers will appear in real time in this chat, and you" \
" will be able to mark them as ✅ Completed" \
" or ✴️ Refund the credit to the customer.\n" \
"\n" \
"<i>Press the Stop button below this message to stop the" \
" reception.</i>"
" feed.</i>"
# Conversation: help menu has been opened
conversation_open_help_menu = "What kind of assistance do you want to receive?"
conversation_open_help_menu = "What kind of help do you need?"
# Conversation: confirm promotion to admin
conversation_confirm_admin_promotion = "Are you sure you want to promote this user to 💼 Admin?\n" \
conversation_confirm_admin_promotion = "Are you sure you want to promote this user to 💼 Manager?\n" \
"It is an irreversible action!"
# Conversation: switching to user mode
conversation_switch_to_user_mode = " You are switching to 👤 Customer mode.\n" \
"If you want to go back to the 💼 Admin menu, restart the conversation with /start."
"If you want to go back to the 💼 Manager menu, restart the conversation with /start."
# Notification: the conversation has expired
conversation_expired = "🕐 I haven't received any messages in a while, so I ended the conversation to save resources.\n" \
"If you want to start a new one, re-send the /start command."
conversation_expired = "🕐 I haven't received any messages in a while, so I closed the conversation to save" \
" resources.\n" \
"If you want to start a new one, send a new /start command."
# User menu: order
menu_order = "🛒 Orders"
@ -140,10 +140,10 @@ menu_add_credit = "💵 Add funds"
menu_bot_info = " Bot info"
# User menu: cash
menu_cash = "💵 Cash"
menu_cash = "💵 With cash"
# User menu: credit card
menu_credit_card = "💳 Credit Card"
menu_credit_card = "💳 By credit card"
# User menu: bitcoin
menu_bitcoin = "🛡 Bitcoin"
@ -161,7 +161,7 @@ menu_transactions = "💳 Transaction list"
menu_edit_credit = "💰 Create transaction"
# Admin menu: go to user mode
menu_user_mode = "👤 Press switch to customer mode"
menu_user_mode = "👤 Switch to customer mode"
# Admin menu: add product
menu_add_product = "✨ New product"
@ -173,7 +173,7 @@ menu_delete_product = "❌ Delete product"
menu_cancel = "🔙 Cancel"
# Menu: skip
menu_skip = "Jump"
menu_skip = "Skip"
# Menu: done
menu_done = "✅️ Done"
@ -200,7 +200,7 @@ menu_remove_from_cart = " Remove"
menu_help = "❓ Help / Support"
# Menu: guide
menu_guide = "📖 Manual"
menu_guide = "📖 Guide"
# Menu: next page
menu_next = "▶️ Next"
@ -212,10 +212,10 @@ menu_previous = "◀️ Previous"
menu_contact_shopkeeper = "👨‍💼 Contact the store"
# Menu: generate transactions .csv file
menu_csv = "📄.csv"
menu_csv = "📄 .csv"
# Menu: edit admins list
menu_edit_admins = "🏵 Edit admins"
menu_edit_admins = "🏵 Edit Managers"
# Emoji: unprocessed order
emoji_not_processed = "*️⃣"
@ -242,24 +242,23 @@ text_completed = "completed"
text_refunded = "refunded"
# Add product: name?
ask_product_name = "What should be the product name?"
ask_product_name = "What should the product name be?"
# Add product: description?
ask_product_description = "What should be the product description?"
ask_product_description = "What should the product description be?"
# Add product: price?
ask_product_price = "What should be the product price?\n" \
"Write <code>X</code> if you want the product not for sale yet"
ask_product_price = "What should the product price be?\n" \
"Enter <code>X</code> if don't want the product to be for sale yet."
# Add product: image?
ask_product_image = "🖼 What image do you want the product to have?\n" \
"\n" \
"<i>Send the photo, or if you prefer to leave the product without any picture press the Skip " \
"button below.</i>"
"<i>Send the photo, or Skip this phase and don't add any image.</i>"
# Order product: notes?
ask_order_notes = " Do you want to leave a note along with the order?\n" \
"💼 It will be visible to store admins.\n" \
ask_order_notes = "Would you like to leave a note along with the order?\n" \
"💼 It will be visible to the store Managers.\n" \
"\n" \
"<i>Send a message with the note you want to leave, or press the Skip button below this" \
" message to leave nothing.</i>"
@ -274,14 +273,14 @@ ask_transaction_notes = " Attach a note to this transaction.\n" \
" and to 💼 Admins in the transaction log."
# Edit credit: amount?
ask_credit = "How much do you want to change the customer's credit?\n" \
ask_credit = "How do you want to change the customer's credit?\n" \
"\n" \
"<i>Send a message containing the amount.\n" \
"Put a mark </i><code>+</code><i> if you want to add credit to the customer's account." \
" or a sign </i><code>-</code><i> you want to deduce it.</i>"
"Use the sign </i><code>+</code><i> to add credit to the customer's account," \
" and the sign </i><code>-</code><i> to deduce it.</i>"
# Header for the edit admin message
admin_properties = "<b>Permissions {name}:</b>"
admin_properties = "<b>Permissions of {name}:</b>"
# Edit admin: can edit products?
prop_edit_products = "Edit products"
@ -293,44 +292,43 @@ prop_receive_orders = "Receive orders"
prop_create_transactions = "Manage transactions"
# Edit admin: show on help message?
prop_display_on_help = "Customer Support"
prop_display_on_help = "Show to customer"
# Thread has started downloading an image and might be unresponsive
downloading_image = "I'm downloading your photo!\n" \
"It might take a while... Be patient!\n" \
"I will not be able to answer you while downloading."
"It might take a while... Please be patient!\n" \
"I won't be able to answer you while I'm downloading."
# Edit product: current value
edit_current_value = "The current value is:\n" \
"<pre>{value}</pre>\n" \
"\n" \
"<i>Press the jump button below this message to keep the same value.</i>"
"<i>Press the Skip button below this message to keep the same value.</i>"
# Payment: cash payment info
payment_cash = "You can pay cash at the physical location of the store.\n" \
"Pay at checkout, and provide the store admin with this id:\n" \
payment_cash = "You can pay in cash at the physical location of the store.\n" \
"Pay at checkout, and give this id to the manager:\n" \
"<b>{user_cash_id}</b>"
# Payment: invoice amount
payment_cc_amount = "How many funds do you want to add to your wallet?\n" \
"\n" \
"<i>Select an amount with the buttons below, or enter it manually with the keyboard" \
" normal.</i>"
"<i>Select an amount with the buttons below, or enter it manually with the normal keyboard</i>"
# Payment: add funds invoice title
payment_invoice_title = "Adding funds"
# Payment: add funds invoice description
payment_invoice_description = "Paying this receipt will add {amount} to your wallet."
payment_invoice_description = "Paying this invoice will add {amount} to your wallet."
# Payment: label of the labeled price on the invoice
payment_invoice_label = "Reload"
# Payment: label of the labeled price on the invoice
payment_invoice_fee_label = "Card supplement"
payment_invoice_fee_label = "Transaction fee"
# Notification: order has been placed
notification_order_placed = "A new order has been placed:\n" \
notification_order_placed = "A new order was placed:\n" \
"{order}"
# Notification: order has been completed
@ -350,15 +348,14 @@ refund_reason = "Refund reason:\n" \
"{reason}"
# Info: informazioni sul bot
bot_info = ' This bot uses <a href="https://github.com/Steffo99/greed">greed</a>,' \
' a framework by @Steffo for payments on Telegram released under the' \
bot_info = 'This bot is using <a href="https://github.com/Steffo99/greed">greed</a>,' \
' a framework by @Steffo for Telegram payments released under the' \
' <a href="https://github.com/Steffo99/greed/blob/master/LICENSE.txt">' \
' Affero General Public License 3.0</a>.\n' \
' The source code of this version is available <i>here</i>.\n'
'Affero General Public License 3.0</a>.\n'
# Help: guide
help_msg = "Bot help is available at this address:\n" \
"https://github.com/Steffo99/greed/wiki"
help_msg = "greed's guide is available at this address:\n" \
"https://docs.google.com/document/d/1f4MKVr0B7RSQfWTSa_6ZO0LM4nPpky_GX_qdls3EHtQ/"
# Help: contact shopkeeper
contact_shopkeeper = "Currently, the staff available to provide user assistance is composed of:\n" \
@ -377,13 +374,13 @@ success_order_created = "✅ The order was sent successfully!\n" \
"{order}"
# Success: order was marked as completed
success_order_completed = "✅ You marked the order #{order_id} as completed"
success_order_completed = "✅ You marked the order #{order_id} as completed."
# Success: order was refunded successfully
success_order_refunded = "✴️ Order #{order_id} has been successfully refunded."
success_order_refunded = "✴️ Order #{order_id} was refunded."
# Success: transaction was created successfully
success_transaction_created = "✅ The transaction was created successfully!\n" \
success_transaction_created = "✅ The transaction was successfully created!\n" \
"{transaction}"
# Error: message received not in a private chat
@ -391,37 +388,35 @@ error_nonprivate_chat = "⚠️ This bot only works in private chats."
# Error: a message was sent in a chat, but no worker exists for that chat.
# Suggest the creation of a new worker with /start
error_no_worker_for_chat = "⚠️ The conversation with the bot is interrupted.\n" \
error_no_worker_for_chat = "⚠️ The conversation with the bot was interrupted.\n" \
"To restart it, send the /start command to the bot."
# Error: add funds amount over max
error_payment_amount_over_max = "⚠️ the maximum of funds that can be added in a single transaction is " \
"{max_amount}."
error_payment_amount_over_max = "⚠️ The maximum amount that can be added in a single transaction is {max_amount}."
# Error: add funds amount under min
error_payment_amount_under_min = "⚠️ The minimum of funds that can be added in a single transaction is " \
"{min_amount}."
error_payment_amount_under_min = "⚠️ The minimum amount that can be added in a single transaction is {min_amount}."
# Error: the invoice has expired and can't be paid
error_invoice_expired = "⚠️ This payment has expired and has been canceled. If you still want to add funds, " \
"use the Add menu funds option. "
error_invoice_expired = "⚠️ This invoice has expired and was canceled. If you still want to add funds, use the Add" \
" funds menu option."
# Error: a product with that name already exists
error_duplicate_name = "️⚠️ A product with this name already exists"
error_duplicate_name = "️⚠️ A product with the same name already exists."
# Error: not enough credit to order
error_not_enough_credit = "⚠️ You do not have enough credit to place the order"
error_not_enough_credit = "⚠️ You do not have enough credit to place the order."
# Error: order has already been cleared
error_order_already_cleared = "⚠️ This order has already been processed."
# Error: no orders have been placed, so none can be shown
error_no_orders = "⚠️ You have not placed orders yet, so there is nothing to display."
error_no_orders = "⚠️ You haven't placed any order yet, so there is nothing to display."
# Error: selected user does not exist
error_user_does_not_exist = "⚠️ The selected user does not exist"
error_user_does_not_exist = "⚠️ The selected user does not exist."
# Fatal: conversation raised an exception
fatal_conversation_exception = "☢️ Oh no! An <b>error</b> interrupted this conversation\n" \
"The error was reported to the developer of greed so that he can fix it.\n" \
"To restart the conversation, send the /start command."
"The error was reported to the bot owner so that he can fix it.\n" \
"To restart the conversation, send the /start command again."

View file

@ -353,12 +353,11 @@ refund_reason = "Motivazione del rimborso:\n" \
bot_info = 'Questo bot utilizza <a href="https://github.com/Steffo99/greed">greed</a>,' \
' un framework di @Steffo per i pagamenti su Telegram rilasciato sotto la' \
' <a href="https://github.com/Steffo99/greed/blob/master/LICENSE.txt">' \
'Affero General Public License 3.0</a>.\n' \
'Il codice sorgente di questa versione è disponibile <i>qui</i>.\n'
'Affero General Public License 3.0</a>.\n'
# Help: guide
help_msg = "La guida del bot è disponibile a questo indirizzo:\n" \
"https://github.com/Steffo99/greed/wiki"
"https://docs.google.com/document/d/1f4MKVr0B7RSQfWTSa_6ZO0LM4nPpky_GX_qdls3EHtQ/"
# Help: contact shopkeeper
contact_shopkeeper = "Attualmente, il personale disponibile ad offrire assistenza agli utenti è composto da:\n" \
@ -404,7 +403,7 @@ error_payment_amount_under_min = "⚠️ Il minimo di fondi che possono essere a
# Error: the invoice has expired and can't be paid
error_invoice_expired = "⚠️ Questo pagamento è scaduto ed è stato annullato. Se vuoi ancora aggiungere fondi, " \
"usa l'opzione Aggiungi fondi del menu. "
"usa l'opzione Aggiungi fondi del menu."
# Error: a product with that name already exists
error_duplicate_name = "️⚠️ Esiste già un prodotto con questo nome."
@ -423,5 +422,5 @@ error_user_does_not_exist = "⚠️ L'utente selezionato non esiste."
# Fatal: conversation raised an exception
fatal_conversation_exception = "☢️ Oh no! Un <b>errore</b> ha interrotto questa conversazione.\n" \
"L'errore è stato segnalato allo sviluppatore di greed in modo che possa sistemarlo.\n" \
"L'errore è stato segnalato al proprietario del bot in modo che possa sistemarlo.\n" \
"Per avviare una nuova conversazione, invia il comando /start."