A customizable, multilanguage Telegram shop bot with Telegram Payments support

Overview

Greed

A customizable, multilanguage Telegram shop bot with Telegram Payments support!

Demo

Send a message to @greedtestbot on Telegram to view a demo of the bot in action!

Use the special credit card number 4242 4242 4242 4242 to add unlimited credit to your account.

Screenshots

Installation

This installation procedure assumes you are on a Linux system, using bash and have python3.8 installed.

Requirements

Consider renting a VPS to host the bot on; a cheap one should do, as greed is pretty lightweight! :)

Steps

  1. Download the project files by running:

    git clone https://github.com/Steffo99/greed.git
  2. Enter the newly created folder:

    cd greed
  3. Create a new virtualenv:

    python3.8 -m venv venv
  4. Activate the virtualenv:

    source venv/bin/activate
  5. Install the project requirements:

    pip install -r requirements.txt
  6. Optional: For colored console output, install coloredlogs:

    pip install coloredlogs
  7. Generate the configuration file:

    python -OO core.py
  8. Edit the configuration file, adding your bot and payment tokens to it:

    nano config/config.toml

    (Press Ctrl+X and then two times Enter to save and quit nano.)

  9. Optional: customize the files in the strings folder for custom messages.

  10. Start the bot:

    python -OO core.py
  11. Open Telegram, and send a /start command to your bot to be automatically promoted to 💼 Manager.

  12. Stop the bot by pressing Ctrl+C.

Running the bot

After the installation, to run the bot, you'll need to:

  1. Activate the virtualenv (if it's not already activated in the current console session):

    source venv/bin/activate
  2. Start the bot:

    python -OO core.py

Keep the bot running

If you want to keep the bot open even after you closed your terminal window, you'll need to use some external program.

Some of them are:

  • screen (easier, but doesn't restart automatically)
  • systemd (recommended, but more difficult)

screen

  1. Open a screen that will be running the bot with the following command:
    screen venv/bin/python -OO core.py
    To safely detach the screen, press Ctrl+A and then Ctrl+D.

systemd

Assuming you downloaded greed in /srv/greed:

  1. Create a new user named greed:

    useradd greed --system
  2. Give ownership of the greed folder you downloaded earlier to the greed user:

    chown -R greed: /srv/greed
  3. Create a new file in /etc/systemd/system named bot-greed.service with the following contents:

    [Unit]
    Name=bot-greed
    Description=Greed Bot
    Wants=network-online.target
    After=network-online.target nss-lookup.target
    
    [Service]
    Type=exec
    User=greed
    WorkingDirectory=/srv/greed
    ExecStart=/srv/greed/venv/bin/python -OO /srv/greed/core.py
    Environment=PYTHONUNBUFFERED=1
    
    [Install]
    WantedBy=multi-user.target
  4. Start the bot-greed service:

    systemctl start bot-greed
  5. If everything goes well, enable the bot-greed service, so it will automatically start on a reboot:

    systemctl enable bot-greed   

Updating

To update the bot, run the following commands:

git stash
git pull
git stash pop

If you're using an older version of greed, you may need to recreate the configuration, as greed won't use config.ini anymore and will use config.toml instead.

Usage

All features can be accessed through the Telegram bot chat.

As a 💼 Manager, you can add new products, check the placed orders, create new transactions and generate .csv log files.
You can also add additional 💼 Managers.

Users will be able to add credit to their wallet, place orders and contact you in case they require assistance.

Documentation and help

If you find a bug, have an idea for a new feature or just require help with greed, please post an issue or open a discussion on GitHub, or, if GitHub is blocked in your country, send me an email at [email protected]!

If you can read Italian, you can try to read the paper I wrote about greed for my final High School exam.

If you are proficient in Python, you can also try reading the code. Most of the bot interactions can be found in the worker.py file, so try to have a look there.

Forks

Some people made a copy of Greed and added or changed some things to it (they made a fork).
These forks are listed below.

Please note that @Steffo99, the main developer of greed, does not endorse any of these forks.
Do not file bug reports here for bugs in a fork!

Bitcoin - Blockonomics

DarrenWestwood is currently maintaining a greed fork adding Bitcoin support through Blockonomics.

Comments
  • Bot crashing. Exception in sqlite (Database is locked)

    Bot crashing. Exception in sqlite (Database is locked)

    How to reproduce:

    • /start as an Administrator
    • Go to "📦 Orders"
    • Click "🛑 Stop" to stop live orders.
    • Click "👤 Switch to customer mode"
    • Click "🛒 Order products"
    • Click "🔙 Cancel"
    • Send /start command to go back to Administrator menu

    CRASH. Sqlite exception. Database is locked.

    Exception in <Worker 763512861>: (sqlite3.OperationalError) database is locked [SQL: UPDATE admins SET live_mode=? WHERE admins.user_id = ?] [parameters: (0, 763512861)] (Background on this error at: http://sqlalche.me/e/13/e3q8)

    bug 
    opened by mastersuv 17
  • Timed out while calling get_updates()

    Timed out while calling get_updates()

    $ sudo python3 -OO core.py

    greed-bot is now starting! Timed out while calling get_updates(), retrying in 1 secs... Exception in thread Worker 411164928: Traceback (most recent call last): File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context context) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/default.py", line 509, in do_execute cursor.execute(statement, parameters) sqlite3.OperationalError: no such table: users

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner self.run() File "/home/ubuntu/tlgrm_shop/worker.py", line 64, in run self.user = self.session.query(db.User).filter(db.User.user_id == self.chat.id).one_or_none() File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/orm/query.py", line 2917, in one_or_none ret = list(self) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/orm/query.py", line 2988, in iter return self._execute_and_instances(context) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/orm/query.py", line 3011, in _execute_and_instances result = conn.execute(querycontext.statement, self._params) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 948, in execute return meth(self, multiparams, params) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/sql/elements.py", line 269, in _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1060, in _execute_clauseelement compiled_sql, distilled_params File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1200, in _execute_context context) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1413, in _handle_dbapi_exception exc_info File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/util/compat.py", line 265, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/util/compat.py", line 248, in reraise raise value.with_traceback(tb) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context context) File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/default.py", line 509, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users [SQL: 'SELECT users.user_id AS users_user_id, users.first_name AS users_first_name, users.last_name AS users_last_name, users.username AS users_username, users.credit AS users_credit \nFROM users \nWHERE users.user_id = ?'] [parameters: (411164928,)] (Background on this error at: http://sqlalche.me/e/e3q8)

    Timed out while calling get_updates(), retrying in 1 secs... Timed out while calling get_updates(), retrying in 1 secs...

    question 
    opened by ismoil-nosr 17
  • Bitcoin payments

    Bitcoin payments

    Integrating Bitcoin

    1. If you plan on accepting Bitcoin payments, enter your Blockonomics api key into the config.ini file: https://www.blockonomics.co/merchants#/

    2. In order to receive notifications of Bitcoin payments, you are required to deploy your bot in order to receive a public url where webhooks can be delivered to Greed Bot.

    For testing ngrok https://ngrok.com/download works well:

    • Run the following command in a new terminal:./ngrok http 5000
    • Look at the "Forwarding" line to see your unique Ngrok domain name eg. https://greed.ngrok.io/

    For production gunicorn can be used https://pypi.org/project/gunicorn:

    • Run the following command to launch Greed Bot: gunicorn --workers=1 core:app or add web: gunicorn --workers=1 core:app to your Procfile Once Greed Bot is running and you have received your public url eg. https://greed.herokuapp.com/

    Callback URL

    • Add callback?secret=YOUR_SECRET_HERE_ to the end of your URL. eg. https://greed.herokuapp.com/callback?secret=YOUR_SECRET_HERE_, replacing with the secret entered in your config.ini file.
    • Set this url as the HTTP Callback URL in your Blockonomics account: https://www.blockonomics.co/merchants#/page3
    feature 
    opened by DarrenWestwood 6
  • SQLite Error: no such table.

    SQLite Error: no such table.

    Steps to reproduce:

    1. Download current build
    2. Unpack and install dependencies
    3. Start the bot

    When issuing /start in Telegram the bot produces with the following error:

    Exception in thread Worker 661051424:
    Traceback (most recent call last):
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
        context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute
        cursor.execute(statement, parameters)
    sqlite3.OperationalError: no such table: users
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
        self.run()
      File "/home/ubuntu/greed-master/worker.py", line 64, in run
        self.user = self.session.query(db.User).filter(db.User.user_id == self.chat.id).one_or_none()
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 2924, in one_or_none
        ret = list(self)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 2995, in __iter__
        return self._execute_and_instances(context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3018, in _execute_and_instances
        result = conn.execute(querycontext.statement, self._params)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 948, in execute
        return meth(self, multiparams, params)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 269, in _execute_on_connection
        return connection._execute_clauseelement(self, multiparams, params)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1060, in _execute_clauseelement
        compiled_sql, distilled_params
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1200, in _execute_context
        context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1413, in _handle_dbapi_exception
        exc_info
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 265, in raise_from_cause
        reraise(type(exception), exception, tb=exc_tb, cause=cause)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 248, in reraise
        raise value.with_traceback(tb)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
        context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute
        cursor.execute(statement, parameters)
    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users [SQL: 'SELECT users.user_id AS users_user_id, users.first_name AS users_first_name, users.last_name AS users_last_name, users.username AS users_username, users.credit AS users_credit \nFROM users \nWHERE users.user_id = ?'] [parameters: (661051424,)] (Background on this error at: http://sqlalche.me/e/e3q8)
    

    Tried running the database generation script and then running the bot, the error persists.

    [[email protected] greed-master]$ python3.6 -OO database.py
    [[email protected] greed-master]$ python3.6 -OO core.py
    greed-bot is now starting!
    Timed out while calling get_updates(), retrying in 1 secs...
    Timed out while calling get_updates(), retrying in 1 secs...
    Exception in thread Worker 661051424:
    Traceback (most recent call last):
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
        context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute
        cursor.execute(statement, parameters)
    sqlite3.OperationalError: no such table: users
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
        self.run()
      File "/home/ubuntu/greed-master/worker.py", line 64, in run
        self.user = self.session.query(db.User).filter(db.User.user_id == self.chat.id).one_or_none()
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 2924, in one_or_none
        ret = list(self)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 2995, in __iter__
        return self._execute_and_instances(context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3018, in _execute_and_instances
        result = conn.execute(querycontext.statement, self._params)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 948, in execute
        return meth(self, multiparams, params)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 269, in _execute_on_connection
        return connection._execute_clauseelement(self, multiparams, params)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1060, in _execute_clauseelement
        compiled_sql, distilled_params
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1200, in _execute_context
        context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1413, in _handle_dbapi_exception
        exc_info
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 265, in raise_from_cause
        reraise(type(exception), exception, tb=exc_tb, cause=cause)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 248, in reraise
        raise value.with_traceback(tb)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
        context)
      File "/home/ubuntu/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute
        cursor.execute(statement, parameters)
    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users [SQL: 'SELECT users.user_id AS users_user_id, users.first_name AS users_first_name, users.last_name AS users_last_name, users.username AS users_username, users.credit AS users_credit \nFROM users \nWHERE users.user_id = ?'] [parameters: (661051424,)] (Background on this error at: http://sqlalche.me/e/e3q8)
    

    [[email protected] greed-master]$ python -V Python 2.7.15rc1 [[email protected] greed-master]$ python3 -V Python 3.6.6

    bug 
    opened by ripinet5 6
  • Feature: Allow disabling cash payments

    Feature: Allow disabling cash payments

    Describe the proposed feature

    I noticed that if you change in the config/config.toml credit_card_token = "" The credit card option disappears from the users' menu, is there a way to remove the cash as well?

    Amazing job by the way, thank you so much for this bot, sir.

    Reasoning

    No response

    Additional information

    No response

    feature 
    opened by cpbreeze 5
  • Feature: Publish docker image on DockerHub

    Feature: Publish docker image on DockerHub

    Describe the proposed feature

    Just publish the builded docker images on dockerhub

    Reasoning

    Publishing this image in docker hub will make easier to install it as a service in some environments like Unraid.

    Additional information

    No response

    feature 
    opened by yayitazale 4
  • Error

    Error

    2021-07-09 17:12:42 | Core | core | @ThisPCShopBot is starting! 2021-07-09 17:12:43 | Core | duckbot | Telegram error while calling get_updates(), retrying in 5 secs... Full error: Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first Traceback (most recent call last): File "/home/runner/telegramshop/duckbot.py", line 22, in result_func return func(*args, **kwargs) File "/home/runner/telegramshop/duckbot.py", line 82, in get_updates return self.bot.get_updates(*args, **kwargs) File "/home/runner/telegramshop/venv/lib/python3.8/site-packages/telegram/bot.py", line 127, in decorator result = func(*args, **kwargs) File "/home/runner/telegramshop/venv/lib/python3.8/site-packages/telegram/bot.py", line 2761, in get_updates result = self._post( File "/home/runner/telegramshop/venv/lib/python3.8/site-packages/telegram/bot.py", line 259, in _post return self.request.post( File "/home/runner/telegramshop/venv/lib/python3.8/site-packages/telegram/utils/request.py", line 350, in post result = self._request_wrapper( File "/home/runner/telegramshop/venv/lib/python3.8/site-packages/telegram/utils/request.py", line 277, in _request_wrapper raise Conflict(message) telegram.error.Conflict: Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first

    bug 
    opened by CocaColaSRL 4
  • Scape of the keys in file string

    Scape of the keys in file string

    I tried to insert some strings of my own in the language files, but as braces called "{...}" it doesn't work in the new messages I created even following a syntax, maybe it is an error in the localization.py formation

    Steps to reproduce the behavior:

    1. Go to wathever string file
    2. try create a new message format using the standard keys
    3. when a tested the key did showed, like "{name}", but works in messages that were already there
    bug 
    opened by tomtomaZ 4
  • Extend order info to all transactions

    Extend order info to all transactions

    1. Fix brief order view from user.
    2. Save order_info to worker.
    3. Save worker.order_info in __order_transaction to db instead of empty row.
    4. Show order_info in full order view for admin.
    5. Hide notes if empty.

    Don't use if you are not sure what you are doing.

    feature 
    opened by valentino-sm 3
  • [via email] Error when making the payment Steffo99/greed

    [via email] Error when making the payment Steffo99/greed

    From: samuel ramirez [email protected]

    2021-05-06 12:46:54 | Worker 1775961268 | worker | Exception in <Worker 177= 5961268>: (sqlite3.IntegrityError) NOT NULL constraint failed: orderitems.o= rder_id [SQL: INSERT INTO orderitems (product_id, order_id) VALUES (?, ?)] [parameters: (1, None)] (Background on this error at: http://sqlalche.me/e/14/gkpj) Traceback (most recent call last): File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\base.py", line 1763, in _execute_context self.dialect.do_execute( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\default.py", line 717, in do_execute cursor.execute(statement, parameters) sqlite3.IntegrityError: NOT NULL constraint failed: orderitems.order_id

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "C:\Users\jsram\greed\worker.py", line 211, in run self.__admin_menu() File "C:\Users\jsram\greed\worker.py", line 926, in __admin_menu self.__user_menu() File "C:\Users\jsram\greed\worker.py", line 468, in __user_menu self.__order_menu() File "C:\Users\jsram\greed\worker.py", line 663, in __order_menu self.__order_transaction(order=3Dorder, value=3D-int(self.__get_cart_va= lue(cart))) File "C:\Users\jsram\greed\worker.py", line 689, in __order_transaction self.session.commit() File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\session.py", line 1428, in commit self._transaction.commit(_to_root=3Dself.future) File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\session.py", line 826, in commit self._prepare_impl() File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\session.py", line 805, in _prepare_impl self.session.flush() File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\session.py", line 3260, in flush self._flush(objects) File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\session.py", line 3400, in flush transaction.rollback(capture_exception=3DTrue) File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\util\langhelpers.py", line 70, in exit compat.raise( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\util\compat.py", line 211, in raise raise exception File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\session.py", line 3360, in _flush flush_context.execute() File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\unitofwork.py", line 453, in execute rec.execute(self) File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\unitofwork.py", line 627, in execute util.preloaded.orm_persistence.save_obj( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\persistence.py", line 242, in save_obj _emit_insert_statements( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\orm\persistence.py", line 1219, in _emit_insert_statements result =3D connection._execute_20( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\base.py", line 1578, in _execute_20 return meth(self, args_10style, kwargs_10style, execution_options) File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\sql\elements.py", line 320, in _execute_on_connection return connection._execute_clauseelement( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\base.py", line 1447, in _execute_clauseelement ret =3D self._execute_context( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\base.py", line 1806, in _execute_context self.handle_dbapi_exception( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\base.py", line 1987, in handle_dbapi_exception util.raise( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\util\compat.py", line 211, in raise raise exception File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\base.py", line 1763, in _execute_context self.dialect.do_execute( File "C:\Users\jsram\AppData\Local\Programs\Python\Python39\lib\site-pack= ages\sqlalchemy\engine\default.py", line 717, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint= failed: orderitems.order_id [SQL: INSERT INTO orderitems (product_id, order_id) VALUES (?, ?)] [parameters: (1, None)] (Background on this error at: http://sqlalche.me/e/14/gkpj) Enviado desde Correohttps://go.microsoft.com/fwlink/?LinkId=3D550986 para= Windows 10

    bug 
    opened by Steffo99 3
  • Full order info

    Full order info

    1. Fix brief text order message to user.
    2. Save order_info to worker.
    3. Save new transaction to db with order_info instead of empty row.
    4. Show order_info in full order view for admin.
    5. Hide notes if empty.

    Full backward compatibility except for three lines in several language files shown for admin order views.

    feature 
    opened by valentino-sm 3
  • Feature: switch to payments for each order

    Feature: switch to payments for each order

    Describe the proposed feature

    Hi

    First of all, thanks for your work I think this is a super nice project.

    I wish to be able to switch from the actual system of adding funds before making orders to a typical system of paying just the amount of each order at the chekout.

    I'm not a python expert but I'll start reviewing the code to see if I can helpt with pull requests.

    Thanks

    Reasoning

    Adding funds can be nice for periodic payments systems, but the usual way to make payments in online stores is to pay on the checkout only for the order amount.

    Additional information

    No response

    feature 
    opened by yayitazale 0
  • Bump certifi from 2020.12.5 to 2022.12.7

    Bump certifi from 2020.12.5 to 2022.12.7

    Bumps certifi from 2020.12.5 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Feature: `linux/arm/v7` support for Raspberry Pi

    Feature: `linux/arm/v7` support for Raspberry Pi

    Describe the proposed feature

    Hey,

    Supporting Raspberry Pi (armhf) would be interesting. You have a great project!

    regards

    Reasoning

    [email protected]:~ $ docker run --volume "$(pwd)/config:/etc/greed" --volume "$(pwd)/strings:/usr/src/greed/strings" --volume "$(pwd)/data:/var/lib/greed" ghcr.io/steffo99/greed
    Unable to find image 'ghcr.io/steffo99/greed:latest' locally
    latest: Pulling from steffo99/greed
    Digest: sha256:3c93908e10f2cf0a1de8e066c62e109ad32386c979bf82ee05dc716364240d5b
    Status: Downloaded newer image for ghcr.io/steffo99/greed:latest
    WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v7) and no specific platform was requested
    

    Additional information

    No response

    feature help wanted 
    opened by semaf 1
  • Add turkish language

    Add turkish language

    [via email, from @atakan0920]

    hello my friend;

    My name is Atakan, your project on github is very nice, but there is no Turkish language option when I review it and I prepared a Turkish language pack for you, I would be glad if you add it to your project  

    help wanted lang 
    opened by Steffo99 0
  • Feature: Demo mode

    Feature: Demo mode

    Describe the proposed feature

    A configurable option which automatically promotes every user to manager, allowing them to test out the features of the bot.

    Additionally, it would regularly wipe its database, so that there will be a greater chance for interested users to see the bot in a clean state.

    Reasoning

    So that users may test Greed without installing it themselves.

    Additional information

    No response

    feature 
    opened by Steffo99 0
Releases(v0.18.0)
  • v0.18.0(Nov 19, 2022)

    Security and feature release!

    :shield: Security

    • Introduced some checks to prevent de-authorized users from accessing menus they were forbidden from using (fe751cb56d8f27d0bfa1b907521a3a5661afed09)

    :sparkles: New features

    • Added configuration option to disable cash payments (#190, Payments.Cash.enable_pay_with_cash)
    • Added configuration option to disable admin transaction creation (#190, Payments.Cash.enable_create_transaction)

    :notebook_with_decorative_cover: Documentation

    • Added warranty and liability disclaimer in the front page of the documentation

    :mag: Full changelog

    Source code(tar.gz)
    Source code(zip)
  • v0.17.1(Jun 9, 2022)

    A new patch release!

    💠 Improvements

    • Better description of product deletion message by @oleg20111511 in https://github.com/Steffo99/greed/pull/175
    • Removed raw calls to Telegram Bot API and replaced them with python-telegram-bot methods by @oleg20111511 in https://github.com/Steffo99/greed/pull/178
    • Fixed an issue when, while editing a product without a price, part of the string would not be localized by @oleg20111511 in https://github.com/Steffo99/greed/pull/178

    :mag: Full changelog

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Mar 28, 2022)

    Since the original release...

    :sparkles: New features

    • Multiple language support by @DarrenWestwood in https://github.com/Steffo99/greed/pull/32
    • Cart summary by @pzhuk in https://github.com/Steffo99/greed/pull/38
    • Allow configuration of currency symbol by @pzhuk in https://github.com/Steffo99/greed/pull/42
    • Configurable payment presets by @pzhuk in https://github.com/Steffo99/greed/pull/40
    • Logging support by @Steffo99 in https://github.com/Steffo99/greed/pull/52
    • Better strings and localization support by @Steffo99 in https://github.com/Steffo99/greed/pull/54
    • Completely rework the configuration system by @Steffo99 in https://github.com/Steffo99/greed/pull/76
    • Support tips by @Steffo99 in https://github.com/Steffo99/greed/pull/124
    • Removed unused imports and refactored imports by @rashidkalwar in https://github.com/Steffo99/greed/pull/145
    • Add Docker support by @Steffo99 in https://github.com/Steffo99/greed/pull/168

    :pirate_flag: New languages

    • :ukraine: by @pzhuk in https://github.com/Steffo99/greed/pull/36, @Trentyn in https://github.com/Steffo99/greed/pull/171 and https://github.com/Steffo99/greed/pull/173
    • :ru: by @pzhuk in https://github.com/Steffo99/greed/pull/41, @Bakx13 in https://github.com/Steffo99/greed/pull/92, @valentino-sm in https://github.com/Steffo99/greed/pull/111 and https://github.com/Steffo99/greed/pull/113, @Trentyn in https://github.com/Steffo99/greed/pull/172
    • :cn: by @zhihuiyuze in https://github.com/Steffo99/greed/pull/68
    • :israel: by @netanelkoli in https://github.com/Steffo99/greed/pull/70
    • :mexico: by @mastersuv in https://github.com/Steffo99/greed/pull/85
    • :brazil: by @eufelipemateus in https://github.com/Steffo99/greed/pull/132

    :bug: Bugfixes

    • Fix cancellable calls by @pzhuk in https://github.com/Steffo99/greed/pull/37
    • Fix typo by @mastersuv in https://github.com/Steffo99/greed/pull/84
    • python-telegram-bot improvements by @valentino-sm in https://github.com/Steffo99/greed/pull/105
    • Fix one-to-one relation warning by @valentino-sm in https://github.com/Steffo99/greed/pull/106
    • Fix sqlalchemy exception by @valentino-sm in https://github.com/Steffo99/greed/pull/114 and https://github.com/Steffo99/greed/pull/11
    • Fix orderitem-order relation warning by @valentino-sm in https://github.com/Steffo99/greed/pull/1185
    • Fix worker admin init by @valentino-sm in https://github.com/Steffo99/greed/pull/126

    :arrow_up: Dependency upgrades

    • Bump urllib3 from 1.26.4 to 1.26.5 by @dependabot in https://github.com/Steffo99/greed/pull/136

    :mag: Full changelog

    Source code(tar.gz)
    Source code(zip)
Secure Tunnel Manager

Making life easy of those who are in need of OpenSource alternative of AWS Secure Tunnel.

Suyash Chavan 1 Sep 27, 2022
Terraform wrapper to manage state across multiple cloud providers(AWS, GCP, and Azure)

Terraform Remote State Manager(tfremote) tf is a python package for managing terraform remote state for: Google(Gcloud), AWS, and Azure. It sets a def

tomarv2 1 Dec 08, 2021
Discord Mafia Game Bot using nextcord

Mafia-Bot Discord Mafia Game Bot using nextcord Features Mafia Game Game Replays Installation Run the following command to install required modules: p

Nian 6 Nov 19, 2022
Louis Manager Bot With Python

✨ Natsuki ✨ Are You Okay Baby I'm Natsuki Unmaintained. The new repo of @TheNatsukiBot is public. ⚡ (It is no longer based on this source code. The co

Team MasterXBots 1 Nov 07, 2021
Braintree Python library

Braintree Python library The Braintree Python library provides integration access to the Braintree Gateway. TLS 1.2 required The Payment Card Industry

Braintree 230 Dec 18, 2022
Script to automatically book a vaccine slot on Doctolib for today or tomorrow, following rules from the French Government.

DOCTOSHOTGUN This script lets you automatically book a vaccine slot on Doctolib for today or tomorrow, following rules from the French Government. Pyt

Romain Bignon 560 Dec 19, 2022
A fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.

Light Gradient Boosting Machine LightGBM is a gradient boosting framework that uses tree based learning algorithms. It is designed to be distributed a

Microsoft 14.5k Jan 08, 2023
Most Advance Trading Bot Support Windows Linux Mac

GUI Pancakeswap 2 and Uniswap 3 SNIPER BOT 🏆 🥇 (MOST ADVANCE TRADING BOT SUPPORT WINDOWS LINUX MAC) (AUTO BUY TOKEN ON LAUNCH AFTER ADD LIQUIDITY) S

1 Dec 26, 2021
The public discord bot, created by: primitt, further developed by: duino-coin team.

Duino Stats Mini A public Duino-Stats Discord bot. Click this link to invite the bot to your server. License Duino Stats Mini distributed under the MI

primboi 8 Mar 14, 2022
Debugging with Stack Overflow: Web Search Behavior in Novice and Expert Programmers

Debugging with Stack Overflow: ICSE SEET, 2022 This is the GitHub repository associated with the 2022 ICSE SEET paper, Debugging with Stack Overflow:

Madeline Endres 1 Jan 31, 2022
Python script to delete old / embarrassing tweets.

Delete Tweets Do you have hundreds of embarrassing tweets on your Twitter profile, that you tweeted over a decade ago as an innocent high schooler, th

Linda Zheng 9 Nov 26, 2022
Yes, it's true :orange_heart: This repository has 346 stars.

Yes, it's true! Inspired by a similar repository from @RealPeha, but implemented using a webhook on AWS Lambda and API Gateway, so it's serverless! If

512 Jan 01, 2023
A telegram bot to monitor the latest NFT price on BSC.

NFT_Monitor This is a telegram bot for monitoring price and ranking of NFT on Binance Smart Chain. Can fetch latest ranking and price in real time. .P

Niko Pang 10 Oct 09, 2022
A mass account list editor for python

Account-List-Editor This is an mass account list editor Usage Run the editor.py file with python (python3 ./editor.py) Press a button (1/2) and drag &

ExtremeDev 1 Dec 20, 2021
Home Assistant custom integration for controlling Powered by Tuya (PBT) devices using Tuya Open API, officially maintained by the Tuya Developer Team.

Tuya Home Assistant Integration Home Assistant custom integration for controlling Powered by Tuya (PBT) devices using Tuya Open API, officially mainta

Tuya 704 Jan 03, 2023
An unoffcial python API client for primeuploads.com

primeuploads-py An unoffcial python API wrapper for primeuploads.com Installation pip3 install primeuploads-py Usage example from prime import PrimeUp

W4RR10R 41 Dec 05, 2022
A modular telegram Python bot running on python3 with an sqlalchemy database.

Saber A modular telegram Python bot running on python3 with an sqlalchemy database. Originally a marie fork - Saber has evolved further and was built

ZERO • アクバル . 4 Nov 09, 2021
A Python script that exports users from one Telegram group to another using one or more concurrent user bots.

ExportTelegramUsers A Python script that exports users from one Telegram group to another using one or more concurrent user bots. Make sure to set all

Fasil Minale 17 Jun 26, 2022
Advance Anonymous Sender bot with Caption Editor

AnonyMous Sender 👨‍💻 Advanced Anonymous Sender with Caption Editor Join @DaisySupport_Official 🎵 for help Features Get forwarded messages without f

Inuka Asith 13 Oct 09, 2022
Métamorphose Renamer v2

Métamorphose 2 Métamorphose is a graphical mass renaming program for files and folders. These are the command line options: -h, --help Show hel

Métamorphose 129 Dec 30, 2022