Browse Source

revert to InviteGuild & extend it

pull/2510/head
Misha133 2 years ago
parent
commit
926ff50712
7 changed files with 233 additions and 9 deletions
  1. +1
    -3
      src/Discord.Net.Core/Entities/Invites/IInvite.cs
  2. +143
    -0
      src/Discord.Net.Core/Entities/Invites/InviteGuild.cs
  3. +1
    -1
      src/Discord.Net.Rest/API/Common/Invite.cs
  4. +47
    -0
      src/Discord.Net.Rest/API/Common/InviteGuild.cs
  5. +1
    -1
      src/Discord.Net.Rest/ClientHelper.cs
  6. +1
    -1
      src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
  7. +39
    -3
      src/Discord.Net.Rest/Entities/Invites/RestInvite.cs

+ 1
- 3
src/Discord.Net.Core/Entities/Invites/IInvite.cs View File

@@ -56,13 +56,11 @@ namespace Discord
/// <summary> /// <summary>
/// Gets the guild this invite is linked to. /// Gets the guild this invite is linked to.
/// </summary> /// </summary>
/// <remarks>
/// The guild may be partially populated.
/// </remarks>
/// <returns> /// <returns>
/// A guild object representing the guild that the invite points to. /// A guild object representing the guild that the invite points to.
/// </returns> /// </returns>
IGuild Guild { get; } IGuild Guild { get; }

/// <summary> /// <summary>
/// Gets the ID of the guild this invite is linked to. /// Gets the ID of the guild this invite is linked to.
/// </summary> /// </summary>


+ 143
- 0
src/Discord.Net.Core/Entities/Invites/InviteGuild.cs View File

@@ -0,0 +1,143 @@
using System;

namespace Discord;

public class InviteGuild : ISnowflakeEntity
{
/// <inheritdoc />
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);

/// <inheritdoc/>
public ulong Id { get; private set; }

/// <summary>
/// Gets the name of this guild.
/// </summary>
/// <returns>
/// A string containing the name of this guild.
/// </returns>
public string Name { get; private set; }

/// <summary>
/// Gets the description for the guild.
/// </summary>
/// <returns>
/// The description for the guild; <see langword="null" /> if none is set.
/// </returns>
public string Description { get; private set; }

/// <summary>
/// Gets the ID of this guild's splash image.
/// </summary>
/// <returns>
/// An identifier for the splash image; <see langword="null" /> if none is set.
/// </returns>
public string SplashId { get; private set; }

/// <summary>
/// Gets the URL of this guild's splash image.
/// </summary>
/// <returns>
/// A URL pointing to the guild's splash image; <see langword="null" /> if none is set.
/// </returns>
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId);

/// <summary>
/// Gets the identifier for this guilds banner image.
/// </summary>
/// <returns>
/// An identifier for the banner image; <see langword="null" /> if none is set.
/// </returns>
public string BannerId { get; private set; }

/// <summary>
/// Gets the URL of this guild's banner image.
/// </summary>
/// <returns>
/// A URL pointing to the guild's banner image; <see langword="null" /> if none is set.
/// </returns>
public string BannerUrl => CDN.GetGuildBannerUrl(Id, BannerId, ImageFormat.Auto);

/// <summary>
/// Gets the features for this guild.
/// </summary>
/// <returns>
/// A flags enum containing all the features for the guild.
/// </returns>
public GuildFeatures Features { get; private set; }

/// <summary>
/// Gets the ID of this guild's icon.
/// </summary>
/// <returns>
/// An identifier for the splash image; <see langword="null" /> if none is set.
/// </returns>
public string IconId { get; private set; }

/// <summary>
/// Gets the URL of this guild's icon.
/// </summary>
/// <returns>
/// A URL pointing to the guild's icon; <see langword="null" /> if none is set.
/// </returns>
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId);/// <summary>
///
/// Gets the level of requirements a user must fulfill before being allowed to post messages in this guild.
/// </summary>
/// <returns>
/// The level of requirements.
/// </returns>
public VerificationLevel VerificationLevel { get; private set; }

/// <summary>
/// Gets the code for this guild's vanity invite URL.
/// </summary>
/// <returns>
/// A string containing the vanity invite code for this guild; <see langword="null" /> if none is set.
/// </returns>
public string VanityURLCode { get; private set; }

/// <summary>
/// Gets the number of premium subscribers of this guild.
/// </summary>
/// <remarks>
/// This is the number of users who have boosted this guild.
/// </remarks>
/// <returns>
/// The number of premium subscribers of this guild;
/// </returns>
public int PremiumSubscriptionCount { get; private set; }

/// <summary>
/// Gets the NSFW level of this guild.
/// </summary>
/// <returns>
/// The NSFW level of this guild.
/// </returns>
public NsfwLevel NsfwLevel { get; private set; }

/// <summary>
/// Gets the Welcome Screen of this guild
/// </summary>
/// <returns>
/// The welcome screen of this guild. <see langword="null" /> if none is set.
/// The welcome screen of this guild. <see langword="null" /> if none is set.
/// </returns>
public WelcomeScreen WelcomeScreen { get; private set; }

internal InviteGuild(ulong id, string name, string description, string splashId, string bannerId, GuildFeatures features, string iconId, VerificationLevel verificationLevel, string vanityURLCode, int premiumSubscriptionCount, NsfwLevel nsfwLevel, WelcomeScreen welcomeScreen)
{
Id = id;
Name = name;
Description = description;
SplashId = splashId;
BannerId = bannerId;
Features = features;
IconId = iconId;
VerificationLevel = verificationLevel;
VanityURLCode = vanityURLCode;
PremiumSubscriptionCount = premiumSubscriptionCount;
NsfwLevel = nsfwLevel;
WelcomeScreen = welcomeScreen;
}
}

+ 1
- 1
src/Discord.Net.Rest/API/Common/Invite.cs View File

@@ -7,7 +7,7 @@ namespace Discord.API
[JsonProperty("code")] [JsonProperty("code")]
public string Code { get; set; } public string Code { get; set; }
[JsonProperty("guild")] [JsonProperty("guild")]
public Optional<Guild> Guild { get; set; }
public Optional<InviteGuild> Guild { get; set; }
[JsonProperty("channel")] [JsonProperty("channel")]
public InviteChannel Channel { get; set; } public InviteChannel Channel { get; set; }
[JsonProperty("inviter")] [JsonProperty("inviter")]


+ 47
- 0
src/Discord.Net.Rest/API/Common/InviteGuild.cs View File

@@ -0,0 +1,47 @@
using Newtonsoft.Json;
using System.Collections.Generic;

namespace Discord.API
{
internal class InviteGuild
{
[JsonProperty("id")]
public ulong Id { get; set; }

[JsonProperty("name")]
public string Name { get; set; }

[JsonProperty("splash")]
public Optional<string> Splash { get; set; }

[JsonProperty("banner")]
public Optional<string> BannerHash { get; set; }

[JsonProperty("description")]
public Optional<string> Description { get; set; }

[JsonProperty("icon")]
public Optional<string> IconHash { get; set; }

[JsonProperty("features")]
public GuildFeatures Features { get; set; }

[JsonProperty("verification_level")]
public VerificationLevel VerificationLevel { get; set; }

[JsonProperty("vanity_url_code")]
public Optional<string> VanityUrlCode { get; set; }

[JsonProperty("premium_subscription_count")]
public Optional<int> PremiumSubscriptionCount { get; set; }

[JsonProperty("nsfw")]
public Optional<bool?> Nsfw { get; set; }

[JsonProperty("nsfw_level")]
public NsfwLevel NsfwLevel { get; set; }

[JsonProperty("welcome_screen")]
public Optional<WelcomeScreen> WelcomeScreen { get; set; }
}
}

+ 1
- 1
src/Discord.Net.Rest/ClientHelper.cs View File

@@ -57,7 +57,7 @@ namespace Discord.Rest
{ {
var model = await client.ApiClient.GetInviteAsync(inviteId, options).ConfigureAwait(false); var model = await client.ApiClient.GetInviteAsync(inviteId, options).ConfigureAwait(false);
if (model != null) if (model != null)
return RestInviteMetadata.Create(client, RestGuild.Create(client, model.Guild.IsSpecified ? model.Guild.Value : null), null, model);
return RestInviteMetadata.Create(client, null, null, model);
return null; return null;
} }




+ 1
- 1
src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs View File

@@ -182,7 +182,7 @@ namespace Discord.Rest
if (model.MaxVideoChannelUsers.IsSpecified) if (model.MaxVideoChannelUsers.IsSpecified)
MaxVideoChannelUsers = model.MaxVideoChannelUsers.Value; MaxVideoChannelUsers = model.MaxVideoChannelUsers.Value;
PreferredLocale = model.PreferredLocale; PreferredLocale = model.PreferredLocale;
PreferredCulture = model.PreferredLocale is null ? null : new CultureInfo(PreferredLocale);
PreferredCulture = new CultureInfo(PreferredLocale);
if (model.ApproximateMemberCount.IsSpecified) if (model.ApproximateMemberCount.IsSpecified)
ApproximateMemberCount = model.ApproximateMemberCount.Value; ApproximateMemberCount = model.ApproximateMemberCount.Value;
if (model.ApproximatePresenceCount.IsSpecified) if (model.ApproximatePresenceCount.IsSpecified)


+ 39
- 3
src/Discord.Net.Rest/Entities/Invites/RestInvite.cs View File

@@ -1,5 +1,7 @@
using System; using System;
using System.Collections.Immutable;
using System.Diagnostics; using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Model = Discord.API.Invite; using Model = Discord.API.Invite;


@@ -27,10 +29,18 @@ namespace Discord.Rest
public IUser TargetUser { get; private set; } public IUser TargetUser { get; private set; }
/// <inheritdoc /> /// <inheritdoc />
public TargetUserType TargetUserType { get; private set; } public TargetUserType TargetUserType { get; private set; }
internal IChannel Channel { get; }


/// <inheritdoc cref="IInvite.Guild"/>
public IGuild Guild { get; }
/// <summary>
/// Gets the guild this invite is linked to.
/// </summary>
/// <returns>
/// A partial guild object representing the guild that the invite points to.
/// </returns>
public InviteGuild InviteGuild { get; private set; }

internal IChannel Channel { get; }
internal IGuild Guild { get; }


/// <inheritdoc /> /// <inheritdoc />
public string Code => Id; public string Code => Id;
@@ -61,6 +71,32 @@ namespace Discord.Rest
Inviter = model.Inviter.IsSpecified ? RestUser.Create(Discord, model.Inviter.Value) : null; Inviter = model.Inviter.IsSpecified ? RestUser.Create(Discord, model.Inviter.Value) : null;
TargetUser = model.TargetUser.IsSpecified ? RestUser.Create(Discord, model.TargetUser.Value) : null; TargetUser = model.TargetUser.IsSpecified ? RestUser.Create(Discord, model.TargetUser.Value) : null;
TargetUserType = model.TargetUserType.IsSpecified ? model.TargetUserType.Value : TargetUserType.Undefined; TargetUserType = model.TargetUserType.IsSpecified ? model.TargetUserType.Value : TargetUserType.Undefined;

if (model.Guild.IsSpecified)
{
InviteGuild = new InviteGuild
(model.Guild.Value.Id,
model.Guild.Value.Name,
model.Guild.Value.Description.IsSpecified ? model.Guild.Value.Description.Value : null,
model.Guild.Value.Splash.IsSpecified ? model.Guild.Value.Splash.Value : null,
model.Guild.Value.BannerHash.IsSpecified ? model.Guild.Value.BannerHash.Value : null,
model.Guild.Value.Features,
model.Guild.Value.IconHash.IsSpecified ? model.Guild.Value.IconHash.Value : null,
model.Guild.Value.VerificationLevel,
model.Guild.Value.VanityUrlCode.IsSpecified ? model.Guild.Value.VanityUrlCode.Value : null,
model.Guild.Value.PremiumSubscriptionCount.GetValueOrDefault(0),
model.Guild.Value.NsfwLevel,
model.Guild.Value.WelcomeScreen.IsSpecified
? new WelcomeScreen(
model.Guild.Value.WelcomeScreen.Value.Description.IsSpecified ? model.Guild.Value.WelcomeScreen.Value.Description.Value : null,
model.Guild.Value.WelcomeScreen.Value.WelcomeChannels.Select(ch =>
new WelcomeScreenChannel(
ch.ChannelId,
ch.Description,
ch.EmojiName.IsSpecified ? ch.EmojiName.Value : null,
ch.EmojiId.IsSpecified ? ch.EmojiId.Value : null)).ToImmutableArray())
: null);
}
} }


/// <inheritdoc /> /// <inheritdoc />


Loading…
Cancel
Save