Skip to content

Commit 5273f1d

Browse files
authored
[Feature] Add PinMessages permission (#3178)
1 parent ae6e7d5 commit 5273f1d

File tree

6 files changed

+43
-15
lines changed

6 files changed

+43
-15
lines changed

src/Discord.Net.Core/Entities/Permissions/ChannelPermission.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,5 +207,10 @@ public enum ChannelPermission : ulong
207207
/// Allows user-installed apps to send public responses.
208208
/// </summary>
209209
UseExternalApps = 1L << 50,
210+
211+
/// <summary>
212+
/// Allows pinning and unpinning messages.
213+
/// </summary>
214+
PinMessages = 1L << 51,
210215
}
211216
}

src/Discord.Net.Core/Entities/Permissions/ChannelPermissions.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ public struct ChannelPermissions
1818
/// <summary>
1919
/// Gets a <see cref="ChannelPermissions"/> that grants all permissions for text channels.
2020
/// </summary>
21-
public static readonly ChannelPermissions Text = new(0b110_110001_001111_110010_110011_111101_111111_111101_010001);
21+
public static readonly ChannelPermissions Text = new(0b1110_110001_001111_110010_110011_111101_111111_111101_010001);
2222

2323
/// <summary>
2424
/// Gets a <see cref="ChannelPermissions"/> that grants all permissions for voice channels.
2525
/// </summary>
26-
public static readonly ChannelPermissions Voice = new(0b111_110101_001010_001010_110011_111101_111111_111101_010001);
26+
public static readonly ChannelPermissions Voice = new(0b0111_110101_001010_001010_110011_111101_111111_111101_010001);
2727

2828
/// <summary>
2929
/// Gets a <see cref="ChannelPermissions"/> that grants all permissions for stage channels.
3030
/// </summary>
31-
public static readonly ChannelPermissions Stage = new(0b110_110100_000010_001110_010001_010101_111111_111001_010001);
31+
public static readonly ChannelPermissions Stage = new(0b0110_110100_000010_001110_010001_010101_111111_111001_010001);
3232

3333
/// <summary>
3434
/// Gets a <see cref="ChannelPermissions"/> that grants all permissions for category channels.
@@ -48,7 +48,7 @@ public struct ChannelPermissions
4848
/// <summary>
4949
/// Gets a <see cref="ChannelPermissions"/> that grants all permissions for forum channels.
5050
/// </summary>
51-
public static readonly ChannelPermissions Forum = new(0b000001_001110_010010_110011_111101_111111_111101_010001);
51+
public static readonly ChannelPermissions Forum = new(0b1000_000001_001110_010010_110011_111101_111111_111101_010001);
5252

5353
/// <summary>
5454
/// Gets a <see cref="ChannelPermissions"/> that grants all permissions for media channels.
@@ -158,6 +158,8 @@ public static ChannelPermissions All(IChannel channel)
158158
public bool UserExternalApps => Permissions.GetValue(RawValue, ChannelPermission.UseExternalApps);
159159
/// <summary> If <see langword="true"/>, a user-installed application can send public responses.</summary>
160160
public bool UseExternalSounds => Permissions.GetValue(RawValue, ChannelPermission.UseExternalSounds);
161+
/// <summary> If <see langword="true"/>, a user can ping and unpin messages.</summary>
162+
public bool PinMessages => Permissions.GetValue(RawValue, ChannelPermission.PinMessages);
161163

162164
/// <summary> Creates a new <see cref="ChannelPermissions"/> with the provided packed value.</summary>
163165
public ChannelPermissions(ulong rawValue) { RawValue = rawValue; }
@@ -200,7 +202,8 @@ private ChannelPermissions(ulong initialValue,
200202
bool? setVoiceChannelStatus = null,
201203
bool? sendPolls = null,
202204
bool? useExternalApps = null,
203-
bool? useExternalSounds = null)
205+
bool? useExternalSounds = null,
206+
bool? pinMessages = null)
204207
{
205208
ulong value = initialValue;
206209

@@ -242,6 +245,7 @@ private ChannelPermissions(ulong initialValue,
242245
Permissions.SetValue(ref value, sendPolls, ChannelPermission.SendPolls);
243246
Permissions.SetValue(ref value, useExternalApps, ChannelPermission.UseExternalApps);
244247
Permissions.SetValue(ref value, useExternalSounds, ChannelPermission.UseExternalSounds);
248+
Permissions.SetValue(ref value, pinMessages, ChannelPermission.PinMessages);
245249

246250
RawValue = value;
247251
}
@@ -285,12 +289,14 @@ public ChannelPermissions(
285289
bool setVoiceChannelStatus = false,
286290
bool sendPolls = false,
287291
bool useExternalApps = false,
288-
bool useExternalSounds = false)
292+
bool useExternalSounds = false,
293+
bool pinMessages = false)
289294
: this(0, createInstantInvite, manageChannel, addReactions, viewChannel, sendMessages, sendTTSMessages, manageMessages,
290295
embedLinks, attachFiles, readMessageHistory, mentionEveryone, useExternalEmojis, connect,
291296
speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, prioritySpeaker, stream, manageRoles, manageWebhooks,
292297
useApplicationCommands, requestToSpeak, manageThreads, createPublicThreads, createPrivateThreads, useExternalStickers, sendMessagesInThreads,
293-
startEmbeddedActivities, useSoundboard, createEvents, sendVoiceMessages, useClydeAI, setVoiceChannelStatus, sendPolls, useExternalApps, useExternalSounds)
298+
startEmbeddedActivities, useSoundboard, createEvents, sendVoiceMessages, useClydeAI, setVoiceChannelStatus, sendPolls, useExternalApps,
299+
useExternalSounds, pinMessages)
294300
{ }
295301

296302
/// <summary> Creates a new <see cref="ChannelPermissions"/> from this one, changing the provided non-null permissions.</summary>
@@ -332,7 +338,8 @@ public ChannelPermissions Modify(
332338
bool? setVoiceChannelStatus = null,
333339
bool? sendPolls = null,
334340
bool? useExternalApps = null,
335-
bool? useExternalSounds = null)
341+
bool? useExternalSounds = null,
342+
bool? pinMessages = null)
336343
=> new ChannelPermissions(RawValue,
337344
createInstantInvite,
338345
manageChannel,
@@ -371,7 +378,8 @@ public ChannelPermissions Modify(
371378
setVoiceChannelStatus,
372379
sendPolls,
373380
useExternalApps,
374-
useExternalSounds);
381+
useExternalSounds,
382+
pinMessages);
375383

376384
public bool Has(ChannelPermission permission) => Permissions.GetValue(RawValue, permission);
377385

src/Discord.Net.Core/Entities/Permissions/GuildPermission.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,5 +302,10 @@ public enum GuildPermission : ulong
302302
/// Allows user-installed apps to send public responses.
303303
/// </summary>
304304
UseExternalApps = 1L << 50,
305+
306+
/// <summary>
307+
/// Allows pinning and unpinning messages.
308+
/// </summary>
309+
PinMessages = 1L << 51,
305310
}
306311
}

src/Discord.Net.Core/Entities/Permissions/GuildPermissions.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ public struct GuildPermissions
124124
public bool UserExternalSounds => Permissions.GetValue(RawValue, GuildPermission.UseExternalSounds);
125125
/// <summary> If <see langword="true"/>, a user can create events.</summary>
126126
public bool CreateEvents => Permissions.GetValue(RawValue, GuildPermission.CreateEvents);
127+
/// <summary> If <see langword="true"/>, a user can ping and unpin messages.</summary>
128+
public bool PinMessages => Permissions.GetValue(RawValue, GuildPermission.PinMessages);
127129

128130
/// <summary> Creates a new <see cref="GuildPermissions"/> with the provided packed value. </summary>
129131
public GuildPermissions(ulong rawValue) { RawValue = rawValue; }
@@ -182,7 +184,8 @@ private GuildPermissions(ulong initialValue,
182184
bool? sendPolls = null,
183185
bool? useExternalApps = null,
184186
bool? useExternalSounds = null,
185-
bool? createEvents = null)
187+
bool? createEvents = null,
188+
bool? pinMessages = null)
186189
{
187190
ulong value = initialValue;
188191

@@ -237,6 +240,7 @@ private GuildPermissions(ulong initialValue,
237240
Permissions.SetValue(ref value, useExternalApps, GuildPermission.UseExternalApps);
238241
Permissions.SetValue(ref value, useExternalSounds, GuildPermission.UseExternalSounds);
239242
Permissions.SetValue(ref value, createEvents, GuildPermission.CreateEvents);
243+
Permissions.SetValue(ref value, pinMessages, GuildPermission.PinMessages);
240244

241245
RawValue = value;
242246
}
@@ -293,7 +297,8 @@ public GuildPermissions(
293297
bool sendPolls = false,
294298
bool useExternalApps = false,
295299
bool useExternalSounds = false,
296-
bool createEvents = false)
300+
bool createEvents = false,
301+
bool pinMessages = false)
297302
: this(0,
298303
createInstantInvite: createInstantInvite,
299304
manageRoles: manageRoles,
@@ -345,7 +350,8 @@ public GuildPermissions(
345350
sendPolls: sendPolls,
346351
useExternalApps: useExternalApps,
347352
useExternalSounds: useExternalSounds,
348-
createEvents: createEvents)
353+
createEvents: createEvents,
354+
pinMessages: pinMessages)
349355
{ }
350356

351357
/// <summary> Creates a new <see cref="GuildPermissions"/> from this one, changing the provided non-null permissions. </summary>
@@ -400,14 +406,15 @@ public GuildPermissions Modify(
400406
bool? sendPolls = null,
401407
bool? useExternalApps = null,
402408
bool? useExternalSounds = null,
403-
bool? createEvents = null)
409+
bool? createEvents = null,
410+
bool? pinMessages = null)
404411
=> new GuildPermissions(RawValue, createInstantInvite, kickMembers, banMembers, administrator, manageChannels, manageGuild, addReactions,
405412
viewAuditLog, viewGuildInsights, viewChannel, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles,
406413
readMessageHistory, mentionEveryone, useExternalEmojis, connect, speak, muteMembers, deafenMembers, moveMembers,
407414
useVoiceActivation, prioritySpeaker, stream, changeNickname, manageNicknames, manageRoles, manageWebhooks, manageEmojisAndStickers,
408415
useApplicationCommands, requestToSpeak, manageEvents, manageThreads, createPublicThreads, createPrivateThreads, useExternalStickers, sendMessagesInThreads,
409416
startEmbeddedActivities, moderateMembers, useSoundboard, viewMonetizationAnalytics, sendVoiceMessages, useClydeAI, createGuildExpressions, setVoiceChannelStatus,
410-
sendPolls, useExternalApps, useExternalSounds, createEvents);
417+
sendPolls, useExternalApps, useExternalSounds, createEvents, pinMessages);
411418

412419
/// <summary>
413420
/// Returns a value that indicates if a specific <see cref="GuildPermission"/> is enabled

test/Discord.Net.Tests.Unit/ChannelPermissionsTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void AssertFlag(Func<ChannelPermissions> cstr, ChannelPermission flag)
9797
AssertFlag(() => new ChannelPermissions(setVoiceChannelStatus: true), ChannelPermission.SetVoiceChannelStatus);
9898
AssertFlag(() => new ChannelPermissions(sendPolls: true), ChannelPermission.SendPolls);
9999
AssertFlag(() => new ChannelPermissions(useExternalApps: true), ChannelPermission.UseExternalApps);
100-
AssertFlag(() => new ChannelPermissions(useExternalSounds: true), ChannelPermission.UseExternalSounds);
100+
AssertFlag(() => new ChannelPermissions(pinMessages: true), ChannelPermission.PinMessages);
101101
}
102102

103103
/// <summary>
@@ -168,6 +168,7 @@ void AssertUtil(ChannelPermission permission,
168168
AssertUtil(ChannelPermission.SendPolls, x => x.SendPolls, (p, enable) => p.Modify(sendPolls: enable));
169169
AssertUtil(ChannelPermission.UseExternalApps, x => x.UserExternalApps, (p, enable) => p.Modify(useExternalApps: enable));
170170
AssertUtil(ChannelPermission.UseExternalSounds, x => x.UseExternalSounds, (p, enable) => p.Modify(useExternalSounds: enable));
171+
AssertUtil(ChannelPermission.PinMessages, x => x.PinMessages, (p, enable) => p.Modify(pinMessages: enable));
171172
}
172173

173174
/// <summary>

test/Discord.Net.Tests.Unit/GuildPermissionsTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ void AssertFlag(Func<GuildPermissions> cstr, GuildPermission flag)
109109
AssertFlag(() => new GuildPermissions(useExternalApps: true), GuildPermission.UseExternalApps);
110110
AssertFlag(() => new GuildPermissions(useExternalSounds: true), GuildPermission.UseExternalSounds);
111111
AssertFlag(() => new GuildPermissions(createEvents: true), GuildPermission.CreateEvents);
112+
AssertFlag(() => new GuildPermissions(pinMessages: true), GuildPermission.PinMessages);
112113
}
113114

114115
/// <summary>
@@ -197,6 +198,7 @@ void AssertUtil(GuildPermission permission,
197198
AssertUtil(GuildPermission.UseExternalApps, x => x.UserExternalApps, (p, enable) => p.Modify(useExternalApps: enable));
198199
AssertUtil(GuildPermission.UseExternalSounds, x => x.UserExternalSounds, (p, enable) => p.Modify(useExternalSounds: enable));
199200
AssertUtil(GuildPermission.CreateEvents, x => x.CreateEvents, (p, enable) => p.Modify(createEvents: enable));
201+
AssertUtil(GuildPermission.PinMessages, x => x.PinMessages, (p, enable) => p.Modify(pinMessages: enable));
200202
}
201203
}
202204
}

0 commit comments

Comments
 (0)