This commit is contained in:
Mihail Gribkov
2024-08-29 00:02:20 +03:00
committed by GitHub
parent bc84b94bd9
commit 57eb906552
8 changed files with 66 additions and 0 deletions

View File

@@ -55,6 +55,14 @@ namespace Discord
return $"{DiscordConfig.CDNUrl}guilds/{guildId}/users/{userId}/avatars/{avatarId}.{extension}?size={size}";
}
public static string GetGuildUserBannerUrl(ulong userId, ulong guildId, string bannerId, ushort size, ImageFormat format)
{
if (bannerId == null)
return null;
var extension = FormatToExtension(format, bannerId);
return $"{DiscordConfig.CDNUrl}guilds/{guildId}/users/{userId}/banners/{bannerId}.{extension}?size={size}";
}
/// <summary>
/// Returns a user banner URL.
/// </summary>

View File

@@ -39,6 +39,7 @@ namespace Discord
/// If the user also does not have a regular avatar, this will be <see langword="null"/>.
/// </returns>
string DisplayAvatarId { get; }
/// <summary>
/// Gets the guild specific avatar for this user.
/// </summary>
@@ -46,6 +47,15 @@ namespace Discord
/// The users guild avatar hash if they have one; otherwise <see langword="null"/>.
/// </returns>
string GuildAvatarId { get; }
/// <summary>
/// Gets the guild specific banner for this user.
/// </summary>
/// <returns>
/// The user's guild banner hash if they have one; otherwise <see langword="null"/>.
/// </returns>
string GuildBannerHash { get; }
/// <summary>
/// Gets the guild-level permissions for this user.
/// </summary>
@@ -147,6 +157,17 @@ namespace Discord
/// A string representing the user's guild-specific avatar URL; <see langword="null"/> if the user has no guild avatar set.
/// </returns>
string GetGuildAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128);
/// <summary>
/// Gets the guild-specific banner URL for this user, if it is set.
/// </summary>
/// <param name="format">The format of the image.</param>
/// <param name="size">The size of the image that matches any power of two, ranging from 16 to 2048.</param>
/// <returns>
/// A string representing the user's guild-specific banner URL; <see langword="null"/> if the user has no guild banner set.
/// </returns>
string GetGuildBannerUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128);
/// <summary>
/// Kicks this user from this guild.
/// </summary>

View File

@@ -28,5 +28,8 @@ namespace Discord.API
[JsonProperty("flags")]
public GuildUserFlags Flags { get; set; }
[JsonProperty("banner")]
public Optional<string> Banner { get; set; }
}
}

View File

@@ -29,6 +29,10 @@ namespace Discord.Rest
public string DisplayAvatarId => GuildAvatarId ?? AvatarId;
/// <inheritdoc/>
public string GuildAvatarId { get; private set; }
/// <inheritdoc/>
public string GuildBannerHash { get; private set; }
internal IGuild Guild { get; private set; }
/// <inheritdoc />
public bool IsDeafened { get; private set; }
@@ -122,6 +126,8 @@ namespace Discord.Rest
_timedOutTicks = model.TimedOutUntil.Value?.UtcTicks;
if (model.Pending.IsSpecified)
IsPending = model.Pending.Value;
if (model.Banner.IsSpecified)
GuildBannerHash = model.Banner.Value;
Flags = model.Flags;
}
private void UpdateRoles(ulong[] roleIds)
@@ -200,6 +206,10 @@ namespace Discord.Rest
public string GetGuildAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
=> CDN.GetGuildUserAvatarUrl(Id, GuildId, GuildAvatarId, size, format);
/// <inheritdoc />
public string GetGuildBannerUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
=> CDN.GetGuildUserBannerUrl(Id, GuildId, GuildBannerHash, size, format);
/// <inheritdoc />
public override string GetDisplayAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
=> GetGuildAvatarUrl(format, size) ?? base.GetDisplayAvatarUrl(format, size);

View File

@@ -60,8 +60,12 @@ namespace Discord.Rest
/// <inheritdoc />
string IGuildUser.GuildAvatarId => null;
/// <inheritdoc />
string IGuildUser.GuildBannerHash => null;
/// <inheritdoc />
string IGuildUser.GetGuildAvatarUrl(ImageFormat format, ushort size) => null;
/// <inheritdoc />
string IGuildUser.GetGuildBannerUrl(ImageFormat format, ushort size) => null;
/// <inheritdoc />
bool? IGuildUser.IsPending => null;
/// <inheritdoc />
int IGuildUser.Hierarchy => 0;

View File

@@ -50,6 +50,9 @@ namespace Discord.WebSocket
/// <inheritdoc />
public override string GlobalName { get { return GlobalUser.GlobalName; } internal set { GlobalUser.GlobalName = value; } }
/// <inheritdoc/>
public string GuildBannerHash { get; private set; }
/// <inheritdoc />
public GuildPermissions GuildPermissions => new GuildPermissions(Permissions.ResolveGuild(Guild, this));
internal override SocketPresence Presence { get; set; }
@@ -185,6 +188,8 @@ namespace Discord.WebSocket
_timedOutTicks = model.TimedOutUntil.Value?.UtcTicks;
if (model.Pending.IsSpecified)
IsPending = model.Pending.Value;
if (model.Banner.IsSpecified)
GuildBannerHash = model.Banner.Value;
Flags = model.Flags;
}
@@ -263,6 +268,10 @@ namespace Discord.WebSocket
public string GetGuildAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
=> CDN.GetGuildUserAvatarUrl(Id, Guild.Id, GuildAvatarId, size, format);
/// <inheritdoc />
public string GetGuildBannerUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
=> CDN.GetGuildUserBannerUrl(Id, Guild.Id, GuildBannerHash, size, format);
/// <inheritdoc />
public override string GetDisplayAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
=> GetGuildAvatarUrl(format, size) ?? base.GetDisplayAvatarUrl(format, size);

View File

@@ -72,6 +72,10 @@ namespace Discord.WebSocket
public string GuildAvatarId
=> GuildUser.GuildAvatarId;
/// <inheritdoc/>
public string GuildBannerHash
=> GuildUser.GuildBannerHash;
/// <inheritdoc/>
public override ushort DiscriminatorValue
{
@@ -240,6 +244,9 @@ namespace Discord.WebSocket
/// <inheritdoc />
string IGuildUser.GetGuildAvatarUrl(ImageFormat format, ushort size) => GuildUser.GetGuildAvatarUrl(format, size);
/// <inheritdoc />
string IGuildUser.GetGuildBannerUrl(ImageFormat format, ushort size) => GuildUser.GetGuildBannerUrl(format, size);
/// <inheritdoc />
public override string GetDisplayAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
=> GuildUser.GetGuildAvatarUrl() ?? base.GetDisplayAvatarUrl(format, size);

View File

@@ -75,8 +75,12 @@ namespace Discord.WebSocket
/// <inheritdoc />
string IGuildUser.GuildAvatarId => null;
/// <inheritdoc />
string IGuildUser.GuildBannerHash => null;
/// <inheritdoc />
string IGuildUser.GetGuildAvatarUrl(ImageFormat format, ushort size) => null;
/// <inheritdoc />
string IGuildUser.GetGuildBannerUrl(ImageFormat format, ushort size) => null;
/// <inheritdoc />
DateTimeOffset? IGuildUser.PremiumSince => null;
/// <inheritdoc />
DateTimeOffset? IGuildUser.TimedOutUntil => null;