|
@@ -6,11 +6,18 @@ using Model = Discord.API.User; |
|
|
namespace Discord |
|
|
namespace Discord |
|
|
{ |
|
|
{ |
|
|
internal class SelfUser : User, ISelfUser |
|
|
internal class SelfUser : User, ISelfUser |
|
|
{ |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
private long _idleSince; |
|
|
|
|
|
private UserStatus _status; |
|
|
|
|
|
private Game _game; |
|
|
|
|
|
|
|
|
public string Email { get; private set; } |
|
|
public string Email { get; private set; } |
|
|
public bool IsVerified { get; private set; } |
|
|
public bool IsVerified { get; private set; } |
|
|
public bool IsMfaEnabled { get; private set; } |
|
|
public bool IsMfaEnabled { get; private set; } |
|
|
|
|
|
|
|
|
|
|
|
public override UserStatus Status => _status; |
|
|
|
|
|
public override Game Game => _game; |
|
|
|
|
|
|
|
|
public override DiscordClient Discord { get; } |
|
|
public override DiscordClient Discord { get; } |
|
|
|
|
|
|
|
|
public SelfUser(DiscordClient discord, Model model) |
|
|
public SelfUser(DiscordClient discord, Model model) |
|
@@ -49,5 +56,27 @@ namespace Discord |
|
|
var model = await Discord.ApiClient.ModifySelfAsync(args).ConfigureAwait(false); |
|
|
var model = await Discord.ApiClient.ModifySelfAsync(args).ConfigureAwait(false); |
|
|
Update(model, UpdateSource.Rest); |
|
|
Update(model, UpdateSource.Rest); |
|
|
} |
|
|
} |
|
|
|
|
|
public async Task ModifyStatusAsync(Action<ModifyPresenceParams> func) |
|
|
|
|
|
{ |
|
|
|
|
|
if (func == null) throw new NullReferenceException(nameof(func)); |
|
|
|
|
|
|
|
|
|
|
|
var args = new ModifyPresenceParams(); |
|
|
|
|
|
func(args); |
|
|
|
|
|
|
|
|
|
|
|
var game = args.Game.GetValueOrDefault(_game); |
|
|
|
|
|
var status = args.Status.GetValueOrDefault(_status); |
|
|
|
|
|
|
|
|
|
|
|
long idleSince = _idleSince; |
|
|
|
|
|
if (status == UserStatus.Idle && _status != UserStatus.Idle) |
|
|
|
|
|
idleSince = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); |
|
|
|
|
|
var apiGame = new API.Game { Name = game.Name, StreamType = game.StreamType, StreamUrl = game.StreamUrl }; |
|
|
|
|
|
|
|
|
|
|
|
await Discord.ApiClient.SendStatusUpdateAsync(status == UserStatus.Idle ? _idleSince : (long?)null, apiGame).ConfigureAwait(false); |
|
|
|
|
|
|
|
|
|
|
|
//Save values |
|
|
|
|
|
_idleSince = idleSince; |
|
|
|
|
|
_game = game; |
|
|
|
|
|
_status = status; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |