summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-04 10:47:04 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-04 10:47:04 +0200
commite52e7ef0e1c88871165969faeccf431c6538eee8 (patch)
treeabffeb885ae2c8429b0b91c45adb312c53127346
parent:sparkles: custom user flags offset (diff)
parentMerge pull request #412 from TheArcaneBrony/master (diff)
downloadserver-e52e7ef0e1c88871165969faeccf431c6538eee8.tar.xz
Merge branch 'master' of https://github.com/fosscord/fosscord-server
-rw-r--r--api/assets/schemas.json601
-rw-r--r--api/scripts/generate_schema.js11
-rw-r--r--api/src/middlewares/Authentication.ts4
-rw-r--r--api/src/routes/applications/#id/entitlements.ts12
-rw-r--r--api/src/routes/auth/register.ts10
-rw-r--r--api/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts26
-rw-r--r--api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts4
-rw-r--r--api/src/routes/discoverable-guilds.ts8
-rw-r--r--api/src/routes/discovery.ts12
-rw-r--r--api/src/routes/stage-instances.ts (renamed from api/src/routes/store/skus.ts)3
-rw-r--r--api/src/routes/store/published-listings/applications.ts79
-rw-r--r--api/src/routes/store/published-listings/applications/#id/subscription-plans.ts24
-rw-r--r--api/src/routes/store/published-listings/skus.ts79
-rw-r--r--api/src/routes/store/published-listings/skus/#sku_id/subscription-plans.ts25
-rw-r--r--api/src/routes/users/@me/activities/statistics/applications.ts11
-rw-r--r--api/src/routes/users/@me/billing/payment-sources.ts11
-rw-r--r--api/src/routes/users/@me/email-settings.ts19
-rw-r--r--api/src/routes/users/@me/entitlements.ts11
-rw-r--r--api/src/routes/users/@me/guilds/premium/subscription-slots.ts11
-rw-r--r--api/src/routes/users/@me/notes.ts (renamed from api/src/routes/store/applications.ts)8
-rw-r--r--api/src/util/route.ts21
-rw-r--r--bundle/src/Server.ts16
-rw-r--r--gateway/package.json2
-rw-r--r--gateway/src/Server.ts15
-rw-r--r--gateway/src/events/Connection.ts7
-rw-r--r--gateway/src/util/Heartbeat.ts (renamed from gateway/src/util/setHeartbeat.ts)0
-rw-r--r--gateway/src/util/WebSocket.ts1
-rw-r--r--gateway/src/util/index.ts2
-rw-r--r--gateway/tsconfig.json3
-rw-r--r--util/src/entities/Config.ts10
-rw-r--r--util/src/entities/Message.ts6
-rw-r--r--util/src/entities/User.ts6
-rw-r--r--util/src/util/BitField.ts4
-rw-r--r--util/src/util/Config.ts1
-rw-r--r--util/src/util/Constants.ts4
-rw-r--r--util/src/util/Permissions.ts77
-rw-r--r--util/src/util/Rights.ts73
-rw-r--r--util/src/util/Token.ts5
-rw-r--r--util/src/util/index.ts1
39 files changed, 692 insertions, 531 deletions
diff --git a/api/assets/schemas.json b/api/assets/schemas.json
index 023f2092..03a2db07 100644
--- a/api/assets/schemas.json
+++ b/api/assets/schemas.json
@@ -21,7 +21,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "login",
             "password"
@@ -64,7 +63,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "consent",
             "username"
@@ -133,7 +131,6 @@
                             "type": "string"
                         }
                     },
-                    "additionalProperties": false,
                     "required": [
                         "allow",
                         "deny",
@@ -158,7 +155,6 @@
                 "type": "integer"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -210,7 +206,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -233,8 +228,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -251,8 +245,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -269,15 +262,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -294,8 +285,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -359,7 +349,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -383,8 +372,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -417,7 +405,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -440,7 +427,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -498,8 +484,7 @@
                     "replied_user": {
                         "type": "boolean"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "message_reference": {
                 "type": "object",
@@ -517,7 +502,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "channel_id",
                     "message_id"
@@ -532,7 +516,6 @@
                 "items": {}
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -584,7 +567,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -607,8 +589,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -625,8 +606,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -643,15 +623,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -668,8 +646,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -733,7 +710,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -757,8 +733,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -791,7 +766,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -814,7 +788,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -855,7 +828,6 @@
                 "type": "integer"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -907,7 +879,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -930,8 +901,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -948,8 +918,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -966,15 +935,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -991,8 +958,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -1056,7 +1022,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -1080,8 +1045,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -1114,7 +1078,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -1137,7 +1100,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -1157,7 +1119,6 @@
                 "type": "integer"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -1209,7 +1170,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -1232,8 +1192,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -1250,8 +1209,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -1268,15 +1226,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -1293,8 +1249,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -1358,7 +1313,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -1382,8 +1336,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -1416,7 +1369,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -1439,7 +1391,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -1459,7 +1410,6 @@
                 }
             }
         },
-        "additionalProperties": false,
         "required": [
             "messages"
         ],
@@ -1514,7 +1464,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -1537,8 +1486,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -1555,8 +1503,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -1573,15 +1520,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -1598,8 +1543,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -1663,7 +1607,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -1687,8 +1630,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -1721,7 +1663,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -1744,7 +1685,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -1770,7 +1710,6 @@
                 "$ref": "#/definitions/ChannelPermissionOverwriteType"
             }
         },
-        "additionalProperties": false,
         "required": [
             "allow",
             "deny",
@@ -1828,7 +1767,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -1851,8 +1789,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -1869,8 +1806,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -1887,15 +1823,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -1912,8 +1846,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -1977,7 +1910,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -2001,8 +1933,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -2035,7 +1966,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -2058,7 +1988,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -2079,7 +2008,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "avatar",
             "name"
@@ -2135,7 +2063,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -2158,8 +2085,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -2176,8 +2102,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -2194,15 +2119,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -2219,8 +2142,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -2284,7 +2206,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -2308,8 +2229,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -2342,7 +2262,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -2365,7 +2284,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -2385,7 +2303,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -2437,7 +2354,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -2460,8 +2376,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -2478,8 +2393,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -2496,15 +2410,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -2521,8 +2433,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -2586,7 +2497,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -2610,8 +2520,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -2644,7 +2553,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -2667,7 +2575,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -2695,7 +2602,6 @@
                     "type": "string"
                 }
             },
-            "additionalProperties": false,
             "required": [
                 "id"
             ]
@@ -2751,7 +2657,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -2774,8 +2679,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -2792,8 +2696,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -2810,15 +2713,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -2835,8 +2736,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -2900,7 +2800,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -2924,8 +2823,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -2958,7 +2856,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -2981,7 +2878,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -3023,7 +2919,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "name"
         ],
@@ -3078,7 +2973,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -3101,8 +2995,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -3119,8 +3012,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -3137,15 +3029,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -3162,8 +3052,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -3227,7 +3116,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -3251,8 +3139,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -3285,7 +3172,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -3308,7 +3194,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -3389,7 +3274,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "name"
         ],
@@ -3444,7 +3328,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -3467,8 +3350,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -3485,8 +3367,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -3503,15 +3384,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -3528,8 +3407,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -3593,7 +3471,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -3617,8 +3494,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -3651,7 +3527,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -3674,7 +3549,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -3694,7 +3568,6 @@
                 }
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -3746,7 +3619,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -3769,8 +3641,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -3787,8 +3658,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -3805,15 +3675,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -3830,8 +3698,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -3895,7 +3762,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -3919,8 +3785,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -3953,7 +3818,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -3976,7 +3840,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -3993,7 +3856,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "nick"
         ],
@@ -4048,7 +3910,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -4071,8 +3932,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -4089,8 +3949,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -4107,15 +3966,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -4132,8 +3989,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -4197,7 +4053,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -4221,8 +4076,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -4255,7 +4109,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -4278,7 +4131,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -4310,7 +4162,6 @@
                 "type": "integer"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -4362,7 +4213,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -4385,8 +4235,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -4403,8 +4252,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -4421,15 +4269,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -4446,8 +4292,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -4511,7 +4356,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -4535,8 +4379,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -4569,7 +4412,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -4592,7 +4434,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -4614,7 +4455,6 @@
                     "type": "integer"
                 }
             },
-            "additionalProperties": false,
             "required": [
                 "id",
                 "position"
@@ -4671,7 +4511,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -4694,8 +4533,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -4712,8 +4550,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -4730,15 +4567,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -4755,8 +4590,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -4820,7 +4654,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -4844,8 +4677,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -4878,7 +4710,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -4901,7 +4732,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -4921,7 +4751,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "name"
         ],
@@ -4976,7 +4805,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -4999,8 +4827,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -5017,8 +4844,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -5035,15 +4861,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -5060,8 +4884,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -5125,7 +4948,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -5149,8 +4971,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -5183,7 +5004,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -5206,7 +5026,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -5226,7 +5045,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "name"
         ],
@@ -5281,7 +5099,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -5304,8 +5121,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -5322,8 +5138,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -5340,15 +5155,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -5365,8 +5178,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -5430,7 +5242,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -5454,8 +5265,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -5488,7 +5298,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -5511,7 +5320,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -5530,7 +5338,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -5582,7 +5389,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -5605,8 +5411,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -5623,8 +5428,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -5641,15 +5445,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -5666,8 +5468,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -5731,7 +5532,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -5755,8 +5555,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -5789,7 +5588,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -5812,7 +5610,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -5848,7 +5645,6 @@
                 "type": "boolean"
             }
         },
-        "additionalProperties": false,
         "required": [
             "channel_id"
         ],
@@ -5903,7 +5699,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -5926,8 +5721,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -5944,8 +5738,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -5962,15 +5755,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -5987,8 +5778,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -6052,7 +5842,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -6076,8 +5865,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -6110,7 +5898,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -6133,7 +5920,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -6164,7 +5950,6 @@
                             "type": "string"
                         }
                     },
-                    "additionalProperties": false,
                     "required": [
                         "channel_id",
                         "description",
@@ -6179,7 +5964,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -6231,7 +6015,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -6254,8 +6037,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -6272,8 +6054,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -6290,15 +6071,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -6315,8 +6094,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -6380,7 +6158,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -6404,8 +6181,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -6438,7 +6214,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -6461,7 +6236,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -6481,7 +6255,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "channel_id",
             "enabled"
@@ -6537,7 +6310,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -6560,8 +6332,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -6578,8 +6349,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -6596,15 +6366,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -6621,8 +6389,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -6686,7 +6453,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -6710,8 +6476,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -6744,7 +6509,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -6767,7 +6531,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -6790,7 +6553,6 @@
                 ]
             }
         },
-        "additionalProperties": false,
         "required": [
             "name"
         ],
@@ -6845,7 +6607,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -6868,8 +6629,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -6886,8 +6646,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -6904,15 +6663,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -6929,8 +6686,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -6994,7 +6750,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -7018,8 +6773,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -7052,7 +6806,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -7075,7 +6828,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -7103,7 +6855,6 @@
                 "format": "date-time"
             }
         },
-        "additionalProperties": false,
         "required": [
             "connected_accounts",
             "user"
@@ -7159,7 +6910,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -7182,8 +6932,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -7200,8 +6949,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -7218,15 +6966,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -7243,8 +6989,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -7308,7 +7053,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -7332,8 +7076,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -7366,7 +7109,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -7389,7 +7131,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -7412,7 +7153,6 @@
                 }
             }
         },
-        "additionalProperties": false,
         "required": [
             "recipients"
         ],
@@ -7467,7 +7207,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -7490,8 +7229,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -7508,8 +7246,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -7526,15 +7263,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -7551,8 +7286,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -7616,7 +7350,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -7640,8 +7373,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -7674,7 +7406,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -7697,7 +7428,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -7744,7 +7474,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -7796,7 +7525,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -7819,8 +7547,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -7837,8 +7564,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -7855,15 +7581,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -7880,8 +7604,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -7945,7 +7668,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -7969,8 +7691,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -8003,7 +7724,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -8026,7 +7746,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -8049,7 +7768,6 @@
                 "type": "number"
             }
         },
-        "additionalProperties": false,
         "definitions": {
             "ChannelPermissionOverwriteType": {
                 "enum": [
@@ -8101,7 +7819,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -8124,8 +7841,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -8142,8 +7858,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -8160,15 +7875,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -8185,8 +7898,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -8250,7 +7962,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -8274,8 +7985,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -8308,7 +8018,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -8331,7 +8040,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -8351,7 +8059,6 @@
                 "type": "string"
             }
         },
-        "additionalProperties": false,
         "required": [
             "discriminator",
             "username"
@@ -8407,7 +8114,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -8430,8 +8136,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -8448,8 +8153,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -8466,15 +8170,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -8491,8 +8193,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -8556,7 +8257,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -8580,8 +8280,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -8614,7 +8313,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -8637,7 +8335,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
@@ -8683,8 +8380,7 @@
                     "text": {
                         "type": "string"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "default_guilds_restricted": {
                 "type": "boolean"
@@ -8711,7 +8407,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "all"
                 ]
@@ -8743,7 +8438,6 @@
                             "type": "string"
                         }
                     },
-                    "additionalProperties": false,
                     "required": [
                         "color",
                         "guild_ids",
@@ -8811,7 +8505,6 @@
                 "type": "integer"
             }
         },
-        "additionalProperties": false,
         "required": [
             "afk_timeout",
             "allow_accessibility_detection",
@@ -8896,7 +8589,6 @@
                                 "type": "string"
                             }
                         },
-                        "additionalProperties": false,
                         "required": [
                             "text"
                         ]
@@ -8919,8 +8611,7 @@
                             "url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "author": {
                         "type": "object",
@@ -8937,8 +8628,7 @@
                             "proxy_icon_url": {
                                 "type": "string"
                             }
-                        },
-                        "additionalProperties": false
+                        }
                     },
                     "fields": {
                         "type": "array",
@@ -8955,15 +8645,13 @@
                                     "type": "boolean"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "name",
                                 "value"
                             ]
                         }
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "EmbedImage": {
                 "type": "object",
@@ -8980,8 +8668,7 @@
                     "width": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "ChannelModifySchema": {
                 "type": "object",
@@ -9045,7 +8732,6 @@
                                     "type": "string"
                                 }
                             },
-                            "additionalProperties": false,
                             "required": [
                                 "allow",
                                 "deny",
@@ -9069,8 +8755,7 @@
                     "default_auto_archive_duration": {
                         "type": "integer"
                     }
-                },
-                "additionalProperties": false
+                }
             },
             "UserPublic": {
                 "type": "object",
@@ -9103,7 +8788,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "bio",
                     "bot",
@@ -9126,7 +8810,6 @@
                         "type": "boolean"
                     }
                 },
-                "additionalProperties": false,
                 "required": [
                     "name",
                     "type",
diff --git a/api/scripts/generate_schema.js b/api/scripts/generate_schema.js
index fc787c22..c12f6b1a 100644
--- a/api/scripts/generate_schema.js
+++ b/api/scripts/generate_schema.js
@@ -30,6 +30,15 @@ const Excluded = [
 	"supertest.Response"
 ];
 
+function modify(obj) {
+	delete obj.additionalProperties;
+	for (var k in obj) {
+		if (typeof obj[k] === "object" && obj[k] !== null) {
+			modify(obj[k]);
+		}
+	}
+}
+
 function main() {
 	const program = TJS.getProgramFromFiles(walk(path.join(__dirname, "..", "src", "routes")), compilerOptions);
 	const generator = TJS.buildGenerator(program, settings);
@@ -47,6 +56,8 @@ function main() {
 		definitions = { ...definitions, [name]: { ...part } };
 	}
 
+	modify(definitions);
+
 	fs.writeFileSync(schemaPath, JSON.stringify(definitions, null, 4));
 }
 
diff --git a/api/src/middlewares/Authentication.ts b/api/src/middlewares/Authentication.ts
index a300c786..5a082751 100644
--- a/api/src/middlewares/Authentication.ts
+++ b/api/src/middlewares/Authentication.ts
@@ -1,6 +1,6 @@
 import { NextFunction, Request, Response } from "express";
 import { HTTPError } from "lambert-server";
-import { checkToken, Config } from "@fosscord/util";
+import { checkToken, Config, Rights } from "@fosscord/util";
 
 export const NO_AUTHORIZATION_ROUTES = [
 	"/auth/login",
@@ -21,6 +21,7 @@ declare global {
 			user_id: string;
 			user_bot: boolean;
 			token: string;
+			rights: Rights;
 		}
 	}
 }
@@ -46,6 +47,7 @@ export async function Authentication(req: Request, res: Response, next: NextFunc
 		req.token = decoded;
 		req.user_id = decoded.id;
 		req.user_bot = user.bot;
+		req.rights = new Rights(Number(user.rights));
 		return next();
 	} catch (error: any) {
 		return next(new HTTPError(error?.toString(), 400));
diff --git a/api/src/routes/applications/#id/entitlements.ts b/api/src/routes/applications/#id/entitlements.ts
new file mode 100644
index 00000000..1152e500
--- /dev/null
+++ b/api/src/routes/applications/#id/entitlements.ts
@@ -0,0 +1,12 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.get("/", route({}), (req: Request, res: Response) => {
+	// TODO:
+    //const { exclude_consumed } = req.query;
+	res.status(200).send([]);
+});
+
+export default router;
diff --git a/api/src/routes/auth/register.ts b/api/src/routes/auth/register.ts
index 9c058399..1344c994 100644
--- a/api/src/routes/auth/register.ts
+++ b/api/src/routes/auth/register.ts
@@ -50,6 +50,15 @@ router.post("/", route({ body: "RegisterSchema" }), async (req: Request, res: Re
 	const { register, security } = Config.get();
 	const ip = getIpAdress(req);
 
+	if (register.disabled) {
+		throw FieldErrors({
+			email: {
+				code: "DISABLED",
+				message: "registration is disabled on this instance"
+			}
+		});
+	}
+
 	if (register.blockProxies) {
 		if (isProxy(await IPAnalysis(ip))) {
 			console.log(`proxy ${ip} blocked from registration`);
@@ -202,6 +211,7 @@ router.post("/", route({ body: "RegisterSchema" }), async (req: Request, res: Re
 		disabled: false,
 		deleted: false,
 		email: email,
+		rights: "0",
 		nsfw_allowed: true, // TODO: depending on age
 		public_flags: "0",
 		flags: "0", // TODO: generate
diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts b/api/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts
index 6753e832..de0c01f1 100644
--- a/api/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts
+++ b/api/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts
@@ -1,8 +1,30 @@
 import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
 
 const router = Router();
 
-// TODO:
-// router.post("/", (req: Request, res: Response) => {});
+router.post("/", route({ permission: "MANAGE_MESSAGES" }), (req: Request, res: Response) => {
+	// TODO:
+	res.json({
+        id: "", 
+        type: 0, 
+        content: "", 
+        channel_id: "", 
+        author: {id: "", 
+        username: "", 
+        avatar: "", 
+        discriminator: "", public_flags: 64}, 
+        attachments: [], 
+        embeds: [], 
+        mentions: [], 
+        mention_roles: [], 
+        pinned: false, 
+        mention_everyone: false, 
+        tts: false, 
+        timestamp: "", 
+        edited_timestamp: null, 
+        flags: 1, components: []}).status(200);
+});
 
 export default router;
+
diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts b/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts
index f2b83d40..6b6a66b2 100644
--- a/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts
+++ b/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts
@@ -124,7 +124,7 @@ router.put("/:emoji/:user_id", route({ permission: "READ_MESSAGE_HISTORY" }), as
 		already_added.count++;
 	} else message.reactions.push({ count: 1, emoji, user_ids: [req.user_id] });
 
-	await Message.update({ id: message_id, channel_id }, message);
+	await message.save();
 
 	const member = channel.guild_id && (await Member.findOneOrFail({ id: req.user_id }));
 
@@ -165,7 +165,7 @@ router.delete("/:emoji/:user_id", route({}), async (req: Request, res: Response)
 
 	if (already_added.count <= 0) message.reactions.remove(already_added);
 
-	await Message.update({ id: message_id, channel_id }, message);
+	await message.save();
 
 	await emitEvent({
 		event: "MESSAGE_REACTION_REMOVE",
diff --git a/api/src/routes/discoverable-guilds.ts b/api/src/routes/discoverable-guilds.ts
index f667eb2a..b626b084 100644
--- a/api/src/routes/discoverable-guilds.ts
+++ b/api/src/routes/discoverable-guilds.ts
@@ -1,16 +1,18 @@
-import { Guild } from "@fosscord/util";
+import { Guild, Config } from "@fosscord/util";
+
 import { Router, Request, Response } from "express";
 import { route } from "@fosscord/api";
 
+
 const router = Router();
 
 router.get("/", route({}), async (req: Request, res: Response) => {
 	const { limit } = req.params;
-
+	var showAllGuilds = Config.get().guild.showAllGuildsInDiscovery;
 	// ! this only works using SQL querys
 	// TODO: implement this with default typeorm query
 	// const guilds = await Guild.find({ where: { features: "DISCOVERABLE" } }); //, take: Math.abs(Number(limit)) });
-	const guilds = await Guild.find({ where: `"features" LIKE 'COMMUNITY'`, take: Math.abs(Number(limit)) });
+	const guilds = showAllGuilds ? await Guild.find({take: Math.abs(Number(limit || 20))}) : await Guild.find({ where: `"features" LIKE '%COMMUNITY%'`, take: Math.abs(Number(limit || 20)) });
 	res.send({ guilds: guilds });
 });
 
diff --git a/api/src/routes/discovery.ts b/api/src/routes/discovery.ts
new file mode 100644
index 00000000..9e6e0164
--- /dev/null
+++ b/api/src/routes/discovery.ts
@@ -0,0 +1,12 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.get("/categories", route({}), (req: Request, res: Response) => {
+	// TODO:
+    //const { locale, primary_only } = req.query;
+	res.json([]).status(200);
+});
+
+export default router;
diff --git a/api/src/routes/store/skus.ts b/api/src/routes/stage-instances.ts
index 7d0e12eb..411e95bf 100644
--- a/api/src/routes/store/skus.ts
+++ b/api/src/routes/stage-instances.ts
@@ -3,9 +3,8 @@ import { route } from "@fosscord/api";
 
 const router: Router = Router();
 
-router.get("/skus/:id", route({}), async (req: Request, res: Response) => {
+router.get("/", route({}), async (req: Request, res: Response) => {
 	//TODO
-	const { id } = req.params;
 	res.json([]).status(200);
 });
 
diff --git a/api/src/routes/store/published-listings/applications.ts b/api/src/routes/store/published-listings/applications.ts
new file mode 100644
index 00000000..f06a01e4
--- /dev/null
+++ b/api/src/routes/store/published-listings/applications.ts
@@ -0,0 +1,79 @@
+import { Request, Response, Router } from "express";
+import { route } from "@fosscord/api";
+
+const router: Router = Router();
+
+router.get("/:id", route({}), async (req: Request, res: Response) => {
+	//TODO
+	const id = req.params.id;
+	res.json({
+		id: "",
+		summary: "",
+		sku: {
+			id: "",
+			type: 1,
+			dependent_sku_id: null,
+			application_id: "",
+			manifets_labels: [],
+			access_type: 2,
+			name: "",
+			features: [],
+			relase_date: "",
+			premium: false,
+			slug: "",
+			flags: 4,
+			genres: [],
+			legal_notice: "",
+			application: {
+				id: "",
+				name: "",
+				icon: "",
+				description: "",
+				summary: "",
+				cover_image: "",
+				primary_sku_id: "",
+				hook: true,
+				slug: "",
+				guild_id: "",
+				bot_public: "",
+				bot_require_code_grant: false,
+				verify_key: "",
+				publishers: [
+					{
+						id: "",
+						name: ""
+					}
+				],
+				developers: [
+					{
+						id: "",
+						name: ""
+					}
+				],
+				system_requirements: {},
+				show_age_gate: false,
+				price: {
+					amount: 0,
+					currency: "EUR"
+				},
+				locales: []
+			},
+			tagline: "",
+			description: "",
+			carousel_items: [
+				{
+					asset_id: ""
+				}
+			],
+			header_logo_dark_theme: {}, //{id: "", size: 4665, mime_type: "image/gif", width 160, height: 160}
+			header_logo_light_theme: {},
+			box_art: {},
+			thumbnail: {},
+			header_background: {},
+			hero_background: {},
+			assets: []
+		}
+	}).status(200);
+});
+
+export default router;
diff --git a/api/src/routes/store/published-listings/applications/#id/subscription-plans.ts b/api/src/routes/store/published-listings/applications/#id/subscription-plans.ts
new file mode 100644
index 00000000..77f949d9
--- /dev/null
+++ b/api/src/routes/store/published-listings/applications/#id/subscription-plans.ts
@@ -0,0 +1,24 @@
+import { Request, Response, Router } from "express";
+import { route } from "@fosscord/api";
+
+const router: Router = Router();
+
+router.get("/", route({}), async (req: Request, res: Response) => {
+	//TODO
+	res.json([
+        {
+            id: "",
+            name: "",
+            interval: 1,
+            interval_count: 1,
+            tax_inclusive: true,
+            sku_id: "",
+            fallback_price: 499,
+            fallback_currency: "eur",
+            currency: "eur",
+            price: 4199,
+            price_tier: null
+        }]).status(200);
+});
+
+export default router;
diff --git a/api/src/routes/store/published-listings/skus.ts b/api/src/routes/store/published-listings/skus.ts
new file mode 100644
index 00000000..f06a01e4
--- /dev/null
+++ b/api/src/routes/store/published-listings/skus.ts
@@ -0,0 +1,79 @@
+import { Request, Response, Router } from "express";
+import { route } from "@fosscord/api";
+
+const router: Router = Router();
+
+router.get("/:id", route({}), async (req: Request, res: Response) => {
+	//TODO
+	const id = req.params.id;
+	res.json({
+		id: "",
+		summary: "",
+		sku: {
+			id: "",
+			type: 1,
+			dependent_sku_id: null,
+			application_id: "",
+			manifets_labels: [],
+			access_type: 2,
+			name: "",
+			features: [],
+			relase_date: "",
+			premium: false,
+			slug: "",
+			flags: 4,
+			genres: [],
+			legal_notice: "",
+			application: {
+				id: "",
+				name: "",
+				icon: "",
+				description: "",
+				summary: "",
+				cover_image: "",
+				primary_sku_id: "",
+				hook: true,
+				slug: "",
+				guild_id: "",
+				bot_public: "",
+				bot_require_code_grant: false,
+				verify_key: "",
+				publishers: [
+					{
+						id: "",
+						name: ""
+					}
+				],
+				developers: [
+					{
+						id: "",
+						name: ""
+					}
+				],
+				system_requirements: {},
+				show_age_gate: false,
+				price: {
+					amount: 0,
+					currency: "EUR"
+				},
+				locales: []
+			},
+			tagline: "",
+			description: "",
+			carousel_items: [
+				{
+					asset_id: ""
+				}
+			],
+			header_logo_dark_theme: {}, //{id: "", size: 4665, mime_type: "image/gif", width 160, height: 160}
+			header_logo_light_theme: {},
+			box_art: {},
+			thumbnail: {},
+			header_background: {},
+			hero_background: {},
+			assets: []
+		}
+	}).status(200);
+});
+
+export default router;
diff --git a/api/src/routes/store/published-listings/skus/#sku_id/subscription-plans.ts b/api/src/routes/store/published-listings/skus/#sku_id/subscription-plans.ts
new file mode 100644
index 00000000..54c01607
--- /dev/null
+++ b/api/src/routes/store/published-listings/skus/#sku_id/subscription-plans.ts
@@ -0,0 +1,25 @@
+import { Request, Response, Router } from "express";
+import { route } from "@fosscord/api";
+
+const router: Router = Router();
+
+const skus = new Map([
+	["521842865731534868", [{"id": "511651856145973248", "name": "Premium Monthly (Legacy)", "interval": 1, "interval_count": 1, "tax_inclusive": true, "sku_id": "521842865731534868", "currency": "usd", "price": 0, "price_tier": null}, {"id": "511651860671627264", "name": "Premium Yearly (Legacy)", "interval": 2, "interval_count": 1, "tax_inclusive": true, "sku_id": "521842865731534868", "currency": "usd", "price": 0, "price_tier": null}]],
+	["521846918637420545", [{"id": "511651871736201216", "name": "Premium Classic Monthly", "interval": 1, "interval_count": 1, "tax_inclusive": true, "sku_id": "521846918637420545", "currency": "usd", "price": 0, "price_tier": null}, {"id": "511651876987469824", "name": "Premium Classic Yearly", "interval": 2, "interval_count": 1, "tax_inclusive": true, "sku_id": "521846918637420545", "currency": "usd", "price": 0, "price_tier": null}]],
+	["521847234246082599", [{"id": "642251038925127690", "name": "Premium Quarterly", "interval": 1, "interval_count": 3, "tax_inclusive": true, "sku_id": "521847234246082599", "currency": "usd", "price": 0, "price_tier": null}, {"id": "511651880837840896", "name": "Premium Monthly", "interval": 1, "interval_count": 1, "tax_inclusive": true, "sku_id": "521847234246082599", "currency": "usd", "price": 0, "price_tier": null}, {"id": "511651885459963904", "name": "Premium Yearly", "interval": 2, "interval_count": 1, "tax_inclusive": true, "sku_id": "521847234246082599", "currency": "usd", "price": 0, "price_tier": null}]],
+	["590663762298667008", [{"id": "590665532894740483", "name": "Server Boost Monthly", "interval": 1, "interval_count": 1, "tax_inclusive": true, "sku_id": "590663762298667008", "discount_price": 0, "currency": "usd", "price": 0, "price_tier": null}, {"id": "590665538238152709", "name": "Server Boost Yearly", "interval": 2, "interval_count": 1, "tax_inclusive": true, "sku_id": "590663762298667008", "discount_price": 0, "currency": "usd", "price": 0, "price_tier": null}]],
+]);
+
+router.get("/", route({}), async (req: Request, res: Response) => {
+	// TODO: add the ability to add custom
+	const { sku_id } = req.params;
+	
+	if(!skus.has(sku_id)) {
+		console.log(`Request for invalid SKU ${sku_id}! Please report this!`);
+		res.sendStatus(404);
+	} else {
+		res.json(skus.get(sku_id)).status(200);
+	}
+});
+
+export default router;
diff --git a/api/src/routes/users/@me/activities/statistics/applications.ts b/api/src/routes/users/@me/activities/statistics/applications.ts
new file mode 100644
index 00000000..834be35c
--- /dev/null
+++ b/api/src/routes/users/@me/activities/statistics/applications.ts
@@ -0,0 +1,11 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.get("/", route({}), (req: Request, res: Response) => {
+	// TODO:
+	res.json([]).status(200)
+});
+
+export default router;
diff --git a/api/src/routes/users/@me/billing/payment-sources.ts b/api/src/routes/users/@me/billing/payment-sources.ts
new file mode 100644
index 00000000..834be35c
--- /dev/null
+++ b/api/src/routes/users/@me/billing/payment-sources.ts
@@ -0,0 +1,11 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.get("/", route({}), (req: Request, res: Response) => {
+	// TODO:
+	res.json([]).status(200)
+});
+
+export default router;
diff --git a/api/src/routes/users/@me/email-settings.ts b/api/src/routes/users/@me/email-settings.ts
new file mode 100644
index 00000000..2d961a0e
--- /dev/null
+++ b/api/src/routes/users/@me/email-settings.ts
@@ -0,0 +1,19 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.get("/", route({}), (req: Request, res: Response) => {
+	// TODO:    
+	res.json({
+		categories: { 
+        social: true,
+        communication: true,
+        tips: false,
+        updates_and_announcements: false,
+        recommendations_and_events: false },
+		initialized: false
+	}).status(200);
+});
+
+export default router;
diff --git a/api/src/routes/users/@me/entitlements.ts b/api/src/routes/users/@me/entitlements.ts
new file mode 100644
index 00000000..341e2b4c
--- /dev/null
+++ b/api/src/routes/users/@me/entitlements.ts
@@ -0,0 +1,11 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.get("/gifts", route({}), (req: Request, res: Response) => {
+	// TODO:
+	res.json([]).status(200);
+});
+
+export default router;
diff --git a/api/src/routes/users/@me/guilds/premium/subscription-slots.ts b/api/src/routes/users/@me/guilds/premium/subscription-slots.ts
new file mode 100644
index 00000000..014df8af
--- /dev/null
+++ b/api/src/routes/users/@me/guilds/premium/subscription-slots.ts
@@ -0,0 +1,11 @@
+import { Router, Response, Request } from "express";
+import { route } from "@fosscord/api";
+
+const router = Router();
+
+router.get("/", route({}), (req: Request, res: Response) => {
+	// TODO:
+	res.json([]).status(200);
+});
+
+export default router;
diff --git a/api/src/routes/store/applications.ts b/api/src/routes/users/@me/notes.ts
index 352c1752..2ef27bc0 100644
--- a/api/src/routes/store/applications.ts
+++ b/api/src/routes/users/@me/notes.ts
@@ -3,10 +3,12 @@ import { route } from "@fosscord/api";
 
 const router: Router = Router();
 
-router.get("/applications/:id", route({}), async (req: Request, res: Response) => {
+router.put("/:id", route({}), async (req: Request, res: Response) => {
 	//TODO
-	const { id } = req.params;
-	res.json([]).status(200);
+	res.json({
+		message: "400: Bad Request",
+		code: 0
+	}).status(400);
 });
 
 export default router;
diff --git a/api/src/util/route.ts b/api/src/util/route.ts
index 45882d8a..3e967e2a 100644
--- a/api/src/util/route.ts
+++ b/api/src/util/route.ts
@@ -1,4 +1,15 @@
-import { DiscordApiErrors, EVENT, Event, EventData, getPermission, PermissionResolvable, Permissions } from "@fosscord/util";
+import {
+	DiscordApiErrors,
+	EVENT,
+	Event,
+	EventData,
+	FosscordApiErrors,
+	getPermission,
+	PermissionResolvable,
+	Permissions,
+	RightResolvable,
+	Rights
+} from "@fosscord/util";
 import { NextFunction, Request, Response } from "express";
 import fs from "fs";
 import path from "path";
@@ -33,6 +44,7 @@ export type RouteResponse = { status?: number; body?: `${string}Response`; heade
 
 export interface RouteOptions {
 	permission?: PermissionResolvable;
+	right?: RightResolvable;
 	body?: `${string}Schema`; // typescript interface name
 	test?: {
 		response?: RouteResponse;
@@ -89,6 +101,13 @@ export function route(opts: RouteOptions) {
 			}
 		}
 
+		if (opts.right) {
+			const required = new Rights(opts.right);
+			if (!req.rights || !req.rights.has(required)) {
+				throw FosscordApiErrors.MISSING_RIGHTS.withParams(opts.right as string);
+			}
+		}
+
 		if (validate) {
 			const valid = validate(normalizeBody(req.body));
 			if (!valid) {
diff --git a/bundle/src/Server.ts b/bundle/src/Server.ts
index 62764e8e..3a56ee2e 100644
--- a/bundle/src/Server.ts
+++ b/bundle/src/Server.ts
@@ -38,9 +38,23 @@ async function main() {
 				'${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}',
 			endpointPrivate: `ws://localhost:${port}`,
 			...(!Config.get().gateway.endpointPublic && {
-				endpointPublic: `http://localhost:${port}`,
+				endpointPublic: `ws://localhost:${port}`,
 			}),
 		},
+		// regions: {
+		// 	default: "fosscord",
+		// 	useDefaultAsOptimal: true,
+		// 	available: [
+		// 		{
+		// 			id: "fosscord",
+		// 			name: "Fosscord",
+		// 			endpoint: "127.0.0.1:3001",
+		// 			vip: false,
+		// 			custom: false,
+		// 			deprecated: false,
+		// 		},
+		// 	],
+		// },
 	} as any);
 
 	await Promise.all([api.start(), cdn.start(), gateway.start()]);
diff --git a/gateway/package.json b/gateway/package.json
index d0292925..863d7f4e 100644
--- a/gateway/package.json
+++ b/gateway/package.json
@@ -4,7 +4,7 @@
 	"description": "",
 	"main": "dist/index.js",
 	"scripts": {
-		"postinstall": "ts-patch install -s",
+		"postinstall": "npx ts-patch install -s",
 		"test": "echo \"Error: no test specified\" && exit 1",
 		"start": "npm run build && node dist/start.js",
 		"build": "npx tsc -b .",
diff --git a/gateway/src/Server.ts b/gateway/src/Server.ts
index 944174c7..b4e92a75 100644
--- a/gateway/src/Server.ts
+++ b/gateway/src/Server.ts
@@ -1,7 +1,7 @@
 import "missing-native-js-functions";
 import dotenv from "dotenv";
 dotenv.config();
-import { closeDatabase, Config, initDatabase, initEvent, RabbitMQ } from "@fosscord/util";
+import { closeDatabase, Config, initDatabase, initEvent } from "@fosscord/util";
 import { Server as WebSocketServer } from "ws";
 import { Connection } from "./events/Connection";
 import http from "http";
@@ -12,15 +12,24 @@ export class Server {
 	public server: http.Server;
 	public production: boolean;
 
-	constructor({ port, server, production }: { port: number; server?: http.Server; production?: boolean }) {
+	constructor({
+		port,
+		server,
+		production,
+	}: {
+		port: number;
+		server?: http.Server;
+		production?: boolean;
+	}) {
 		this.port = port;
 		this.production = production || false;
 
 		if (server) this.server = server;
-		else
+		else {
 			this.server = http.createServer(function (req, res) {
 				res.writeHead(200).end("Online");
 			});
+		}
 
 		this.server.on("upgrade", (request, socket, head) => {
 			console.log("socket requests upgrade", request.url);
diff --git a/gateway/src/events/Connection.ts b/gateway/src/events/Connection.ts
index 85f92b77..f84f9d9b 100644
--- a/gateway/src/events/Connection.ts
+++ b/gateway/src/events/Connection.ts
@@ -35,8 +35,11 @@ export async function Connection(
 		// @ts-ignore
 		socket.encoding = searchParams.get("encoding") || "json";
 		if (!["json", "etf"].includes(socket.encoding)) {
-			if (socket.encoding === "etf" && erlpack)
-				throw new Error("Erlpack is not installed: 'npm i -D erlpack'");
+			if (socket.encoding === "etf" && erlpack) {
+				throw new Error(
+					"Erlpack is not installed: 'npm i @yukikaze-bot/erlpack'"
+				);
+			}
 			return socket.close(CLOSECODES.Decode_error);
 		}
 
diff --git a/gateway/src/util/setHeartbeat.ts b/gateway/src/util/Heartbeat.ts
index f6871cfe..f6871cfe 100644
--- a/gateway/src/util/setHeartbeat.ts
+++ b/gateway/src/util/Heartbeat.ts
diff --git a/gateway/src/util/WebSocket.ts b/gateway/src/util/WebSocket.ts
index b80265a7..49626b2a 100644
--- a/gateway/src/util/WebSocket.ts
+++ b/gateway/src/util/WebSocket.ts
@@ -1,7 +1,6 @@
 import { Intents, Permissions } from "@fosscord/util";
 import WS from "ws";
 import { Deflate } from "zlib";
-import { Channel } from "amqplib";
 
 export interface WebSocket extends WS {
 	version: number;
diff --git a/gateway/src/util/index.ts b/gateway/src/util/index.ts
index 27af5813..0be5ecee 100644
--- a/gateway/src/util/index.ts
+++ b/gateway/src/util/index.ts
@@ -1,5 +1,5 @@
 export * from "./Constants";
 export * from "./Send";
 export * from "./SessionUtils";
-export * from "./setHeartbeat";
+export * from "./Heartbeat";
 export * from "./WebSocket";
diff --git a/gateway/tsconfig.json b/gateway/tsconfig.json
index dd066383..7143c8a3 100644
--- a/gateway/tsconfig.json
+++ b/gateway/tsconfig.json
@@ -71,8 +71,7 @@
 		"baseUrl": ".",
 		"paths": {
 			"@fosscord/gateway": ["src/index"],
-			"@fosscord/gateway/*": ["src/*"],
-			"@fosscord/util/*": ["../util/src/*"]
+			"@fosscord/gateway/*": ["src/*"]
 		},
 		"plugins": [{ "transform": "@zerollup/ts-transform-paths" }]
 	}
diff --git a/util/src/entities/Config.ts b/util/src/entities/Config.ts
index 6d9db470..edce92a9 100644
--- a/util/src/entities/Config.ts
+++ b/util/src/entities/Config.ts
@@ -125,6 +125,7 @@ export interface ConfigValue {
 			required: boolean;
 			minimum: number; // in years
 		};
+		disabled: boolean;
 		requireCaptcha: boolean;
 		requireInvite: boolean;
 		allowNewRegistration: boolean;
@@ -143,6 +144,10 @@ export interface ConfigValue {
 		useDefaultAsOptimal: boolean;
 		available: Region[];
 	};
+	
+	guild: {
+		showAllGuildsInDiscovery: boolean;
+	};
 	rabbitmq: {
 		host: string | null;
 	};
@@ -266,6 +271,7 @@ export const DefaultConfigOptions: ConfigValue = {
 			required: false,
 			minimum: 13,
 		},
+		disabled: false,
 		requireInvite: false,
 		requireCaptcha: true,
 		allowNewRegistration: true,
@@ -293,6 +299,10 @@ export const DefaultConfigOptions: ConfigValue = {
 			},
 		],
 	},
+	
+	guild: {
+		showAllGuildsInDiscovery: false,
+	},
 	rabbitmq: {
 		host: null,
 	},
diff --git a/util/src/entities/Message.ts b/util/src/entities/Message.ts
index c4901693..04c3c7aa 100644
--- a/util/src/entities/Message.ts
+++ b/util/src/entities/Message.ts
@@ -74,9 +74,7 @@ export class Message extends BaseClass {
 	author_id: string;
 
 	@JoinColumn({ name: "author_id", referencedColumnName: "id" })
-	@ManyToOne(() => User, {
-		onDelete: "CASCADE",
-	})
+	@ManyToOne(() => User)
 	author?: User;
 
 	@Column({ nullable: true })
@@ -120,7 +118,7 @@ export class Message extends BaseClass {
 	mention_everyone?: boolean;
 
 	@JoinTable({ name: "message_user_mentions" })
-	@ManyToMany(() => User, { orphanedRowAction: "delete", onDelete: "CASCADE", cascade: true })
+	@ManyToMany(() => User)
 	mentions: User[];
 
 	@JoinTable({ name: "message_role_mentions" })
diff --git a/util/src/entities/User.ts b/util/src/entities/User.ts
index 5af755ed..b6f3723c 100644
--- a/util/src/entities/User.ts
+++ b/util/src/entities/User.ts
@@ -3,7 +3,6 @@ import { BaseClass } from "./BaseClass";
 import { BitField } from "../util/BitField";
 import { Relationship } from "./Relationship";
 import { ConnectedAccount } from "./ConnectedAccount";
-import { HTTPError } from "lambert-server";
 
 export enum PublicUserEnum {
 	username,
@@ -126,6 +125,9 @@ export class User extends BaseClass {
 	@Column()
 	public_flags: number;
 
+	@Column()
+	rights: string; // Rights
+
 	@JoinColumn({ name: "relationship_ids" })
 	@OneToMany(() => Relationship, (relationship: Relationship) => relationship.from, {
 		cascade: true,
@@ -278,5 +280,7 @@ export class UserFlags extends BitField {
 		UNDERAGE_DELETED: BigInt(1) << BigInt(15),
 		VERIFIED_BOT: BigInt(1) << BigInt(16),
 		EARLY_VERIFIED_BOT_DEVELOPER: BigInt(1) << BigInt(17),
+		CERTIFIED_MODERATOR: BigInt(1) << BigInt(18),
+		BOT_HTTP_INTERACTIONS: BigInt(1) << BigInt(19),
 	};
 }
diff --git a/util/src/util/BitField.ts b/util/src/util/BitField.ts
index ac19763e..fb887e05 100644
--- a/util/src/util/BitField.ts
+++ b/util/src/util/BitField.ts
@@ -141,3 +141,7 @@ export class BitField {
 		throw new RangeError("BITFIELD_INVALID: " + bit);
 	}
 }
+
+export function BitFlag(x: bigint | number) {
+	return BigInt(1) << BigInt(x);
+}
diff --git a/util/src/util/Config.ts b/util/src/util/Config.ts
index 6a9e0e5a..255f425d 100644
--- a/util/src/util/Config.ts
+++ b/util/src/util/Config.ts
@@ -21,7 +21,6 @@ export const Config = {
 	set: function set(val: Partial<ConfigValue>) {
 		if (!config || !val) return;
 		config = val.merge(config);
-		console.log(config);
 
 		return applyConfig(config);
 	},
diff --git a/util/src/util/Constants.ts b/util/src/util/Constants.ts
index d2cc5130..5fdf5bc0 100644
--- a/util/src/util/Constants.ts
+++ b/util/src/util/Constants.ts
@@ -726,7 +726,9 @@ export const DiscordApiErrors = {
 /**
  * An error encountered while performing an API request (Fosscord only). Here are the potential errors:
  */
-export const FosscordApiErrors = {};
+export const FosscordApiErrors = {
+	MISSING_RIGHTS: new ApiError("You lack rights to perform that action ({})", 50013, undefined, [""]),
+};
 
 /**
  * The value set for a guild's default message notifications, e.g. `ALL`. Here are the available types:
diff --git a/util/src/util/Permissions.ts b/util/src/util/Permissions.ts
index f0012c96..e5459ab5 100644
--- a/util/src/util/Permissions.ts
+++ b/util/src/util/Permissions.ts
@@ -3,8 +3,7 @@
 import { Channel, ChannelPermissionOverwrite, Guild, Member, Role } from "../entities";
 import { BitField } from "./BitField";
 import "missing-native-js-functions";
-import { BitFieldResolvable } from ".";
-// TODO: check role hierarchy permission
+import { BitFieldResolvable, BitFlag } from "./BitField";
 
 var HTTPError: any;
 
@@ -32,44 +31,44 @@ export class Permissions extends BitField {
 	}
 
 	static FLAGS = {
-		CREATE_INSTANT_INVITE: BigInt(1) << BigInt(0),
-		KICK_MEMBERS: BigInt(1) << BigInt(1),
-		BAN_MEMBERS: BigInt(1) << BigInt(2),
-		ADMINISTRATOR: BigInt(1) << BigInt(3),
-		MANAGE_CHANNELS: BigInt(1) << BigInt(4),
-		MANAGE_GUILD: BigInt(1) << BigInt(5),
-		ADD_REACTIONS: BigInt(1) << BigInt(6),
-		VIEW_AUDIT_LOG: BigInt(1) << BigInt(7),
-		PRIORITY_SPEAKER: BigInt(1) << BigInt(8),
-		STREAM: BigInt(1) << BigInt(9),
-		VIEW_CHANNEL: BigInt(1) << BigInt(10),
-		SEND_MESSAGES: BigInt(1) << BigInt(11),
-		SEND_TTS_MESSAGES: BigInt(1) << BigInt(12),
-		MANAGE_MESSAGES: BigInt(1) << BigInt(13),
-		EMBED_LINKS: BigInt(1) << BigInt(14),
-		ATTACH_FILES: BigInt(1) << BigInt(15),
-		READ_MESSAGE_HISTORY: BigInt(1) << BigInt(16),
-		MENTION_EVERYONE: BigInt(1) << BigInt(17),
-		USE_EXTERNAL_EMOJIS: BigInt(1) << BigInt(18),
-		VIEW_GUILD_INSIGHTS: BigInt(1) << BigInt(19),
-		CONNECT: BigInt(1) << BigInt(20),
-		SPEAK: BigInt(1) << BigInt(21),
-		MUTE_MEMBERS: BigInt(1) << BigInt(22),
-		DEAFEN_MEMBERS: BigInt(1) << BigInt(23),
-		MOVE_MEMBERS: BigInt(1) << BigInt(24),
-		USE_VAD: BigInt(1) << BigInt(25),
-		CHANGE_NICKNAME: BigInt(1) << BigInt(26),
-		MANAGE_NICKNAMES: BigInt(1) << BigInt(27),
-		MANAGE_ROLES: BigInt(1) << BigInt(28),
-		MANAGE_WEBHOOKS: BigInt(1) << BigInt(29),
-		MANAGE_EMOJIS_AND_STICKERS: BigInt(1) << BigInt(30),
-		USE_APPLICATION_COMMANDS: BigInt(1) << BigInt(31),
-		REQUEST_TO_SPEAK: BigInt(1) << BigInt(32),
+		CREATE_INSTANT_INVITE: BitFlag(0),
+		KICK_MEMBERS: BitFlag(1),
+		BAN_MEMBERS: BitFlag(2),
+		ADMINISTRATOR: BitFlag(3),
+		MANAGE_CHANNELS: BitFlag(4),
+		MANAGE_GUILD: BitFlag(5),
+		ADD_REACTIONS: BitFlag(6),
+		VIEW_AUDIT_LOG: BitFlag(7),
+		PRIORITY_SPEAKER: BitFlag(8),
+		STREAM: BitFlag(9),
+		VIEW_CHANNEL: BitFlag(10),
+		SEND_MESSAGES: BitFlag(11),
+		SEND_TTS_MESSAGES: BitFlag(12),
+		MANAGE_MESSAGES: BitFlag(13),
+		EMBED_LINKS: BitFlag(14),
+		ATTACH_FILES: BitFlag(15),
+		READ_MESSAGE_HISTORY: BitFlag(16),
+		MENTION_EVERYONE: BitFlag(17),
+		USE_EXTERNAL_EMOJIS: BitFlag(18),
+		VIEW_GUILD_INSIGHTS: BitFlag(19),
+		CONNECT: BitFlag(20),
+		SPEAK: BitFlag(21),
+		MUTE_MEMBERS: BitFlag(22),
+		DEAFEN_MEMBERS: BitFlag(23),
+		MOVE_MEMBERS: BitFlag(24),
+		USE_VAD: BitFlag(25),
+		CHANGE_NICKNAME: BitFlag(26),
+		MANAGE_NICKNAMES: BitFlag(27),
+		MANAGE_ROLES: BitFlag(28),
+		MANAGE_WEBHOOKS: BitFlag(29),
+		MANAGE_EMOJIS_AND_STICKERS: BitFlag(30),
+		USE_APPLICATION_COMMANDS: BitFlag(31),
+		REQUEST_TO_SPEAK: BitFlag(32),
 		// TODO: what is permission 33?
-		MANAGE_THREADS: BigInt(1) << BigInt(34),
-		USE_PUBLIC_THREADS: BigInt(1) << BigInt(35),
-		USE_PRIVATE_THREADS: BigInt(1) << BigInt(36),
-		USE_EXTERNAL_STICKERS: BigInt(1) << BigInt(37),
+		MANAGE_THREADS: BitFlag(34),
+		USE_PUBLIC_THREADS: BitFlag(35),
+		USE_PRIVATE_THREADS: BitFlag(36),
+		USE_EXTERNAL_STICKERS: BitFlag(37),
 
 		/**
 		 * CUSTOM PERMISSIONS ideas:
diff --git a/util/src/util/Rights.ts b/util/src/util/Rights.ts
new file mode 100644
index 00000000..a266e4f7
--- /dev/null
+++ b/util/src/util/Rights.ts
@@ -0,0 +1,73 @@
+import { BitField } from "./BitField";
+import "missing-native-js-functions";
+import { BitFieldResolvable, BitFlag } from "./BitField";
+
+var HTTPError: any;
+
+try {
+	HTTPError = require("lambert-server").HTTPError;
+} catch (e) {
+	HTTPError = Error;
+}
+
+export type RightResolvable = bigint | number | Rights | RightResolvable[] | RightString;
+
+type RightString = keyof typeof Rights.FLAGS;
+// TODO: just like roles for members, users should have privilidges which combine multiple rights into one and make it easy to assign
+
+export class Rights extends BitField {
+	constructor(bits: BitFieldResolvable = 0) {
+		super(bits);
+		if (this.bitfield & Rights.FLAGS.OPERATOR) {
+			this.bitfield = ALL_RIGHTS;
+		}
+	}
+
+	static FLAGS = {
+		OPERATOR: BitFlag(0), // has all rights
+		MANAGE_APPLICATIONS: BitFlag(1),
+		MANAGE_GUILDS: BitFlag(2),
+		MANAGE_MESSAGES: BitFlag(3), // Can't see other messages but delete/edit them in channels that they can see
+		MANAGE_RATE_LIMITS: BitFlag(4),
+		MANAGE_ROUTING: BitFlag(5), // can create custom message routes to any channel/guild
+		MANAGE_TICKETS: BitFlag(6),
+		MANAGE_USERS: BitFlag(7),
+		ADD_MEMBERS: BitFlag(8), // can manually add any members in their guilds
+		BYPASS_RATE_LIMITS: BitFlag(9),
+		CREATE_APPLICATIONS: BitFlag(10),
+		CREATE_CHANNELS: BitFlag(11),
+		CREATE_DMS: BitFlag(12),
+		CREATE_DM_GROUPS: BitFlag(13),
+		CREATE_GUILDS: BitFlag(14),
+		CREATE_INVITES: BitFlag(15),
+		CREATE_ROLES: BitFlag(16),
+		CREATE_TEMPLATES: BitFlag(17),
+		CREATE_WEBHOOKS: BitFlag(18),
+		JOIN_GUILDS: BitFlag(19),
+		PIN_MESSAGES: BitFlag(20),
+		SELF_ADD_REACTIONS: BitFlag(21),
+		SELF_DELETE_MESSAGES: BitFlag(22),
+		SELF_EDIT_MESSAGES: BitFlag(23),
+		SELF_EDIT_NAME: BitFlag(24),
+		SEND_MESSAGES: BitFlag(25),
+		USE_SCREEN: BitFlag(26),
+		USE_VIDEO: BitFlag(27),
+		USE_VOICE: BitFlag(28),
+	};
+
+	any(permission: RightResolvable, checkOperator = true) {
+		return (checkOperator && super.any(Rights.FLAGS.OPERATOR)) || super.any(permission);
+	}
+
+	has(permission: RightResolvable, checkOperator = true) {
+		return (checkOperator && super.has(Rights.FLAGS.OPERATOR)) || super.has(permission);
+	}
+
+	hasThrow(permission: RightResolvable) {
+		if (this.has(permission)) return true;
+		// @ts-ignore
+		throw new HTTPError(`You are missing the following rights ${permission}`, 403);
+	}
+}
+
+const ALL_RIGHTS = Object.values(Rights.FLAGS).reduce((total, val) => total | val, BigInt(0));
diff --git a/util/src/util/Token.ts b/util/src/util/Token.ts
index 111d59a2..7c4cc61d 100644
--- a/util/src/util/Token.ts
+++ b/util/src/util/Token.ts
@@ -10,7 +10,10 @@ export function checkToken(token: string, jwtSecret: string): Promise<any> {
 		jwt.verify(token, jwtSecret, JWTOptions, async (err, decoded: any) => {
 			if (err || !decoded) return rej("Invalid Token");
 
-			const user = await User.findOne({ id: decoded.id }, { select: ["data", "bot", "disabled", "deleted"] });
+			const user = await User.findOne(
+				{ id: decoded.id },
+				{ select: ["data", "bot", "disabled", "deleted", "rights"] }
+			);
 			if (!user) return rej("Invalid Token");
 			// we need to round it to seconds as it saved as seconds in jwt iat and valid_tokens_since is stored in milliseconds
 			if (decoded.iat * 1000 < new Date(user.data.valid_tokens_since).setSeconds(0, 0))
diff --git a/util/src/util/index.ts b/util/src/util/index.ts
index d73bf4ca..9c51d3b8 100644
--- a/util/src/util/index.ts
+++ b/util/src/util/index.ts
@@ -12,6 +12,7 @@ export * from "./MessageFlags";
 export * from "./Permissions";
 export * from "./RabbitMQ";
 export * from "./Regex";
+export * from "./Rights";
 export * from "./Snowflake";
 export * from "./String";
 export * from "./Array";