summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlTech98 <altech123159@gmail.com>2021-09-17 18:29:02 +0200
committerAlTech98 <altech123159@gmail.com>2021-09-17 18:29:02 +0200
commit6123f359b0b58e72da70d0f0d89cc7714d54f8b6 (patch)
treedb64b13077038f94a2d32979641229d25f7871f8
parentMerge branch 'fosscord:master' into fix-dm (diff)
downloadserver-6123f359b0b58e72da70d0f0d89cc7714d54f8b6.tar.xz
Fix icon, owner_id change and channel deletion for group DMs
-rw-r--r--api/assets/schemas.json1186
-rw-r--r--api/src/routes/channels/#channel_id/index.ts8
-rw-r--r--cdn/src/Server.ts3
-rw-r--r--util/src/entities/Channel.ts4
-rw-r--r--util/src/services/ChannelService.ts36
5 files changed, 631 insertions, 606 deletions
diff --git a/api/assets/schemas.json b/api/assets/schemas.json
index 9c34f968..05046b97 100644
--- a/api/assets/schemas.json
+++ b/api/assets/schemas.json
@@ -81,11 +81,30 @@
                 "type": "string"
             },
             "type": {
-                "$ref": "#/definitions/ChannelType"
+                "enum": [
+                    0,
+                    1,
+                    10,
+                    11,
+                    12,
+                    13,
+                    2,
+                    3,
+                    4,
+                    5,
+                    6
+                ],
+                "type": "number"
             },
             "topic": {
                 "type": "string"
             },
+            "icon": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
             "bitrate": {
                 "type": "integer"
             },
@@ -142,27 +161,7 @@
             }
         },
         "additionalProperties": false,
-        "required": [
-            "name",
-            "type"
-        ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -308,11 +307,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -368,11 +386,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -470,22 +484,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -631,11 +629,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -691,11 +708,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -751,22 +764,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -912,11 +909,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -972,11 +988,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -1002,22 +1014,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -1163,11 +1159,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -1223,11 +1238,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -1256,22 +1267,6 @@
             "messages"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -1417,11 +1412,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -1477,11 +1491,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -1519,22 +1529,6 @@
             "type"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -1680,11 +1674,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -1740,11 +1753,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -1775,22 +1784,6 @@
             "name"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -1936,11 +1929,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -1996,11 +2008,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -2026,22 +2034,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -2187,11 +2179,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -2247,11 +2258,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -2289,22 +2296,6 @@
             ]
         },
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -2450,11 +2441,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -2510,11 +2520,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -2565,22 +2571,6 @@
             "name"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -2726,11 +2716,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -2786,11 +2795,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -2889,22 +2894,6 @@
             "name"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -3050,11 +3039,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -3110,11 +3118,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -3140,22 +3144,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -3301,11 +3289,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -3361,11 +3368,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -3391,22 +3394,6 @@
             "nick"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -3552,11 +3539,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -3612,11 +3618,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -3654,22 +3656,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -3815,11 +3801,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -3875,11 +3880,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -3912,22 +3913,6 @@
             ]
         },
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -4073,11 +4058,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -4133,11 +4137,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -4166,22 +4166,6 @@
             "name"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -4327,11 +4311,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -4387,11 +4390,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -4420,22 +4419,6 @@
             "name"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -4581,11 +4564,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -4641,11 +4643,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -4670,22 +4668,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -4831,11 +4813,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -4891,11 +4892,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -4940,22 +4937,6 @@
             "channel_id"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -5101,11 +5082,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -5161,11 +5161,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -5217,22 +5213,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -5378,11 +5358,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -5438,11 +5437,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -5472,22 +5467,6 @@
             "enabled"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -5633,11 +5612,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -5693,11 +5691,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -5726,22 +5720,6 @@
             "name"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -5887,11 +5865,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -5947,11 +5944,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -5983,22 +5976,6 @@
             "recipients"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -6144,11 +6121,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -6204,11 +6200,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -6264,22 +6256,6 @@
         },
         "additionalProperties": false,
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -6425,11 +6401,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -6485,11 +6480,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -6515,22 +6506,6 @@
             "type"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -6676,11 +6651,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -6736,11 +6730,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -6770,22 +6760,6 @@
             "username"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -6931,11 +6905,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -6991,11 +6984,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
@@ -7208,22 +7197,6 @@
             "timezone_offset"
         ],
         "definitions": {
-            "ChannelType": {
-                "enum": [
-                    0,
-                    1,
-                    10,
-                    11,
-                    12,
-                    13,
-                    2,
-                    3,
-                    4,
-                    5,
-                    6
-                ],
-                "type": "number"
-            },
             "ChannelPermissionOverwriteType": {
                 "enum": [
                     0,
@@ -7369,11 +7342,30 @@
                         "type": "string"
                     },
                     "type": {
-                        "$ref": "#/definitions/ChannelType"
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            2,
+                            3,
+                            4,
+                            5,
+                            6
+                        ],
+                        "type": "number"
                     },
                     "topic": {
                         "type": "string"
                     },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
                     "bitrate": {
                         "type": "integer"
                     },
@@ -7429,11 +7421,7 @@
                         "type": "integer"
                     }
                 },
-                "additionalProperties": false,
-                "required": [
-                    "name",
-                    "type"
-                ]
+                "additionalProperties": false
             },
             "RelationshipType": {
                 "enum": [
diff --git a/api/src/routes/channels/#channel_id/index.ts b/api/src/routes/channels/#channel_id/index.ts
index e836622b..70dd3994 100644
--- a/api/src/routes/channels/#channel_id/index.ts
+++ b/api/src/routes/channels/#channel_id/index.ts
@@ -1,6 +1,6 @@
 import { Channel, ChannelDeleteEvent, ChannelPermissionOverwriteType, ChannelService, ChannelType, ChannelUpdateEvent, emitEvent, Recipient } from "@fosscord/util";
 import { Request, Response, Router } from "express";
-import { route } from "@fosscord/api";
+import { handleFile, route } from "@fosscord/api";
 
 const router: Router = Router();
 // TODO: delete channel
@@ -44,9 +44,10 @@ export interface ChannelModifySchema {
 	/**
 	 * @maxLength 100
 	 */
-	name: string;
-	type: ChannelType;
+	name?: string;
+	type?: ChannelType;
 	topic?: string;
+	icon?: string | null;
 	bitrate?: number;
 	user_limit?: number;
 	rate_limit_per_user?: number;
@@ -67,6 +68,7 @@ export interface ChannelModifySchema {
 router.patch("/", route({ body: "ChannelModifySchema", permission: "MANAGE_CHANNELS" }), async (req: Request, res: Response) => {
 	var payload = req.body as ChannelModifySchema;
 	const { channel_id } = req.params;
+	if (payload.icon) payload.icon = await handleFile(`/channel-icons/${channel_id}`, payload.icon);
 
 	const channel = await Channel.findOneOrFail({ id: channel_id });
 	channel.assign(payload);
diff --git a/cdn/src/Server.ts b/cdn/src/Server.ts
index 5c4a8ae5..590eda6f 100644
--- a/cdn/src/Server.ts
+++ b/cdn/src/Server.ts
@@ -58,6 +58,9 @@ export class CDNServer extends Server {
 		this.app.use("/team-icons/", avatarsRoute);
 		this.log("verbose", "[Server] Route /team-icons registered");
 
+		this.app.use("/channel-icons/", avatarsRoute);
+		this.log("verbose", "[Server] Route /channel-icons registered");
+
 		return super.start();
 	}
 
diff --git a/util/src/entities/Channel.ts b/util/src/entities/Channel.ts
index 6eac19ca..aa2bfab3 100644
--- a/util/src/entities/Channel.ts
+++ b/util/src/entities/Channel.ts
@@ -30,8 +30,8 @@ export class Channel extends BaseClass {
 	@Column({ nullable: true })
 	name?: string;
 
-	@Column({ nullable: true })
-	icon?: string;
+	@Column({ type: 'text', nullable: true })
+	icon?: string | null;
 
 	@Column({ type: "simple-enum", enum: ChannelType })
 	type: ChannelType;
diff --git a/util/src/services/ChannelService.ts b/util/src/services/ChannelService.ts
index 319475b6..8f57a28a 100644
--- a/util/src/services/ChannelService.ts
+++ b/util/src/services/ChannelService.ts
@@ -1,4 +1,4 @@
-import { Channel, ChannelType, PublicUserProjection, Recipient, User } from "../entities";
+import { Channel, ChannelType, Message, PublicUserProjection, Recipient, User } from "../entities";
 import { HTTPError } from "lambert-server";
 import { emitEvent, trimSpecial } from "../util";
 import { DmChannelDTO } from "../dtos";
@@ -72,10 +72,36 @@ export class ChannelService {
 
 	public static async removeRecipientFromChannel(channel: Channel, user_id: string) {
 		await Recipient.delete({ channel_id: channel.id, user_id: user_id })
+		channel.recipients = channel.recipients?.filter(r => r.user_id !== user_id)
+
+		if (channel.recipients?.length === 0) {
+			await ChannelService.deleteChannel(channel);
+			await emitEvent({
+				event: "CHANNEL_DELETE",
+				data: await DmChannelDTO.from(channel, [user_id]),
+				user_id: user_id
+			});
+			return
+		}
+
+		let channel_dto = null;
+
+		//If the owner leave we make the first recipient in the list the new owner
+		if (channel.owner_id === user_id) {
+			channel.owner_id = channel.recipients!.find(r => r.user_id !== user_id)!.user_id //Is there a criteria to choose the new owner?
+			channel_dto = await DmChannelDTO.from(channel, [user_id])
+			await emitEvent({
+				event: "CHANNEL_UPDATE",
+				data: channel_dto,
+				channel_id: channel.id
+			});
+		}
+
+		await channel.save()
 
 		await emitEvent({
 			event: "CHANNEL_DELETE",
-			data: await DmChannelDTO.from(channel, [user_id]),
+			data: channel_dto !== null ? channel_dto : await DmChannelDTO.from(channel, [user_id]),
 			user_id: user_id
 		});
 
@@ -86,4 +112,10 @@ export class ChannelService {
 			}, channel_id: channel.id
 		} as ChannelRecipientRemoveEvent);
 	}
+
+	public static async deleteChannel(channel: Channel) {
+		await Message.delete({ channel_id: channel.id }) //TODO we should also delete the attachments from the cdn but to do that we need to move cdn.ts in util
+		//TODO before deleting the channel we should check and delete other relations
+		await Channel.delete({ id: channel.id })
+	}
 }