aboutsummaryrefslogtreecommitdiffstats
path: root/pysite
diff options
context:
space:
mode:
Diffstat (limited to 'pysite')
-rw-r--r--pysite/constants.py20
-rw-r--r--pysite/tables.py8
-rw-r--r--pysite/views/api/bot/clean.py45
-rw-r--r--pysite/views/main/bot/cleanlog.py35
4 files changed, 108 insertions, 0 deletions
diff --git a/pysite/constants.py b/pysite/constants.py
index 69c73492..d7453871 100644
--- a/pysite/constants.py
+++ b/pysite/constants.py
@@ -101,6 +101,26 @@ JAM_QUESTION_TYPES = [
"slider"
]
+# Server role colors
+ROLE_COLORS = {
+ "owners": "#ffa3a1",
+ "admins": "#e76e6c",
+ "moderators": "#ce3c42",
+ "python": "#6f9fed",
+ "bots": "#6f9fed",
+ "admin bots": "#6f9fed",
+ "devops": "#a1d1ff",
+ "helpers": "#e0b000",
+ "subreddit moderators": "#d897ed",
+ "partners": "#b66fed",
+ "streamers": "#833cba",
+ "developers": "#fcfcfc",
+ "muted": "#fcfcfc",
+ "code jam champions": "#b108b4",
+ "jammers": "#258639",
+ "contributors": "#55cc6c"
+}
+
# CSRF
CSRF = CSRFProtect()
diff --git a/pysite/tables.py b/pysite/tables.py
index 6eeda60e..65a4db16 100644
--- a/pysite/tables.py
+++ b/pysite/tables.py
@@ -16,6 +16,14 @@ TABLES = {
])
),
+ "clean_logs": Table( # Logs of cleanups done by the clean bot commands
+ primary_key="id",
+ keys=sorted([
+ "id",
+ "log_data"
+ ])
+ ),
+
"hiphopify": Table( # Users in hiphop prison
primary_key="user_id",
keys=sorted([
diff --git a/pysite/views/api/bot/clean.py b/pysite/views/api/bot/clean.py
new file mode 100644
index 00000000..f914c03c
--- /dev/null
+++ b/pysite/views/api/bot/clean.py
@@ -0,0 +1,45 @@
+from flask import jsonify
+from schema import Schema
+
+from pysite.base_route import APIView
+from pysite.constants import ValidationTypes
+from pysite.decorators import api_key, api_params
+from pysite.mixins import DBMixin
+
+POST_SCHEMA = Schema({
+ 'log_data': [
+ {
+ "author": str,
+ "content": str,
+ "timestamp": str,
+ "role": str
+ }
+ ]
+})
+
+
+class CleanView(APIView, DBMixin):
+ path = '/bot/clean'
+ name = 'bot.clean'
+ table_name = 'clean_logs'
+
+ @api_key
+ @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json)
+ def post(self, data):
+ """
+ Receive some log_data from a bulk deletion,
+ and store it in the database.
+
+ Returns an ID which can be used to get the data
+ from the /bot/clean_logs/<id> endpoint.
+ """
+
+ # Insert and return the id to use for GET
+ insert = self.db.insert(
+ self.table_name,
+ {
+ "log_data": data["log_data"]
+ }
+ )
+
+ return jsonify({"log_id": insert['generated_keys'][0]})
diff --git a/pysite/views/main/bot/cleanlog.py b/pysite/views/main/bot/cleanlog.py
new file mode 100644
index 00000000..1c90dc0b
--- /dev/null
+++ b/pysite/views/main/bot/cleanlog.py
@@ -0,0 +1,35 @@
+import logging
+
+from pysite.base_route import RouteView
+from pysite.constants import ALL_STAFF_ROLES, ROLE_COLORS
+from pysite.decorators import require_roles
+from pysite.mixins import DBMixin, OAuthMixin
+
+log = logging.getLogger(__name__)
+
+
+class CleanLogView(RouteView, DBMixin, OAuthMixin):
+ path = "/bot/clean_logs/<log_id>"
+ name = "bot.clean_logs"
+
+ table_name = "clean_logs"
+ template = "main/bot/clean_logs.html"
+
+ @require_roles(ALL_STAFF_ROLES)
+ def get(self, log_id):
+ """
+ Get the requested clean log and spit it out
+ in a beautiful template.
+ """
+
+ data = self.db.get(self.table_name, log_id)
+
+ if data is None:
+ return "ID could not be found in the database", 404
+
+ messages = data["log_data"]
+
+ for message in messages:
+ message['color'] = ROLE_COLORS.get(message['role'], ROLE_COLORS['developers'])
+
+ return self.render(self.template, messages=messages)