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.

BaseSocketClient.cs 5.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. using Discord.API;
  5. using Discord.Rest;
  6. namespace Discord.WebSocket
  7. {
  8. public abstract partial class BaseSocketClient : BaseDiscordClient, IDiscordClient
  9. {
  10. protected readonly DiscordSocketConfig _baseconfig;
  11. /// <summary> Gets the estimated round-trip latency, in milliseconds, to the gateway server. </summary>
  12. public abstract int Latency { get; protected set; }
  13. public abstract UserStatus Status { get; protected set; }
  14. public abstract Game? Game { get; protected set; }
  15. internal new DiscordSocketApiClient ApiClient => base.ApiClient as DiscordSocketApiClient;
  16. public new SocketSelfUser CurrentUser { get => base.CurrentUser as SocketSelfUser; protected set => base.CurrentUser = value; }
  17. public abstract IReadOnlyCollection<SocketGuild> Guilds { get; }
  18. public abstract IReadOnlyCollection<ISocketPrivateChannel> PrivateChannels { get; }
  19. public abstract IReadOnlyCollection<RestVoiceRegion> VoiceRegions { get; }
  20. internal BaseSocketClient(DiscordSocketConfig config, DiscordRestApiClient client)
  21. : base(config, client) => _baseconfig = config;
  22. private static DiscordSocketApiClient CreateApiClient(DiscordSocketConfig config)
  23. => new DiscordSocketApiClient(config.RestClientProvider, config.WebSocketProvider, DiscordRestConfig.UserAgent);
  24. /// <inheritdoc />
  25. public abstract Task<RestApplication> GetApplicationInfoAsync(RequestOptions options = null);
  26. /// <inheritdoc />
  27. public abstract SocketUser GetUser(ulong id);
  28. /// <inheritdoc />
  29. public abstract SocketUser GetUser(string username, string discriminator);
  30. /// <inheritdoc />
  31. public abstract SocketChannel GetChannel(ulong id);
  32. /// <inheritdoc />
  33. public abstract SocketGuild GetGuild(ulong id);
  34. /// <inheritdoc />
  35. public abstract RestVoiceRegion GetVoiceRegion(string id);
  36. /// <inheritdoc />
  37. public abstract Task StartAsync();
  38. /// <inheritdoc />
  39. public abstract Task StopAsync();
  40. public abstract Task SetStatusAsync(UserStatus status);
  41. public abstract Task SetGameAsync(string name, string streamUrl = null, StreamType streamType = StreamType.NotStreaming);
  42. public abstract Task DownloadUsersAsync(IEnumerable<IGuild> guilds);
  43. /// <inheritdoc />
  44. public Task<RestGuild> CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon = null, RequestOptions options = null)
  45. => ClientHelper.CreateGuildAsync(this, name, region, jpegIcon, options ?? RequestOptions.Default);
  46. /// <inheritdoc />
  47. public Task<IReadOnlyCollection<RestConnection>> GetConnectionsAsync(RequestOptions options = null)
  48. => ClientHelper.GetConnectionsAsync(this, options ?? RequestOptions.Default);
  49. /// <inheritdoc />
  50. public Task<RestInvite> GetInviteAsync(string inviteId, RequestOptions options = null)
  51. => ClientHelper.GetInviteAsync(this, inviteId, options ?? RequestOptions.Default);
  52. // IDiscordClient
  53. async Task<IApplication> IDiscordClient.GetApplicationInfoAsync(RequestOptions options)
  54. => await GetApplicationInfoAsync(options).ConfigureAwait(false);
  55. Task<IChannel> IDiscordClient.GetChannelAsync(ulong id, CacheMode mode, RequestOptions options)
  56. => Task.FromResult<IChannel>(GetChannel(id));
  57. Task<IReadOnlyCollection<IPrivateChannel>> IDiscordClient.GetPrivateChannelsAsync(CacheMode mode, RequestOptions options)
  58. => Task.FromResult<IReadOnlyCollection<IPrivateChannel>>(PrivateChannels);
  59. async Task<IReadOnlyCollection<IConnection>> IDiscordClient.GetConnectionsAsync(RequestOptions options)
  60. => await GetConnectionsAsync(options).ConfigureAwait(false);
  61. async Task<IInvite> IDiscordClient.GetInviteAsync(string inviteId, RequestOptions options)
  62. => await GetInviteAsync(inviteId, options).ConfigureAwait(false);
  63. Task<IGuild> IDiscordClient.GetGuildAsync(ulong id, CacheMode mode, RequestOptions options)
  64. => Task.FromResult<IGuild>(GetGuild(id));
  65. Task<IReadOnlyCollection<IGuild>> IDiscordClient.GetGuildsAsync(CacheMode mode, RequestOptions options)
  66. => Task.FromResult<IReadOnlyCollection<IGuild>>(Guilds);
  67. async Task<IGuild> IDiscordClient.CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon, RequestOptions options)
  68. => await CreateGuildAsync(name, region, jpegIcon, options).ConfigureAwait(false);
  69. Task<IUser> IDiscordClient.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
  70. => Task.FromResult<IUser>(GetUser(id));
  71. Task<IUser> IDiscordClient.GetUserAsync(string username, string discriminator, RequestOptions options)
  72. => Task.FromResult<IUser>(GetUser(username, discriminator));
  73. Task<IVoiceRegion> IDiscordClient.GetVoiceRegionAsync(string id, RequestOptions options)
  74. => Task.FromResult<IVoiceRegion>(GetVoiceRegion(id));
  75. Task<IReadOnlyCollection<IVoiceRegion>> IDiscordClient.GetVoiceRegionsAsync(RequestOptions options)
  76. => Task.FromResult<IReadOnlyCollection<IVoiceRegion>>(VoiceRegions);
  77. }
  78. }