@@ -43,6 +43,7 @@ pub async fn edit(
43
43
&& data. flags . is_none ( )
44
44
&& data. analytics . is_none ( )
45
45
&& data. discoverable . is_none ( )
46
+ && data. owner . is_none ( )
46
47
&& data. remove . is_none ( )
47
48
{
48
49
return Ok ( Json ( server. into ( ) ) ) ;
@@ -57,6 +58,11 @@ pub async fn edit(
57
58
permissions. throw_if_lacking_channel_permission ( ChannelPermission :: ManageServer ) ?;
58
59
}
59
60
61
+ // Check we are the server owner if changing sensitive fields
62
+ if data. owner . is_some ( ) && user. id != server. owner {
63
+ return Err ( create_error ! ( NotOwner ) ) ;
64
+ }
65
+
60
66
// Check we are privileged if changing sensitive fields
61
67
if ( data. flags . is_some ( ) /*|| data.nsfw.is_some()*/ || data. discoverable . is_some ( ) )
62
68
&& !user. privileged
@@ -80,6 +86,7 @@ pub async fn edit(
80
86
// nsfw,
81
87
discoverable,
82
88
analytics,
89
+ owner,
83
90
remove,
84
91
} = data;
85
92
@@ -92,6 +99,7 @@ pub async fn edit(
92
99
// nsfw,
93
100
discoverable,
94
101
analytics,
102
+ owner : owner. clone ( ) ,
95
103
..Default :: default ( )
96
104
} ;
97
105
@@ -148,6 +156,21 @@ pub async fn edit(
148
156
server. banner = partial. banner . clone ( ) ;
149
157
}
150
158
159
+ // 5. Transfer ownership
160
+ if let Some ( owner) = owner {
161
+ let owner_reference = Reference { id : owner. clone ( ) } ;
162
+ // Check if member exists
163
+ owner_reference. as_member ( db, & server. id ) . await ?;
164
+ let owner_user = owner_reference. as_user ( db) . await ?;
165
+
166
+ if owner_user. bot . is_some ( ) {
167
+ return Err ( create_error ! ( InvalidOperation ) ) ;
168
+ }
169
+
170
+ server. owner = owner;
171
+ partial. owner = Some ( server. owner . clone ( ) ) ;
172
+ }
173
+
151
174
server
152
175
. update (
153
176
db,
0 commit comments