Foppe Hemminga vor 6 Jahren
Commit
2674679d44
5 geänderte Dateien mit 117 neuen und 0 gelöschten Zeilen
  1. 2 0
      .gitignore
  2. 32 0
      main.py
  3. 50 0
      model.py
  4. 4 0
      requirements.txt
  5. 29 0
      view.py

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+.env
+/venv

+ 32 - 0
main.py

@@ -0,0 +1,32 @@
+import os
+import psycopg2
+# from pprint import pprint
+from dotenv import load_dotenv
+import model
+import view
+
+
+if __name__ == '__main__':
+    load_dotenv(verbose=True)
+    cur = None
+    try:
+        conn = psycopg2.connect(user=os.getenv('db_user'),
+                                password=os.getenv('db_password'),
+                                host=os.getenv('db_host'),
+                                port=os.getenv('db_port'),
+                                database=os.getenv('db_database'))
+        cur = conn.cursor()
+        query = model.get_events()
+        results = model.database_select(cur, query)
+        broadcast = []
+        for result in results:
+            is_broadcast = model.is_broadcast(cur, result[0])
+            if not is_broadcast:
+                text = model.create_links(result[2])
+                print(result[1])
+                print(text)
+                view.broadcast(text)
+                model.record_broadcast(cur, result[0])
+        conn.commit()
+    except (Exception, psycopg2.Error) as error:
+        print("PostgreSQL error from psycopg2:", error)

+ 50 - 0
model.py

@@ -0,0 +1,50 @@
+import psycopg2
+import re
+
+
+def get_events():
+    """Simply retrieve events"""
+    query = """SELECT * FROM events 
+        WHERE timestamp BETWEEN now() - INTERVAL '24 HOURS' AND now()
+        AND (news LIKE '% sent an application to join the Faction.' 
+        OR news LIKE '% left the faction.' 
+        OR news LIKE '% has accepted %'
+        OR news LIKE '% has declined %')
+        ORDER BY timestamp DESC;"""
+    return query
+
+
+def database_select(cur, query):
+    results = None
+    try:
+        cur.execute(query)
+        results = cur.fetchall()
+    except (Exception, psycopg2.Error) as error:
+        print("PostgreSQL error from psycopg2:", error)
+    return results
+
+
+def database_insert(cur, query):
+    try:
+        cur.execute(query)
+        cur.commit()
+    except (Exception, psycopg2.Error) as error:
+        print("PostgreSQL error from psycopg2:", error)
+
+
+def create_links(news_string):
+    regex = re.compile(r'<a href = "?https?://www\.torn\.com/profiles\.php\?XID=(\d+)"?>([^<]+)</a>')
+    return_string = re.sub(regex, r'[\2 [\1]](https://www.torn.com/profiles.php?XID=\1)', news_string)
+    return return_string
+
+
+def is_broadcast(cur, this_id):
+    query = f"""SELECT COUNT(*) FROM human_resource WHERE event = {this_id};"""
+    res = database_select(cur, query)
+    boolean = True if res[0] == 1 else False
+    return boolean
+
+
+def record_broadcast(cur, event_id):
+    query = f"""INSERT INTO human_resource(event) VALUES({event_id});"""
+    database_insert(cur, query)

+ 4 - 0
requirements.txt

@@ -0,0 +1,4 @@
+arrow
+psycopg2
+python-dotenv
+requests

+ 29 - 0
view.py

@@ -0,0 +1,29 @@
+import json
+import os
+# import requests
+# import sys
+from dotenv import load_dotenv
+from pprint import pprint
+
+base_url = 'https://discordapp.com/api/webhooks/'
+
+
+def broadcast(this_text):
+    load_dotenv()
+    webhooks_json = os.environ["DISCORD_TOKENS"]
+    webhooks = json.loads(webhooks_json)
+    for webhook_key in webhooks:
+        webhook = webhooks[webhook_key]
+        if 'sent an application' in this_text:
+            this_text += ' @KnockKnock'
+        this_json = {'content': this_text}
+        pprint(this_json)
+        url = base_url+webhook
+        print(url)
+        # response = requests.post(url, json=this_json)
+        # if response.status_code in [200, 204]:
+        #     print("Webhook executed")
+        # else:
+        #     print("status code {}: {}".format(response.status_code, response.content.decode("utf-8")))
+        #     if response.status_code == int(429):
+        #         sys.exit(1)