From 98b82e680e8b34a3962a427830bd212ee3bfb765 Mon Sep 17 00:00:00 2001
From: Romain J <romain.ordi@gmail.com>
Date: Tue, 19 Jan 2021 11:40:49 +0100
Subject: [PATCH] Update README.rst

feat(setup): add updater to setup
---
 Makefile        |  2 ++
 README.rst      |  6 ++++--
 tuxbot/setup.py | 38 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index b38fe41..9553e34 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,8 @@ install-dev:
 	$(VENV)/bin/pip install -r dev.requirements.txt
 update:
 	$(VENV)/bin/pip install --upgrade --force-reinstall .
+update_soft:
+	$(VENV)/bin/pip install --upgrade .
 
 # Blackify code
 reformat:
diff --git a/README.rst b/README.rst
index ce7cd26..aa1b513 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,4 @@
-|image0| |image1| |image2|
+|image0| |image1| |image2| |image3|
 
 .. role:: bash(code)
    :language: bash
@@ -87,4 +87,6 @@ To update the whole bot after a :bash:`git pull`, just execute
 
 .. |image0| image:: https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10-%23007ec6
 .. |image1| image:: https://img.shields.io/badge/dynamic/json?color=%23dfb317&label=issues&query=%24.open_issues_count&suffix=%20open&url=https%3A%2F%2Fgit.gnous.eu%2Fapi%2Fv1%2Frepos%2FGnousEU%2Ftuxbot-bot%2F
-.. |image2| image:: https://img.shields.io/badge/code%20style-black-000000.svg
\ No newline at end of file
+.. |image2| image:: https://img.shields.io/badge/code%20style-black-000000.svg
+.. |image3| image:: https://wakatime.com/badge/github/Rom1-J/tuxbot-bot.svg
+    :target: https://wakatime.com/badge/github/Rom1-J/tuxbot-bot
diff --git a/tuxbot/setup.py b/tuxbot/setup.py
index fc95d6b..46bafbe 100644
--- a/tuxbot/setup.py
+++ b/tuxbot/setup.py
@@ -1,11 +1,14 @@
 import argparse
 import importlib
+import json
 import logging
+import os
 import re
 import sys
 from argparse import Namespace
 from pathlib import Path
 from typing import Union, List
+from urllib.request import urlopen
 
 from rich.prompt import Prompt, IntPrompt
 from rich.console import Console
@@ -13,6 +16,7 @@ from rich.rule import Rule
 from rich.style import Style
 from rich.traceback import install
 
+from tuxbot import version_info
 from tuxbot.core.config import set_for, set_for_key
 from tuxbot.logging import formatter
 from tuxbot.core.utils.data_manager import config_dir, app_dir, cogs_data_path
@@ -396,6 +400,30 @@ def basic_setup() -> None:
     )
 
 
+def update() -> None:
+    response = (
+        urlopen(
+            "https://api.github.com/repos/Rom1-J/tuxbot-bot/commits/master"
+        )
+        .read()
+        .decode("utf-8")
+    )
+
+    json_response = json.loads(response)
+
+    if json_response.get("sha")[:6] == version_info.build:
+        print(
+            "Nothing to update, you can run `tuxbot [instance_name]` "
+            "to start the bot"
+        )
+    else:
+        print(f"Updating to {json_response.get('sha')[:6]}...")
+
+        os.popen("/usr/bin/git pull")
+
+        print("Done!")
+
+
 def parse_cli_flags(args: list) -> Namespace:
     """Parser for cli values.
 
@@ -423,6 +451,12 @@ def parse_cli_flags(args: list) -> Namespace:
         nargs="+",
         help="Execute setup to additional configs",
     )
+    parser.add_argument(
+        "-U",
+        "--update",
+        action="store_true",
+        help="Check for update",
+    )
 
     args = parser.parse_args(args)
 
@@ -433,6 +467,10 @@ def setup() -> None:
     cli_flags = parse_cli_flags(sys.argv[1:])
 
     try:
+        if cli_flags.update:
+            update()
+            sys.exit()
+
         # Create a new instance.
         level = logging.DEBUG
         base_logger = logging.getLogger("tuxbot")