You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

RestUser.cs 2.9 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading.Tasks;
  4. using Model = Discord.API.User;
  5. namespace Discord.Rest
  6. {
  7. [DebuggerDisplay(@"{DebuggerDisplay,nq}")]
  8. public class RestUser : RestEntity<ulong>, IUser, IUpdateable
  9. {
  10. public bool IsBot { get; private set; }
  11. public string Username { get; private set; }
  12. public ushort DiscriminatorValue { get; private set; }
  13. public string AvatarId { get; private set; }
  14. public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
  15. public string Discriminator => DiscriminatorValue.ToString("D4");
  16. public string Mention => MentionUtils.MentionUser(Id);
  17. public virtual IActivity Activity => null;
  18. public virtual UserStatus Status => UserStatus.Offline;
  19. public virtual bool IsWebhook => false;
  20. internal RestUser(BaseDiscordClient discord, ulong id)
  21. : base(discord, id)
  22. {
  23. }
  24. internal static RestUser Create(BaseDiscordClient discord, Model model)
  25. => Create(discord, null, model, null);
  26. internal static RestUser Create(BaseDiscordClient discord, IGuild guild, Model model, ulong? webhookId)
  27. {
  28. RestUser entity;
  29. if (webhookId.HasValue)
  30. entity = new RestWebhookUser(discord, guild, model.Id, webhookId.Value);
  31. else
  32. entity = new RestUser(discord, model.Id);
  33. entity.Update(model);
  34. return entity;
  35. }
  36. internal virtual void Update(Model model)
  37. {
  38. if (model.Avatar.IsSpecified)
  39. AvatarId = model.Avatar.Value;
  40. if (model.Discriminator.IsSpecified)
  41. DiscriminatorValue = ushort.Parse(model.Discriminator.Value);
  42. if (model.Bot.IsSpecified)
  43. IsBot = model.Bot.Value;
  44. if (model.Username.IsSpecified)
  45. Username = model.Username.Value;
  46. }
  47. public virtual async Task UpdateAsync(RequestOptions options = null)
  48. {
  49. var model = await Discord.ApiClient.GetUserAsync(Id, options).ConfigureAwait(false);
  50. Update(model);
  51. }
  52. public Task<RestDMChannel> GetOrCreateDMChannelAsync(RequestOptions options = null)
  53. => UserHelper.CreateDMChannelAsync(this, Discord, options);
  54. public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
  55. => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
  56. public override string ToString() => $"{Username}#{Discriminator}";
  57. private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})";
  58. //IUser
  59. async Task<IDMChannel> IUser.GetOrCreateDMChannelAsync(RequestOptions options)
  60. => await GetOrCreateDMChannelAsync(options);
  61. }
  62. }