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.

RpcUser.cs 2.6 KiB

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