/// <inheritdoc /> public async ValueTask <Result> CheckAsync(RequireOwnerAttribute attribute, CancellationToken ct = default) { var getApplication = await _oauth2API.GetCurrentApplicationInformationAsync(ct); if (!getApplication.IsSuccess) { return(Result.FromError(getApplication)); } var application = getApplication.Entity; if (!application.Owner.ID.HasValue) { return(new GenericError("The application owner's ID was not present.")); } return(application.Owner.ID.Value == _context.User.ID ? Result.FromSuccess() : new ConditionNotSatisfiedError("You need to be the bot owner to do that.")); }
/// <summary> /// Updates the application's slash commands. /// </summary> /// <param name="guildID">The ID of the guild to update slash commands in, if any.</param> /// <param name="ct">The cancellation token for this operation.</param> /// <returns>A result which may or may not have succeeded.</returns> public async Task <Result> UpdateSlashCommandsAsync ( Snowflake?guildID = null, CancellationToken ct = default ) { var getApplication = await _oauth2API.GetCurrentApplicationInformationAsync(ct); if (!getApplication.IsSuccess) { return(Result.FromError(getApplication)); } var application = getApplication.Entity; var createCommands = _commandTree.CreateApplicationCommands(); if (!createCommands.IsSuccess) { return(Result.FromError(createCommands)); } CreateInteractionMethods ( guildID, application, out var updateMethod, ct ); var commands = createCommands.Entity; // Upsert the current valid command set var updateCommands = await updateMethod(commands); return(updateCommands.IsSuccess ? Result.FromSuccess() : Result.FromError(updateCommands)); }
/// <summary> /// Updates the application's slash commands. /// </summary> /// <param name="guildID">The ID of the guild to update slash commands in, if any.</param> /// <param name="ct">The cancellation token for this operation.</param> /// <returns>A result which may or may not have succeeded.</returns> public async Task<UpdateCommandsResult> UpdateSlashCommandsAsync ( Snowflake? guildID = null, CancellationToken ct = default ) { var getApplication = await _oauth2API.GetCurrentApplicationInformationAsync(ct); if (!getApplication.IsSuccess) { return UpdateCommandsResult.FromError(getApplication); } var application = getApplication.Entity; var createCommands = _commandTree.CreateApplicationCommands(out var commands); if (!createCommands.IsSuccess) { return UpdateCommandsResult.FromError(createCommands); } CreateInteractionMethods ( guildID, ct, application, out var deleteMethod, out var getMethod, out var updateMethod ); // Upsert the current valid command set var currentValidCommands = new List<string>(); foreach (var command in commands!) { var updateResult = await updateMethod(command); if (!updateResult.IsSuccess) { return UpdateCommandsResult.FromError(updateResult); } currentValidCommands.Add(command.Name); } // Clear out old and invalid commands var getCurrentCommands = await getMethod(); if (!getCurrentCommands.IsSuccess) { return UpdateCommandsResult.FromError(getCurrentCommands); } var currentCommands = getCurrentCommands.Entity; var invalidCommands = currentCommands.Where(c => currentValidCommands.All(n => c.Name != n)); foreach (var invalidCommand in invalidCommands) { var deleteResult = await deleteMethod(invalidCommand.ID); if (!deleteResult.IsSuccess) { return UpdateCommandsResult.FromError(deleteResult); } } return UpdateCommandsResult.FromSuccess(); }