From bb9e8b5cc89abd470f3e19b538e7498779ff08b4 Mon Sep 17 00:00:00 2001 From: Davte Date: Sun, 3 May 2020 16:56:59 +0200 Subject: [PATCH] Support module execution --- README.md | 50 +++++++++++++++++----------- ciclopibot/__init__.py | 2 +- ciclopibot/__main__.py | 53 ++++++++++++++++++++++++++++++ ciclopibot/bot.py | 74 +++++++++++++++++++++++++++++------------- install.sh | 12 +++---- setup.py | 1 + 6 files changed, 144 insertions(+), 48 deletions(-) create mode 100644 ciclopibot/__main__.py diff --git a/README.md b/README.md index ed3411f..b1ae2e4 100644 --- a/README.md +++ b/README.md @@ -11,25 +11,37 @@ Send [`/start`](https://t.me/ciclopibot?start=00help) [@CicloPiBot](https://t.me * Ask for `/ciclopi` information ### "Server" side -* Clone this repository -```bash -git clone ssh://git@gogs.davte.it:8445/Davte/ciclopibot.git -# git clone https://gogs.davte.it/Davte/ciclopibot.git -# git clone git@github.com:Davte/ciclopibot.git -# git clone https://github.com/Davte/ciclopibot.git -``` -* Run `install.sh`: it will help you perform the following operations. - * Put a Telegram bot token in gitignored `data/passwords.py` module. - * To get a token, ask [@BotFather](https://t.me/botfather). - * The bot whose token you use will act as [@CicloPiBot](https://t.me/ciclopibot) as long as you run the script. - * Create a python3.5+ virtual environment and install requirements. - * Specify `python_virtual_environment` and `python_script` variables in `my_config.sh` -* Run `run_me.sh` -```bash -bash run_me.sh; -``` -* You may edit the file and test your code with your bot. -* Should you be satisfied of your edits enough, you may fork this repository and open a pull request. +You may choose between method 1 (`pip`) and method 2 (`git`). +1. Using `pip` + * Install ciclopibot + ```bash + pip install ciclopibot + ``` + * Run ciclopibot as module + ```bash + python -m ciclopibot -h # Get help + python -m ciclopibot + ``` +1. Using `git` + * Clone this repository + ```bash + git clone ssh://git@gogs.davte.it:8445/Davte/ciclopibot.git + # git clone https://gogs.davte.it/Davte/ciclopibot.git + # git clone git@github.com:Davte/ciclopibot.git + # git clone https://github.com/Davte/ciclopibot.git + ``` + * Run `install.sh`: it will help you perform the following operations. + * Put a Telegram bot token in gitignored `data/passwords.py` module. + * To get a token, ask [@BotFather](https://t.me/botfather). + * The bot whose token you use will act as [@CicloPiBot](https://t.me/ciclopibot) as long as you run the script. + * Create a python3.5+ virtual environment and install requirements. + * Specify `python_virtual_environment` and `python_script` variables in `my_config.sh` + * Run `run_me.sh` + ```bash + bash run_me.sh; + ``` + * You may edit the file and test your code with your bot. + * Should you be satisfied of your edits enough, you may fork this repository and open a pull request. ## Credits * [Davte](https://www.davte.it) is the creator and the main author of this repository. diff --git a/ciclopibot/__init__.py b/ciclopibot/__init__.py index cf7aa23..6208c8b 100644 --- a/ciclopibot/__init__.py +++ b/ciclopibot/__init__.py @@ -3,7 +3,7 @@ __author__ = "Davide Testa" __email__ = "davide@davte.it" __license__ = "GNU General Public License v3.0" -__version__ = "1.1.17" +__version__ = "1.2.0" __maintainer__ = "Davide Testa" __contact__ = "t.me/davte" diff --git a/ciclopibot/__main__.py b/ciclopibot/__main__.py new file mode 100644 index 0000000..d1afbf3 --- /dev/null +++ b/ciclopibot/__main__.py @@ -0,0 +1,53 @@ +"""Run a local copy of CicloPiBot.""" + +# Standard library modules +import argparse + +# Project modules +from . import bot + + +def main(): + # Parse command-line arguments + cli_parser = argparse.ArgumentParser(description=__doc__, + allow_abbrev=False) + cli_parser.add_argument('--bot_token', '--token', '--t', type=str, + default=None, + required=False, + help='telegram bot token') + cli_parser.add_argument('--path', type=str, + default=None, + required=False, + help='path where data should be stored') + cli_parser.add_argument('--log_file_name', '--log', type=str, + default=None, + required=False, + help='file to store full log') + cli_parser.add_argument('--errors_file_name', '--err', type=str, + default=None, + required=False, + help='file to store error log') + cli_parser.add_argument('--local_host', '--host', type=str, + default=None, + required=False, + help='local host address for linked web-app') + cli_parser.add_argument('--port', type=int, + default=None, + required=False, + help='local host port for linked web-app') + cli_parser.add_argument('--hostname', type=str, + default=None, + required=False, + help='host name for webhooks') + cli_parser.add_argument('--certificate', type=str, + default=None, + required=False, + help='certificate for webhooks') + cli_arguments = vars(cli_parser.parse_args()) + bot.main( + **cli_arguments + ) + + +if __name__ == '__main__': + main() diff --git a/ciclopibot/bot.py b/ciclopibot/bot.py index ea6aa53..fa1d662 100644 --- a/ciclopibot/bot.py +++ b/ciclopibot/bot.py @@ -10,34 +10,64 @@ import davtelepot # Project modules from . import ciclopi, messages -from .data.passwords import bot_token from .messages import ( default_help_messages, language_messages, supported_languages ) -def main(): - path = os.path.dirname( - os.path.abspath( - __file__ +def main(bot_token: str = None, + path: str = None, + log_file_name: str = None, + errors_file_name: str = None, + local_host: str = None, + port: int = None, + hostname: str = None, + certificate: str = None): + if bot_token is None: + try: + from .data.passwords import bot_token + except ImportError: + logging.error( + "Missing bot token. Create a bot with t.me/BotFather and " + "provide its token here to run a local copy of CicloPiBot." + ) + return + if path is None: + path = os.path.dirname( + os.path.abspath( + __file__ + ) ) - ) - try: - from .data.config import log_file_name - except ImportError: - log_file_name = 'CicloPi.info.log' - try: - from .data.config import errors_file_name - except ImportError: - errors_file_name = 'CicloPi.errors.log' - try: - from .data.config import local_host, port - except ImportError: - local_host, port = '127.0.0.1', 3000 - try: - from .data.config import hostname, certificate - except ImportError: - hostname, certificate = '', None + if log_file_name is None: + try: + from .data.config import log_file_name + except ImportError: + log_file_name = 'CicloPi.info.log' + if errors_file_name is None: + try: + from .data.config import errors_file_name + except ImportError: + errors_file_name = 'CicloPi.errors.log' + if local_host is None: + try: + from .data.config import local_host + except ImportError: + local_host = 'localhost' + if port is None: + try: + from .data.config import port + except ImportError: + port = 3000 + if hostname is None: + try: + from .data.config import hostname + except ImportError: + hostname = '' + if certificate is None: + try: + from .data.config import certificate + except ImportError: + certificate = None log_file = f"{path}/data/{log_file_name}" errors_file = f"{path}/data/{errors_file_name}" diff --git a/install.sh b/install.sh index 9051c71..525e470 100755 --- a/install.sh +++ b/install.sh @@ -1,15 +1,15 @@ #!/bin/bash # Get current directory -this_script_directory=$(cd `dirname $0` && pwd); -cd "$this_script_directory"; +this_script_directory=$(cd "$(dirname "$0")" && pwd); +cd "$this_script_directory" || exit 1; configuration_file="$this_script_directory/my_config.sh"; passwords_file="$this_script_directory/ciclopibot/data/passwords.py"; # Create intermediate path for passwords_file, if it does not exist -mkdir -p "$this_script_directory/ciclopibot/data/"; +mkdir -r "$this_script_directory/ciclopibot/data/"; -read -p "Enter a name for your virtual environment +read -r "Enter a name for your virtual environment " venv_name; python3 -m venv "$venv_name"; "$venv_name"/bin/pip install -r "$this_script_directory/requirements.txt"; @@ -18,8 +18,8 @@ python3 -m venv "$venv_name"; # Other systems may require a different path. echo "python_virtual_environment=\"$(pwd)/$venv_name/bin\";" >> "$configuration_file"; echo "python_script=\"$this_script_directory/ciclopibot/bot.py\";" >> "$configuration_file"; -read -p "Enter a valid Telegram bot token " bot_token; -echo "bot_token = \"$bot_token\"" >> $passwords_file; +read -r "Enter a valid Telegram bot token " bot_token; +echo "bot_token = \"$bot_token\"" >> "$passwords_file"; # Run bot bash run_me.sh; diff --git a/setup.py b/setup.py index 41e7491..8bf6cc7 100644 --- a/setup.py +++ b/setup.py @@ -57,6 +57,7 @@ setuptools.setup( install_requires=[ 'davtelepot', ], + python_requires='>=3.5', classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console",