@@ -18,11 +18,12 @@ public class SocketUserMessage : SocketMessage, IUserMessage
1818 private bool _isMentioningEveryone , _isTTS , _isPinned ;
1919 private long ? _editedTimestampTicks ;
2020 private IUserMessage _referencedMessage ;
21- private ImmutableArray < Attachment > _attachments = ImmutableArray . Create < Attachment > ( ) ;
22- private ImmutableArray < Embed > _embeds = ImmutableArray . Create < Embed > ( ) ;
23- private ImmutableArray < ITag > _tags = ImmutableArray . Create < ITag > ( ) ;
24- private ImmutableArray < SocketRole > _roleMentions = ImmutableArray . Create < SocketRole > ( ) ;
25- private ImmutableArray < SocketSticker > _stickers = ImmutableArray . Create < SocketSticker > ( ) ;
21+ private ImmutableArray < Attachment > _attachments = [ ] ;
22+ private ImmutableArray < Embed > _embeds = [ ] ;
23+ private ImmutableArray < ITag > _tags = [ ] ;
24+ private ImmutableArray < SocketRole > _roleMentions ;
25+ private ImmutableArray < ulong > _roleMentionsIds = [ ] ;
26+ private ImmutableArray < SocketSticker > _stickers = [ ] ;
2627
2728 /// <inheritdoc />
2829 public override bool IsTTS => _isTTS ;
@@ -44,6 +45,9 @@ public class SocketUserMessage : SocketMessage, IUserMessage
4445 public override IReadOnlyCollection < SocketGuildChannel > MentionedChannels => MessageHelper . FilterTagsByValue < SocketGuildChannel > ( TagType . ChannelMention , _tags ) ;
4546 /// <inheritdoc />
4647 public override IReadOnlyCollection < SocketRole > MentionedRoles => _roleMentions ;
48+ /// <inheritdoc />
49+ public override IReadOnlyCollection < ulong > MentionedRoleIds => _roleMentionsIds ;
50+
4751 /// <inheritdoc />
4852 public override IReadOnlyCollection < SocketSticker > Stickers => _stickers ;
4953 /// <inheritdoc />
@@ -64,6 +68,7 @@ public class SocketUserMessage : SocketMessage, IUserMessage
6468 internal SocketUserMessage ( DiscordSocketClient discord , ulong id , ISocketMessageChannel channel , SocketUser author , MessageSource source )
6569 : base ( discord , id , channel , author , source )
6670 {
71+ _roleMentions = ImmutableArray . Create < SocketRole > ( ) ;
6772 }
6873 internal new static SocketUserMessage Create ( DiscordSocketClient discord , ClientState state , SocketUser author , ISocketMessageChannel channel , Model model )
6974 {
@@ -87,7 +92,12 @@ internal override void Update(ClientState state, Model model)
8792 if ( model . MentionEveryone . IsSpecified )
8893 _isMentioningEveryone = model . MentionEveryone . Value ;
8994 if ( model . RoleMentions . IsSpecified )
90- _roleMentions = model . RoleMentions . Value . Select ( x => guild . GetRole ( x ) ) . ToImmutableArray ( ) ;
95+ {
96+ if ( guild is not null )
97+ _roleMentions = model . RoleMentions . Value . Select ( x => guild . GetRole ( x ) ) . ToImmutableArray ( ) ;
98+ _roleMentionsIds = model . RoleMentions . Value . ToImmutableArray ( ) ;
99+ }
100+
91101
92102 if ( model . Attachments . IsSpecified )
93103 {
@@ -100,7 +110,7 @@ internal override void Update(ClientState state, Model model)
100110 _attachments = attachments . ToImmutable ( ) ;
101111 }
102112 else
103- _attachments = ImmutableArray . Create < Attachment > ( ) ;
113+ _attachments = [ ] ;
104114 }
105115
106116 if ( model . Embeds . IsSpecified )
@@ -114,7 +124,7 @@ internal override void Update(ClientState state, Model model)
114124 _embeds = embeds . ToImmutable ( ) ;
115125 }
116126 else
117- _embeds = ImmutableArray . Create < Embed > ( ) ;
127+ _embeds = [ ] ;
118128 }
119129
120130 if ( model . Content . IsSpecified )
@@ -155,34 +165,32 @@ internal override void Update(ClientState state, Model model)
155165 if ( value . Length > 0 )
156166 {
157167 var stickers = ImmutableArray . CreateBuilder < SocketSticker > ( value . Length ) ;
158- for ( int i = 0 ; i < value . Length ; i ++ )
168+ foreach ( var stickerItem in value )
159169 {
160- var stickerItem = value [ i ] ;
161170 SocketSticker sticker = null ;
162171
163172 if ( guild != null )
164173 sticker = guild . GetSticker ( stickerItem . Id ) ;
165174
166- if ( sticker == null )
167- sticker = Discord . GetSticker ( stickerItem . Id ) ;
175+ sticker ??= Discord . GetSticker ( stickerItem . Id ) ;
168176
169177 // if they want to auto resolve
170178 if ( Discord . AlwaysResolveStickers )
171179 {
172- sticker = Task . Run ( async ( ) => await Discord . GetStickerAsync ( stickerItem . Id ) . ConfigureAwait ( false ) ) . GetAwaiter ( ) . GetResult ( ) ;
180+ var item = stickerItem ;
181+ sticker = Task . Run ( async ( ) => await Discord . GetStickerAsync ( item . Id ) . ConfigureAwait ( false ) ) . GetAwaiter ( ) . GetResult ( ) ;
173182 }
174183
175184 // if its still null, create an unknown
176- if ( sticker == null )
177- sticker = SocketUnknownSticker . Create ( Discord , stickerItem ) ;
185+ sticker ??= SocketUnknownSticker . Create ( Discord , stickerItem ) ;
178186
179187 stickers . Add ( sticker ) ;
180188 }
181189
182190 _stickers = stickers . ToImmutable ( ) ;
183191 }
184192 else
185- _stickers = ImmutableArray . Create < SocketSticker > ( ) ;
193+ _stickers = [ ] ;
186194 }
187195
188196 if ( model . Resolved . IsSpecified )
0 commit comments