From 3a33e10038f58e9ee4d2d0f91241d1c553b18126 Mon Sep 17 00:00:00 2001
From: Remy Moll <mollator2@gmail.com>
Date: Wed, 13 May 2020 12:29:17 +0200
Subject: [PATCH] It's alive!

---
 .gitignore |   2 +-
 main.py    | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 182 insertions(+), 1 deletion(-)
 create mode 100644 main.py

diff --git a/.gitignore b/.gitignore
index 45d091c..794b346 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
 # API-Key (keep secret at all times)
-api-key.py
+key.py
 # Byte-compiled / optimized / DLL files
 __pycache__/
 *.py[cod]
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..ed6404d
--- /dev/null
+++ b/main.py
@@ -0,0 +1,181 @@
+# -*- coding: utf-8 -*-
+
+from key import *
+import requests
+import time
+import json
+import datetime
+import googlesearch
+import emoji
+
+chat_members = {}
+base_url = "https://api.telegram.org/bot" + telegram_api + "/"
+chat_id = ""
+offset = 0
+
+start_time = datetime.datetime.now()
+message_read = 0
+message_sent = 0
+
+
+def bot_print_lorem(params):
+    send_message("Lorem ipsum dolor sit amet....")
+
+def bot_print_status(params):
+    delta = str(datetime.datetime.now() - start_time)
+    message = "<pre>Status: Running \nUptime: " + delta + "\nMessages read: " + str(message_read) + "\nMessages sent: " + str(message_sent) + "</pre>"
+    send_message(message)
+
+def bot_show_weather(params):
+    if len(params) != 1:
+        send_message("Invalid Syntax, please give one parameter, the location")
+        return
+    send_message("Probably sunny I guess? Yes yes I'm still learning")
+
+def bot_google_search(params):
+    if len(params) < 1:
+        send_message("Please tell me what to look for")
+        return
+    param_string = ""
+    for word in params:
+        param_string += word + "+"
+    param_string = param_string[:-1]
+    search_url = "https://google.com/search?q=" + param_string
+    try:
+        res = googlesearch.search(param_string.replace("+"," ") ,num=5,start=0,stop=5)
+        send_string = "Google search for <b>" + param_string.replace("+"," ") + "</b>:\n"
+        for url in res:
+            print(url)
+            send_string += url + "\n\n"
+        send_string += "Search url:\n" + search_url
+    except:
+        send_string = "Search url:\n" + search_url
+    send_message(send_string)
+
+
+def bot_print_events(params):
+    events = {
+        "anniversary" : datetime.date(datetime.datetime.now().year,12,7),
+        "valentine's day": datetime.date(datetime.datetime.now().year,2,14),
+        "Marine's birthday": datetime.date(datetime.datetime.now().year,8,31),
+        "Remy's birthday": datetime.date(datetime.datetime.now().year,3,25),
+    }
+    send_string = "Upcoming events: \n"
+    for key in events:
+        delta = events[key] - datetime.date.today()
+        if delta < datetime.timedelta(0):
+            delta += datetime.timedelta(days = 365)
+        send_string += key + ": " + str(delta.days) + " days \n"
+
+    send_message(send_string)
+
+
+def bot_emojify(params):
+
+    if len(params) < 2:
+        send_message(emoji.emojize("Please send a separator as the first argument, and the text afterwards.\nExample:\n/emojify :heart: Example text"))
+    sep = params[0]
+    emoji_dict = {"a" : ":regional_indicator_symbol_letter_a:","b" : ":regional_indicator_symbol_letter_b:","c" : ":regional_indicator_symbol_letter_c:","d" : ":regional_indicator_symbol_letter_d:","e" : ":regional_indicator_symbol_letter_e:","f" : ":regional_indicator_symbol_letter_f:","g" : ":regional_indicator_symbol_letter_g:","h" : ":regional_indicator_symbol_letter_h:","i" : ":regional_indicator_symbol_letter_i:","j" : ":regional_indicator_symbol_letter_j:","k" : ":regional_indicator_symbol_letter_k:","l" : ":regional_indicator_symbol_letter_l:","m" : ":regional_indicator_symbol_letter_m:","n" : ":regional_indicator_symbol_letter_n:","o" : ":regional_indicator_symbol_letter_o:","p" : ":regional_indicator_symbol_letter_p:","q" : ":regional_indicator_symbol_letter_q:","r" : ":regional_indicator_symbol_letter_r:","s" : ":regional_indicator_symbol_letter_s:","t" : ":regional_indicator_symbol_letter_t:","u" : ":regional_indicator_symbol_letter_u:","v" : ":regional_indicator_symbol_letter_v:","w" : ":regional_indicator_symbol_letter_w:","x" : ":regional_indicator_symbol_letter_x:","y" : ":regional_indicator_symbol_letter_y:","z" : ":regional_indicator_symbol_letter_z:"," " : sep}
+
+    prep_string = ""
+    for i in params[1:]:
+        prep_string += i.lower() + " "
+    out_string = ""
+    for i in prep_string[:-1]:
+        if i in emoji_dict:
+            out_string += emoji_dict[i] + " "
+        else:
+            out_string += i
+    send_message(emoji.emojize(out_string))
+
+
+
+
+commands = {
+    "status" : bot_print_status,
+    "lorem" : bot_print_lorem,
+    "weather" : bot_show_weather,
+    "google" : bot_google_search,
+    "events" : bot_print_events,
+    "emojify" : bot_emojify,
+}
+
+
+
+
+
+
+
+
+def fetch_updates():
+    update_url = base_url + "getUpdates"
+    data = {"offset":offset}
+    result = requests.post(update_url,data=data)
+    try:
+        result = result.json()["result"]
+    except:
+        result = ""
+    return result
+
+def send_message(message):
+    print("SENDING: " + emoji.demojize(message))
+    global message_sent
+    data = {'chat_id': chat_id, 'text': message, "parse_mode": "HTML"}
+    send_url = base_url + "sendMessage"
+    r = requests.post(send_url, data=data)
+    message_sent += 1
+
+def handle_command(command):
+    """Handles commands and stuff, using a bash-like syntax:
+    /[command] [argument 1] [argument 2] ...
+    """
+    full = command.split(" ")
+    if full[0] in commands:
+        commands[full[0]](full[1:])
+    else:
+        send_message("Command <code>" + full[0] + "</code> not found. Please try again.")
+
+
+def handle_result(result):
+    """Inspects the message and reacts accordingly. Can easily be extended"""
+    print("handling")
+    for message_data in result:
+        global chat_id
+        global offset
+        global message_read
+        message_read += 1
+        offset = message_data["update_id"] + 1
+        message = message_data["message"]
+        chat_id = message["chat"]["id"]
+        author = message["from"]
+
+        if author["id"] not in chat_members:
+            chat_members[author["id"]] = author["first_name"] + " " + author["last_name"]
+            send_message("Welcome to this chat " + chat_members[author["id"]] + " !")
+
+        if "text" in message:
+            print("Chat said: ", emoji.demojize(message["text"]))
+
+            if "entities" in message:
+                for entry in message["entities"]:
+                    if entry["type"] == "bot_command":
+                        handle_command(message["text"][1:])
+
+        elif "photo" in message:
+            print("Photo received, what do I do?")
+
+
+
+
+
+def message_loop():
+    while(True):
+        result = fetch_updates()
+        if len(result) == 0:
+            print("Nada")
+            time.sleep(5)
+        else:
+            handle_result(result)
+            time.sleep(5)
+
+message_loop()